Обсуждаем приемники, передатчики, радиомикрофоны, жучки, генераторы, ВЧ-усилители, антенны и прочее радиохозяйство
Ответить

Re: Si4463 не взлетает

Пн сен 18, 2017 20:12:14

-выкинуть библиотеку от NiceRF для ардуино..))
-Или помехи при считывании с SI4463. Или при записи на SI4463.
-др.

Re: Si4463 не взлетает

Вт сен 19, 2017 17:56:28

А из-за плохой связи, из-за антенны может быть такое?

Re: Si4463 не взлетает

Вт сен 19, 2017 20:07:34

Если с библиотекой всё нормально (в чём я не уверен), то тогда ищите источник помех.
Конкретно с Si4463 пока не работал, только с другими модулями. Но разницы нет, т.к. все модули работают одинаково (по SPI).

-Из-за плохой связи могут быть ошибки при передачи пакетов по эфиру. Но во всех современных радиомодулях (включая Si4463) есть аппаратная проверка контрольной суммы. При этом вероятность приёма пакетов с ошибками (по эфиру) крайне низкая ... я бы сказал стремится к нулю)). Например при включенной CRC16, у меня ещё небыло случаев, чтобы радиомодуль принял пакет по эфиру с ошибками.
В другой теме экспериментировали с модулями. Радиомодуль может принимать пакеты с ошибка по эфиру, если например отключить проверку CRC и уменьшить длину преамбулы до 1 байт и длину адреса до 2...3 байт. В этом случае (при выключенном передатчике) приёмник радиомодуля синхронизируется по шуму эфира и выдаёт случайный набор битов)).

-Из-за антенны могут быть наводки от работающего передатчика (на полную мощность). Уже обсуждали, когда делали радиоуправляемый самолётик тут - viewtopic.php?f=28&t=141596
Врубаем передатчик на полную мощность - идут ошибки при чтении приёмниго буфера (по SPI) RFM23BP.
Потом поставили нормальную антенну и ошибки (помехи от передатчика) пропали)) Есть и другие варианты.

-Из-за помех от различных устройств могут быть ошибки. Например, когда делали радиоуправляемый кораблик, мы использовали nRF24L01. Там помехи были при работающем двигателе. Даже видео сняли)) Врубаем двигатель, зелёный светодиод на пульте мигает - идут ошибки при чтении приёмниго буфера (по SPI) nRF24L01. Помехи такие сильные, что аж сам модуль зависает )) Включается автоматическая перезагрузка модуля.)) https://www.youtube.com/watch?v=cQme_y4TORw
Потом запаяли сам радиомодуль nRF24L01 в экран и добавили фильт по питанию и фильтр на двигатель - ошибки (помехи от двигателя) пропали))

-Из-за плохого питания могут быть ошибки. Подключали к импульсному блоку питания, получили ошибки. Даже точно выяснили причину: импульсные помехи от блока питания по проводу MISO, по которому в МК приходят данные из приёмного буфера радиомодуля. ))
Поэтому на все модули ставят фильтры по питанию:
конденсаторы - обязательно. Дополнительные дросселя - желательно. Отдельные стабилизаторы - желательно. И т.д.
Короче, сделали нормальное питание - ошибки (мпульсные помехи от блока питания) пропали)) Гдето видео валяется))

-Ну и наверное самое главное: мы во всех схемах используем контрольные суммы. Считаем CRC в МК и добавляем к каждому пакету. При этом что бы не случилось (помехи по проводам, обрав проводов радиомодуля, отключение питания радиомодуля или падение питания ниже нормы... и т.д.) пакеты с ошибками у нас не проходят)) Т.е. ложных команд (в радиоуправляемых схемах) у нас нет.

Кратко вот. )) :tea:

P.S. А вообще... если ошибки идут часто, то источник помех обычно обнаруживается быстро)) Если есть приборы, то совсем хорошо))
Но обычно достаточно просто подключить радиомодуль напрямую к МК и погонять туда-сюда пустые пакеты, при разных условиях:
-на разной скорости SPI (маловероятно, но на всякий случай).
-на разной мощности передатчика (мин/макс).
-от отдельного источника питания (от батарей).
-при отключеном дополнительном оборудовании (всё лишнее отключить).
-и т.д.

