Полная версия этой страницы:
CC2500 как использовать FEC ?
and_ssw
Mar 3 2012, 12:20
Как его использовать ??
Выставил фиксированную длину пакета, FEC включил, используются добавочные байты RSSI и LQI.
Пробую передать посылку 8 байт.
Какое значение нужно указывать в PKTLEN? Размер посылки, размер посылки+ CRC, размер посылки + CRC + Trellis terminator ?
На принимающей стороне при вижу, что приходит пакет длинной 0x0F.
В начале вижу свои данные, дальше идет мусор. Сначала думал, что сразу за моими данными идет RSSI и LQI. Но вижу, что бит CRC пляшет рандомно.
Попробовал передать посылку 6ть байт.
На входе снова 15ть байт и ситуация как и выше.
Перешел на посылку в 12ть байт.
Тут снова приходить пакет длинной 15ть байт. Но в посылке вижу только первые восемь байт мои. Остальное мусор.
Очень редко доходят все 12ть байт.
Прочитал даташит и два апнота по FEC, но так и не понял как его настроить.
Длина пакета (в смысле, его содержательной части), причем, насколько я помню, для FEC обязательно четная. FEC включается всего лишь включением соответствующего бита.
and_ssw
Mar 3 2012, 13:41
Хорошо. Сейчас попробую.
В даташите написано, что для включения FEC нужно установить фиксированную длину пакета.
Если работать с переменной, то все работает но походу FEC не кодирует.
and_ssw
Mar 3 2012, 15:17
Провел эксперимен.
Длина 12 и 14 не работают.
Но 8 и 16ть работают. В даташите нигде нет упоминания насчет кратности 8ми.
Цитата(and_ssw @ Mar 3 2012, 19:17)

Длина 12 и 14 не работают.
Но 8 и 16ть работают. В даташите нигде нет упоминания насчет кратности 8ми.
Странно. В CC1100 точно работают 4, 8, 16 - проверял и использую. На 2500 проверял только 16. Уж кратно 4 должно бы работать... В даташите действительно ничего такого вроде как не наблюдается...
and_ssw
Mar 3 2012, 16:08
Это я поспешил.
Нужно всетаки все настройки еще проглядеть. Т.к. с выключенным FEC и фиксированной длинной меньше потерянных пакетов, чем со включенным FEC.
Нашел ошибку. За основу брал код от техаса.
У них функция отправки ориентирована на переменную длину пакета. Т.е. в начале отправляется длинна а после полезные данные.
Я ее переписал не глядя.
and_ssw
Mar 3 2012, 19:31
Господа. А как же тогда работает функция CRC_AUTOFLUSH ?
Приходит посылка. Считываю ее, вижу CRC флаг не совпал. Но ведь почему посылка не сбросилась ?
Вторая ситуация. Приходит посылка, считываю ее и вижу что после этого в буфере есть еще байты а это уже признак того, что пришло что-то левое или посылка битая. Но у меня ведь стоит фиксированный PKTLEN. Почему все лишнее не отбрасывается?
Вычитал в даташите, что при использовании CRC_AUTOFLUSH и APPEND нужно учитывать дополнительные два байта. Это не помогло.
Вырубил APPEND и это тоже не дало эффекта.
Пакет нельзя начинать читать до окончания приема, и он не может быть больше 64 байтов (или 62, если добавляются байты состояния и RSSI). Насколько помню, вполне нормально работало.
and_ssw
Mar 3 2012, 21:27
Я начинаю считывать пакет только после перехода в состояние Idle.
Также думал, что регистр RXBYTES показывает сколько байт находится в rx буфере. Но если сбросить буфер, то он показывает 31 (на это число настрое порог, и даже если порог FIFOTHR изменить то 31 так и останется). После завершения приема он почему-то становится равным 0x0F. При этом не важно сколько передано байт.
Если не 0, то что-то там еще есть, надо почистить. Вероятно, потому и autoflush не работает.
and_ssw
Mar 3 2012, 22:58
C AUTOFLUSH разобрался. Помогло внимательное чтение даташита.
Он у меня срабатывал. Но я это событие неправильно обрабатывал.
При включенном AUTOFLUSH нужно сначала проверить состояние буфера а уже потом читать.
Если забрать посылку(и при этом произошел AUTOFLUSH ) а уже после проверить состояние, то у CC2500 сносит голову. Для возрата его в нормальное рабочее состояние нужно сделать сброс RX буфера.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.