Отличия RFM69 от RFM22/23B

Отличия RFM69 от RFM22/23B

  1. Аппаратура

Стандартная версия RFM69HW полностью несовместима с RFM22/23B по ножкам. Совместимая версия RFM69HCW – может быть установлена вместо RFM22/23B-S1/S2 со следующими изменениями:
Вывод NIRQ (прерывание 22-й) попадает на ножку Reset 69 й. Эту цепь нужно разорвать подать на RESET соответствующий сигнал.
На выход прерывания подключить ножку DIO0 (GPIO0 по нумерации RFM22).

  1. Программирование

Назначение и состав регистров полностью несовместимы. Детали функционирования также отличаются очень сильно. Ниже рассмотрены особенности применительно к протоколу LRS Expert.

  1. Частота полностью задается регистрами 7-9 (3 байта). Понятий базы и канала прыжка здесь нет. Самая главная константа Fstep - вес бита в этих регистрах равна 61.03515625 Гц и отбрасывать дробную часть не рекомендуется. Частота приема/передачи F=Fstep*R7R8R9.
  2. Девиация задается регистрами 5-6 и равна Fstep*R5R6. Для экспертовского протокола это будет 17500 Гц или константа 0x11f.
  3. Бодовая скорость задается регистрами R3,R4 и равна 32000000/R3R4. При включенном манчестере она удваивается, поэтому исходные 7400 превращаются в 14800 бод или константу 0x0872.
  4. Режим работы выбираем GFSK c BT=0.5, поэтому R2=0x02.
  5. Так как манчестер 69-й отличается от манчестера 22/23, тем что охватывает только payload и CRC (а не весь пакет), мы ставим количество байт преамбулы 4 (R0x2C=0, R0x2d=3), и количество синхрослов =4 (R0x2E=98).
  6. Синхрослова 0x2d и 0xd4 от RFM2x, превращаются на приемной стороне в 4 слова: 0x59, 0xa6, 0xa6, 0x65, коие мы и грузим в регистры 0x2f - 0x32.
  7. Полосу пропускания выбираем в 32 кГц, константой 0x44 в регистр 0x19. Если планируется использовать AFC, для этого режима полоса определяется регистром 0x1A. Как правило она немного уже, например 20 кГц = 0x54.
  8. AFC использовать не рекомендуется – этот механизм работает очень странно и нестабильно (возможно я не разобрался, но и другие пока тоже). Вместо него используем FEI (замер погрешности частоты, без автоподстройки), запуская его по прерыванию от приема последнего синхрослова. Для этого начальное значение регистра 0х1E будет 2, а после приема синхрослова 0х22. Значение поправки FEI вычитываем по прерыванию от приема пакета из регистров 0x21,0x22. Поправку усредняем и добавляем к общей частоте в регистрах 7-9.
  9. AGC используем автоматическое, записав 0x00 в регистр 0х18. Старший бит этого регистра также выбирает 50 Ом на антенном входе.
  10. Режим пакета задаем в регистре 0х37 значением 0х28. Это манчестер, без байта длинны, адреса и без CRC. К сожалению CRC RFM69 оказалось несовместимой с RFM22/23. Видимо при одинаковом полиноме X16+X12+X5+1 они используют разные начальные значения, поэтому CRC придется проверять программно. FRM23 начинает с 0.
  11. Размер пакета выбираем 18 байт: 16 байт протокола плюс байта CRC.
  12. Важный регистр 0x29 – это порог чувствительности. RFM69 не начнет ничего принимать, пока уровень сигнал не превысит это значение. Вес бита в регистре 0х29, как в регистрах RSSI равен 0.5 дБ (как и у RFM22). Но значение дается наоборот, 0 – это минимальная чувствительность, 255 – максимальная. Я заношу в этот регистр константу 222, что немного ниже реально достижимой чувствительности.
  13. Прерывания настраиваются через регистр 0х25. Если мы выбираем DIO0 в качестве линии прерывания, то для Rx режима туда нужно положить сначала 0х80 (прерывание по приему преамбулы и последнего синхрослова), а затем 0x40 (прерывание по payload), а для передачи 00 (packet sent).
  14. Режим работы переключается регистром 1. Помните, что перед изменением частоты, нужно перевести модуль в режим Standby.
  15. Данные кладутся и вычитываются из FIFO через регистр 0. Сброс FIFO через регистр 0x28.

Простейший алгоритм подсчета CRC16:
unsigned short CaleCRC16(const unsigned char *DataBlock, unsigned DataBlockLen )
{
unsigned short crc = 0x0000;

while(DataBlockLen–) {
crc ^= *DataBlock++ << 8;
for (unsigned char i = 0; i < 8; i++)
crc = crc & 0x8000 ? ( crc << 1 ) ^ 0x1021 : crc << 1;
}
return crc;
};

  • 7877
