реклама на сайте
подробности

 
 
> CC2500 как использовать FEC ?
and_ssw
сообщение Mar 3 2012, 12:20
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 3-03-12
Пользователь №: 70 586



Как его использовать ??

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


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

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

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

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

Прочитал даташит и два апнота по FEC, но так и не понял как его настроить.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
rx3apf
сообщение Mar 3 2012, 12:49
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



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

Сообщение отредактировал rx3apf - Mar 3 2012, 12:50
Go to the top of the page
 
+Quote Post
and_ssw
сообщение Mar 3 2012, 13:41
Сообщение #3





Группа: Новичок
Сообщений: 8
Регистрация: 3-03-12
Пользователь №: 70 586



Хорошо. Сейчас попробую.
В даташите написано, что для включения FEC нужно установить фиксированную длину пакета.

Если работать с переменной, то все работает но походу FEC не кодирует.
Go to the top of the page
 
+Quote Post
and_ssw
сообщение Mar 3 2012, 15:17
Сообщение #4





Группа: Новичок
Сообщений: 8
Регистрация: 3-03-12
Пользователь №: 70 586



Провел эксперимен.

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

Но 8 и 16ть работают. В даташите нигде нет упоминания насчет кратности 8ми.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Mar 3 2012, 15:27
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



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

Странно. В CC1100 точно работают 4, 8, 16 - проверял и использую. На 2500 проверял только 16. Уж кратно 4 должно бы работать... В даташите действительно ничего такого вроде как не наблюдается...
Go to the top of the page
 
+Quote Post
and_ssw
сообщение Mar 3 2012, 16:08
Сообщение #6





Группа: Новичок
Сообщений: 8
Регистрация: 3-03-12
Пользователь №: 70 586



Это я поспешил.

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




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

У них функция отправки ориентирована на переменную длину пакета. Т.е. в начале отправляется длинна а после полезные данные.
Я ее переписал не глядя.
Go to the top of the page
 
+Quote Post
and_ssw
сообщение Mar 3 2012, 19:31
Сообщение #7





Группа: Новичок
Сообщений: 8
Регистрация: 3-03-12
Пользователь №: 70 586



Господа. А как же тогда работает функция CRC_AUTOFLUSH ?

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

Вычитал в даташите, что при использовании CRC_AUTOFLUSH и APPEND нужно учитывать дополнительные два байта. Это не помогло.
Вырубил APPEND и это тоже не дало эффекта.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Mar 3 2012, 20:55
Сообщение #8


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Пакет нельзя начинать читать до окончания приема, и он не может быть больше 64 байтов (или 62, если добавляются байты состояния и RSSI). Насколько помню, вполне нормально работало.
Go to the top of the page
 
+Quote Post
and_ssw
сообщение Mar 3 2012, 21:27
Сообщение #9





Группа: Новичок
Сообщений: 8
Регистрация: 3-03-12
Пользователь №: 70 586



Я начинаю считывать пакет только после перехода в состояние Idle.

Также думал, что регистр RXBYTES показывает сколько байт находится в rx буфере. Но если сбросить буфер, то он показывает 31 (на это число настрое порог, и даже если порог FIFOTHR изменить то 31 так и останется). После завершения приема он почему-то становится равным 0x0F. При этом не важно сколько передано байт.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Mar 3 2012, 21:30
Сообщение #10


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Если не 0, то что-то там еще есть, надо почистить. Вероятно, потому и autoflush не работает.
Go to the top of the page
 
+Quote Post
and_ssw
сообщение Mar 3 2012, 22:58
Сообщение #11





Группа: Новичок
Сообщений: 8
Регистрация: 3-03-12
Пользователь №: 70 586



C AUTOFLUSH разобрался. Помогло внимательное чтение даташита.

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

При включенном AUTOFLUSH нужно сначала проверить состояние буфера а уже потом читать.
Если забрать посылку(и при этом произошел AUTOFLUSH ) а уже после проверить состояние, то у CC2500 сносит голову. Для возрата его в нормальное рабочее состояние нужно сделать сброс RX буфера.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 22:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01444 секунд с 7
ELECTRONIX ©2004-2016