Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: CC2500 как использовать FEC ?
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Rf & Microwave Design
and_ssw
Как его использовать ??

Выставил фиксированную длину пакета, FEC включил, используются добавочные байты RSSI и LQI.


Пробую передать посылку 8 байт.
Какое значение нужно указывать в PKTLEN? Размер посылки, размер посылки+ CRC, размер посылки + CRC + Trellis terminator ?

На принимающей стороне при вижу, что приходит пакет длинной 0x0F.
В начале вижу свои данные, дальше идет мусор. Сначала думал, что сразу за моими данными идет RSSI и LQI. Но вижу, что бит CRC пляшет рандомно.

Попробовал передать посылку 6ть байт.
На входе снова 15ть байт и ситуация как и выше.

Перешел на посылку в 12ть байт.
Тут снова приходить пакет длинной 15ть байт. Но в посылке вижу только первые восемь байт мои. Остальное мусор.
Очень редко доходят все 12ть байт.

Прочитал даташит и два апнота по FEC, но так и не понял как его настроить.
rx3apf
Длина пакета (в смысле, его содержательной части), причем, насколько я помню, для FEC обязательно четная. FEC включается всего лишь включением соответствующего бита.
and_ssw
Хорошо. Сейчас попробую.
В даташите написано, что для включения FEC нужно установить фиксированную длину пакета.

Если работать с переменной, то все работает но походу FEC не кодирует.
and_ssw
Провел эксперимен.

Длина 12 и 14 не работают.

Но 8 и 16ть работают. В даташите нигде нет упоминания насчет кратности 8ми.
rx3apf
Цитата(and_ssw @ Mar 3 2012, 19:17) *
Длина 12 и 14 не работают.
Но 8 и 16ть работают. В даташите нигде нет упоминания насчет кратности 8ми.

Странно. В CC1100 точно работают 4, 8, 16 - проверял и использую. На 2500 проверял только 16. Уж кратно 4 должно бы работать... В даташите действительно ничего такого вроде как не наблюдается...
and_ssw
Это я поспешил.

Нужно всетаки все настройки еще проглядеть. Т.к. с выключенным FEC и фиксированной длинной меньше потерянных пакетов, чем со включенным FEC.




Нашел ошибку. За основу брал код от техаса.

У них функция отправки ориентирована на переменную длину пакета. Т.е. в начале отправляется длинна а после полезные данные.
Я ее переписал не глядя.
and_ssw
Господа. А как же тогда работает функция CRC_AUTOFLUSH ?

Приходит посылка. Считываю ее, вижу CRC флаг не совпал. Но ведь почему посылка не сбросилась ?
Вторая ситуация. Приходит посылка, считываю ее и вижу что после этого в буфере есть еще байты а это уже признак того, что пришло что-то левое или посылка битая. Но у меня ведь стоит фиксированный PKTLEN. Почему все лишнее не отбрасывается?

Вычитал в даташите, что при использовании CRC_AUTOFLUSH и APPEND нужно учитывать дополнительные два байта. Это не помогло.
Вырубил APPEND и это тоже не дало эффекта.
rx3apf
Пакет нельзя начинать читать до окончания приема, и он не может быть больше 64 байтов (или 62, если добавляются байты состояния и RSSI). Насколько помню, вполне нормально работало.
and_ssw
Я начинаю считывать пакет только после перехода в состояние Idle.

Также думал, что регистр RXBYTES показывает сколько байт находится в rx буфере. Но если сбросить буфер, то он показывает 31 (на это число настрое порог, и даже если порог FIFOTHR изменить то 31 так и останется). После завершения приема он почему-то становится равным 0x0F. При этом не важно сколько передано байт.
rx3apf
Если не 0, то что-то там еще есть, надо почистить. Вероятно, потому и autoflush не работает.
and_ssw
C AUTOFLUSH разобрался. Помогло внимательное чтение даташита.

Он у меня срабатывал. Но я это событие неправильно обрабатывал.

При включенном AUTOFLUSH нужно сначала проверить состояние буфера а уже потом читать.
Если забрать посылку(и при этом произошел AUTOFLUSH ) а уже после проверить состояние, то у CC2500 сносит голову. Для возрата его в нормальное рабочее состояние нужно сделать сброс RX буфера.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.