Re: Si4463 не взлетает

Чт сен 21, 2017 08:27:49

Попробую погонять устройство дома, на столе, посмотрю будут ли идти такие глюки или нет.. Сейчас передающее устройство стоит в мастерской на другом конце огорода. Радиоприемник запитан сейчас от платы stm32f103c8t6(китай), по питанию si4463 поставил электролит 100 мкф и керамику 0.1 мкф. Кстати модуль радио такой rf4463pro он с экраном идет, заказывал с китая. БП AC-DC 220 в 5 на 3 Вата на него повесил электролит 680 мкф. Антенна спиралька. Все это дело на макетной плате и запихано в корпус от маршрутизатора.

И еще возник такой вопрос по настройке модуля. В даташите есть схема включения, где используется одна антенна на прием и передачу. И направление настраивается выводами gpio2 и gpio3. Это переключение происходит автоматически или надо в коде самому менять? Просто по библиотеки от NiceRF там настраивается один раз и больше в коде нигде не меняется.


В библиотеке RadioHead при настройке модуля на прием или передачу настраиваются и выводы, но как я понял это gpio0 и gpio1 судя по коду. Так как там записывают два байта, а первые два байта в регистре GPIO_PIN_CFG 0x13 это gpio0 и gpio1.

Re: Si4463 не взлетает

Чт сен 21, 2017 17:34:49

В первой библиотеке выводы GPIO настроены на автоматическое переключение антенного коммутатора при изменении режима работы прием/передача. Во второй эти выводы настроены на ручное переключение из программы пользователя. Мой Вам совет - не пользуйтесь библиотеками написанными непонятно кем, лучше напишите свои. У меня по этим чипам статья есть здесь, а то что в ней не затронуто (нарпример переключение коммутатора) описано в документации на чип.

Re: Si4463 не взлетает

Ср янв 16, 2019 13:31:54

Всем доброго времени суток.
Просьба помочь новенькому :) До этого дальше ардуино с диодиками не ходил... Для реализации определенной задачи, начинаю разбираться с модулем сделанным в Китае (E30-170T20D). На нем стоит SI4463 ревизии 1B. Управляется он китайским аналогом STM8LG6. Прошивку пишу в IAR.
Собственно SI4463 "не взлетает" :)
Вроде поднял SPI между STM8L и SI4463 (если первой командой даю PART_INFO, то возвращаются байтики: 11 44 63 00 00 0F 00 03), но вот если подаю POWER_UP, то SI4463 перестаёт подавать признаки жизни, по SPI после READ_CMD_BUFF никогда не приходит CTS (0xFF), только 0. CTS на GPIO1 в виде 1 тоже теряется...

Мой код:


ЗЫ: Алгоритм инициализации откровенно слизан с примеров WDM3.

Re: Si4463 не взлетает

Ср янв 16, 2019 17:49:33

Выложите осциллограммы лог. анализатора SPI коммуникации с чипом включая CTS.

Re: Si4463 не взлетает

Ср янв 23, 2019 11:47:41