Comments
P_L_Z

спрошу тут
а вот чем si4432 отличается от rfm22b ?
впаял в оранжевый приемник si4432 а она не работает, хотя припаянная к ардуинопромини работала

baychi
P_L_Z;bt116014

спрошу тут
а вот чем si4432 отличается от rfm22b ?
впаял в оранжевый приемник si4432 а она не работает, хотя припаянная к ардуинопромини работала

Не понял. si4432 - это микросхема, на основе которой построены модули RFM22b/23b.
Вы саму микросхему перепаяли?

P_L_Z
baychi;bt116015

Не понял. si4432 - это микросхема, на основе которой построены модули RFM22b/23b.
Вы саму микросхему перепаяли?

точно si4432 это микросхема, модуль с этой микросхемой не знаю как обозвать
такой он вобщем www.aliexpress.com/item/…/929600736.html

baychi
P_L_Z;bt116016

точно si4432 это микросхема, модуль с этой микросхемой не знаю как обозвать
такой он вобщем www.aliexpress.com/item/…/929600736.html

С такой платкой я дела не имел. Надо смотреть даташит…
Есть там ножки, которые Вы оставили в воздухе? Типа SDN (его надо на землю)?
Можете еще спростиь в rcopen.com/forum/f90/topic302333, там вроде ктото игрался с подобным…

P_L_Z

даташит один к одному с модулем rfm22b
sdn на землю припаян
не припаяны остались gpio0 gpio1 gpio2

baychi
P_L_Z;bt116019

даташит один к одному с модулем rfm22b
sdn на землю припаян
не припаяны остались gpio0 gpio1 gpio2

Ваш модуль называется DRF4432F20www.electrodragon.com/w/images/…/DRF4432F20.pdf.
Цоколевка отличается от RFM22/23. Набор ножек похож, но переключение антенны похоже уже привязано к GPIO 0/1.
Других отличий не вижу. Должна работать. Проверьте монтаж еще раз.
Какую прошивку использовали? Если мою, посмотрите, что пишет через UART…

P_L_Z
baychi;bt116020

Ваш модуль называется DRF4432F20www.electrodragon.com/w/images/…/DRF4432F20.pdf.
Цоколевка отличается от RFM22/23. Набор ножек похож, но переключение антенны похоже уже привязано к GPIO 0/1.
Других отличий не вижу. Должна работать. Проверьте монтаж еще раз.
Какую прошивку использовали? Если мою, посмотрите, что пишет через UART…

шил openlrsng через gui , режиме анализатора спектора ничего не кажет
думаю еще мегу другую впаять попробовать она у меня почемуто через isp не читается

gorbln
P_L_Z;bt116016

точно si4432 это микросхема, модуль с этой микросхемой не знаю как обозвать
такой он вобщем www.aliexpress.com/item/…/929600736.html

Я с таким игрался. У меня всё работало. Правда, это был модем, а не передатчик р/у - но основа у них одинаковая (OpenLRS)

Карабас

Что скажете по поводу использования rfm69 для тактирования микроконтроллера? Рег.0х26 после сброса отключает выход генератора, если я правильно понял. Как же тогда без него стартовать МК? Еще один баг разработчиков?

baychi
Карабас;bt116081

Что скажете по поводу использования rfm69 для тактирования микроконтроллера? Рег.0х26 после сброса отключает выход генератора, если я правильно понял. Как же тогда без него стартовать МК? Еще один баг разработчиков?

По даташиту после ресета там 5, то есть FXOSC / 32.
Вы проверяли, как на самом деле?
А насчет тактирования - я предпочитаю максимальную независимость контроллера от модуля, что-бы всегда можно было диагностировать последний.

Карабас

Померил, действительно есть 1 Мгц

P_L_Z
{gorbln};bt116079

Я с таким игрался. У меня всё работало. Правда, это был модем, а не передатчик р/у - но основа у них одинаковая (OpenLRS)

так и у меня работало в самодельном приемнике, а вот впаянное в готовый приемник вместо rfm22 не заработало

baychi
Карабас;bt116090

Померил, действительно есть 1 Мгц

Ясно. Спасибо.

baychi
P_L_Z;bt116132

так и у меня работало в самодельном приемнике, а вот впаянное в готовый приемник вместо rfm22 не заработало

Ищите ошибку в монтаже.
Как вариант - грузите мою прошивку OpenLRS и смотрите, что она пишет через UART.
Вы починили загрузку программ?
Не забывайте, что на Оранджевых приемниках неправильно выставленны фьзы порога притания в Меге и прошивка или настройки могут слетать…