К сожалению пайка такова, что подключить лог-анализатор не вышло :(
Как выяснилось в коде и подключении проблем нет. В данном случае ситуация такова: если выполняя команду POWER_UP, вторым байтом идет не 1, а 0, то микруха начинает вести себя адекватно, выдавая CTS. Этот байт в документации интерпретируется 1 - Boot main application image, 0 - Stay on bootload.
Собственно вопросы: что за bootload (пока не нашёл инфы), как исправить (т.к. после конфигурирования все равно не фунцикляет :( )???
Изображение

Re: Si4463 не взлетает

Ср янв 23, 2019 23:17:06

Хмммм. У меня в документации на ревизию В написано, что опция FUNC=1 единственная для перевода чипа в режим PRO.
Я всегда посылал следующую последовательность байтов для POWERUP:
0x02 0x01 0x00 0x01 0xC9 0xC3 0x80
где последние 4 байта - это частота кварца (01C9C380 = 30.000.000 гц = 30 мгц).
Правда, китайские платы никогда не использовал.
powerup.png
(18.38 KiB) Скачиваний: 318

Re: Si4463 не взлетает

Ср фев 13, 2019 17:52:55

Выяснилось, проблема в железе... И ещё в этом модуле кварц 26МГц стартует не с вывода XOUT SI4464, а с вывода управляющей STM8, также в команде POWER_UP необходимо включить XTAL_OPTIONS TCXO иначе не работает.

Написан код передатчика, загружен в один из модулей, нахожусь в полной уверенности что он что-то передаёт - радиостанция характерно шипит на этой частоте.
Но вот с приёмником не справился :( Прерывание по приёму поступают хаотично и в FIFO валит мусор при этом в эфире чисто.
Скрины WDS:
Изображение
Изображение

Пояснения к коду: процедура spi_send_buf по всем правилам отправляет из буфера обозначенное кол-во байт, si4463_get_response по всем правилам принимает от si4463 ответ, второй параметр сколько байт принять, третий - кол-во попыток в случае с задержкой CTS. На выводе PC0 висит nIRQ.
Кусок кода:


Не знаю куда копать... :dont_know:

Re: Si4463 не взлетает

Ср фев 13, 2019 18:13:56

logind писал(а):Прерывание по приёму поступают хаотично и в FIFO валит мусор при этом в эфире чисто.

в эфире не бувает пусто)) при отсутствии сигнала присутствует шум эфира.

шум эфира подробно разбирали на примере радиомодуля nRF24L01 - https://radiokot.ru/forum/viewtopic.php?f=61&t=156225

все эти модули по сути работают одинаково... кроме специальных, со своими протоколами... типа Lora и т.д.

Re: Si4463 не взлетает

Ср фев 13, 2019 20:10:19

Это я понимаю. Но мы же пытаемся принять пакет с определенной преамбулой и синхрословом... Конкретно в моём случае, я загружаю следующий конфиг, как в приёмник, так и в передатчик:


Кстати пакет который передается передатчиком (другим модулем), в нужном формате, я не принимаю :(

Re: Si4463 не взлетает

Чт фев 14, 2019 22:02:09

Хорошо-бы посмотреть коды Ваших функций spi_send_buf() и si4463_get_response(). Зря Вы делаете всю обработку в ISR. Это следует делать в main().
Перевод чипа в режим приёме происходит не мгновенно. Следует читать статус чипа до тех пор пока он не укажет состояние приёма. И только потом гасить флаги прерывания в чипе.
Вот пример как это сделано у меня для чипа Si4362 - для Si4463 аналогично. Аргументы функций - это массивы байтов для соответствующих команд. Например,
const uint8_t SI4362_start_rx[] = {0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x08}; // START_RX
где первый байт у меня - это длина массива.
Код:
do   
   {
      SI4362_write(SI4362_rqst_device_state);         // Send REQUEST_DEVICE_STATE command
      SI4362_read(SI4362_read_cmd_buff, 3);         // Send READ_CMD_BUFF command
   } while (SPIbuf[1] != 0x08);                  // loop that waits for RX state
   SI4362_write(SI4362_clear_irq);                  // Send CLEAR_IRQ command


Ещё неясно зачем ограничивать число попыток чтения инфы из чипа в si4463_get_response()? Почему просто не дождаться CTS Вашей функцией waitCTS() и потом уже производить приём наверняка. Также, зачем вызываете waitCTS() после spi_send_buf() в некольких местах. Это не ошибка, но зачем?

Re: Si4463 не взлетает

Пт фев 15, 2019 08:38:07

К сожалению не могу отредактировать свой предыдущий пост :(
Решил выложить всю информацию о модуле E30-170T20D, вдруг кому пригодится и поможет разобраться в моём косяке.
Фото:


Схема коммутации MCU & SI446:
Изображение

Скрины настройки в WDS:


При таком же загруженном конфиге в передатчик, на радиостанции на указанной частоте слышу характерный звук с паузой между пакетами, которую я использую при передаче - делаю вывод, что передаёт :)

Код приёмника (IAR):

Код:
Результат работы кода приёмника:
11 44 63 0 0 F 0 3
18 40 FF 18 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 40 0 0 0 0 0 0
18 40 FF 18 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 40 0 0 0 0 0 0
18 40 FF 18 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 40 0 0 0 0 0 0
18 40 FF 18 40 0 0 0 0 0 0 0 0 0 0 0 0 0 0 18 40 0 0 0 0 0 0

В общем, первая строка, результат PART_INFO. Следующие строки: 2-а байта RX FIFO, и TX FIFO, 0xFF разделитель, 0x18 = 24 данные из RX FIFO.
Данные приходят 2-3 раза в секунду... Откуда не знаю :)
Передаю я 1-н пакет в ~3 сек, патерн 24 байта. Пакет, который передаётся моим передатчиком, не принимается :(

Ser60: К сожалению дополнительная проверка REQUEST_DEVICE_STATE не дала ясности, трансивер всегда отвечает байтами 8, 0. Т.е.: RX state, CURRENT_CHANNEL: 0.
В команде START_RX параметры NEXT_STATE выставлял 8-ки, изменений нет.

По поводу ограничения попыток - предполагаю, что в некоторых случаях придётся ресетится... Привык я так писать :)

Re: Si4463 не взлетает

Пт фев 15, 2019 16:16:46

Попробуйте после приёма первого пакета отключить передатчик. Если по-прежнему будет приниматься тот-же пакет, то дело явно в приёмнике. После чтения пакета из Fifo попробуйте clear Fifo и послать в приёмник код сброса флагов прерывания до перехода к приёму нового пакета. Дайте знать что получится. Может это Вы и делаете уже, я сейчас подробно код не смотрел.

Re: Si4463 не взлетает

Пн фев 18, 2019 17:19:43

Всем привет!

У меня как у logind получается:
Код:
FF 12 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 12 40
FF 24 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 24 40
FF 36 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 36 40
FF 3C 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3C 40
FF 0D 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 40


Это содержание RX_FIFO.
Передатчик Si4012, приемник Si4463, 169.4MГц, ООК, 32kbps.
Все настройки Si4463 из WDS.
Преамбюл 4 байта 0xAA, синхрослово 2 байта 0x2D 0xD4 (0xB4 0x2B в настройки приемника), одно поле (18 байт) для данных.
GPIO_1 = CTS, GPIO_3 = VALID_PREAMBLE, IRQ = VALID_SYNC
Получаю преамбюл и синхрослово (GPIO_3 = VALID_PREAMBLE и IRQ = VALID_SYNC переходят из 0 в 1 и наоборот, но ничего больше этого.

Статьи Ser60 читал.

P.S. Извините за русский. Я болгар и русский учил где-то сорока лет назад...

Re: Si4463 не взлетает

Пн фев 18, 2019 18:18:07

Коля, неясно зачем Вам нужно IRQ = VALID_SYNC? Я всегда ставлю IRQ=0x27 и прерывание определяется битами в WDS конфирурации. В противном случае если читаете FIFO сразу после принятия синхрослова, то приём пакета в этот момент может быть не завершено, особенно если читаете из FIFO быстрее чем принимаются данные. Также рекомендую обнулять RX FIFO каждый раз перед принятием нового пакета (из Вашего сообщение неясно делается-ли это).

Re: Si4463 не взлетает

Вт фев 19, 2019 13:21:15

SYNC_WORD_DETECT 26 This output goes high when a Sync Word is detected, and returns low after the packet is received.

Конечно, FIFO обнуляется.

Re: Si4463 не взлетает

Вт фев 19, 2019 16:06:19

Можете привести фрагмент кода где ожидаете приём пакета и чтения его из FIFO в приёмнике и код передачи пакета в передатчике? А также осциллограммы на выводах SPI включая CTS. Ну и, наконец, конгигурацию регистров приёмника и передатчика.

Re: Si4463 не взлетает

Вт фев 19, 2019 17:20:52

Нашел ошибку!!! Команду READ_RX_FIFO (WRITE_TX_FIFO тоже), должно посылать как READ_FRR_X комманд:
Код:
output_low(PIN_SI4463_CS);
spi_write(0x77);   
for (byte_cnt = 0; byte_cnt < rx_bytes; byte_cnt ++)
{
   g_Si4463_Rx_Buffer[byte_cnt] = spi_read(0);
}
output_high(PIN_SI4463_CS);

Спасибо за поддержку Ser60!
А можно еще спросить о том какая модуляция и ее параметры лучше выбрать для достижения максимальной дистанции?
Ответить