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

Si4463 не взлетает

Вт авг 11, 2015 13:39:12

Добрый день всем!

Который день бьюсь с этим, казалось бы простым, трансивером.
Суть проблемы - нет передачи. в эфире тишина(анализатор спектра есть). Приёмную сторону пока даже не начинал. В эфир бы просто что-нибудь стрельнуть. Младшенький Si4431 проблем не доставил. Этого прокачали и API добавили по сути...

В качестве контроллера использую STM32L0. Её запустили. SPI настроили. К Si4463 подключили.
POWER_UP выполнили. Кварц завёлся. SDO заработало. Настройку чипа сделали, используя то, что нам выдал WDS.
В FIFO записали нужный нам пакетик. Сделали TX_START. В эфире тишина.

Начал копать. Нашёл образец кода от DORJI, всё вроде так же делаю. Настроил прерывания, читаю регистры состояния. Прерывания с nIRQ говорит, что пакет отправлен, чип находится в READY MODE (хорошо), CHANGE_STATE тоже успешно выполнен (хорошо), и даже GET_INT_STATUS говорит "the TX FIFO were transmitted successfully" (отлично). Проверил, пишется ли что-нибудь в FIFO - читаю FIFO_INFO ->количество пустых битов меняется, значит что-то пишем.

Я В тупике. Ниже ссылки на дропбокс на схему, куски кода и иниты...
P.S. Ревизию проверил. B1, как на чипе написано.
P.P.S. Поиграл с настройкой PA, заменил CLE на SWC, как в принципе и схему спроектировал - ничего.

SCH https://www.dropbox.com/s/rv1kl88j2q2v3pn/sch.JPG?dl=0
code https://www.dropbox.com/s/53qgkavy50bnedf/code.rar?dl=0
WDS https://www.dropbox.com/s/zxnj4slwr14nuom/sets.rar?dl=0

Есть подозрения, что до конца не заводятся внутренние клоки\шины, т.к. получить с GPIO DIV_CLK, 32CLK или BOOT_CLK так и не вышло. Конечно же я их включал. Или где-то не хватает волшебных пауз. В слепую натыкал их - тож ничего.

Буду рад любым подсказкам...

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

Вт авг 11, 2015 17:51:25

Пока обнаружил, что в FIFO загружается payload_length=7 байтов а в функции tx_start() запрашивается передача 0x0D=13 байтов (?) Кроме того перед посылкой каждой команды в радио следует проверять сигнал CTS. У Вас это делается неправильно. Именно, в функции spi_write() сначала в радио посылаются байты а потом уже проверяется CTS:
Код:
   nSEL_low; // ×èï ñåëåêò
   for (i = 0; i < tx_length; i++){
      j = *(p+i);
      spi_byte(j);
   }
   while(i!=0xFF){ // Æäåì CLEAR TO SEND
      i = check_cts();}
   nSEL_high; // ×èï ñåëåêò

Если хотите проверять CTS после подачи команд, то в имплементации выше первый вызов функции check_cts() применяется с опущенной линией nSEL, что тоже некорректно. Я-бы поставил while-loop перед for-loop.

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

Ср авг 12, 2015 09:30:21

Да, дело было именно в некорректной проверки CTS. Косяк косяков.

Касательно длинны пакета, что 0x0D это я случайно отправил кусок кода, когда "экспериментировал". И проверка CTS хоть коряво, но работает. Просто один цикл он работает "в холостую". Согласен, правильнее было бы написать:

do{
i = check_cts();
} while(i!=0xFF);

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

Ср авг 12, 2015 14:53:03

Я бы еще рекомендовал восстановить дефолтное формирование сигнала CTS на ноге GPIO1 и проверять его наличие именно там. У приемника несколько снижается чувствительность если чип много долбать по SPI.

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

Ср авг 12, 2015 15:32:20

О как. Дельный совет. Спасибо!

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

Вт июл 04, 2017 03:19:29

Добрый день!
Пытаюсь запустить данный чип(модуль RF4463F30) в режиме DIRECT TX, то есть что пришло на ножку GPIO, то и ушло в эфир. Не могу понять что нужно сделать после загрузки конфига, сгенерированного WDS. Отправить команду start tx? Или что то другое? При отправке start tx в эфире тишина.

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

Вт июл 04, 2017 07:33:21

Почитайте силлабовский AN633. Там есть секция 10.3 про direct mode. Как определяете, что в эфире тишина?

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

Вт июл 04, 2017 11:29:44

Почитайте силлабовский AN633. Там есть секция 10.3 про direct mode. Как определяете, что в эфире тишина?

Спасибо за ответ!
Посмотрел секцию 10.3, написано что нужно настроить чип и вызвать функцию vRadio_Start_Tx( ). Я так понял это Start TX и есть.
Определяю sdr доглом китайским, выставляю частоту на которую настроен модуль(907 МГц) и смотрю что в эфире творится через SDR Sharp.
Конфиг загружается, после передачи каждой строки CTS падает в 0, после того как выставляется в 1 идёт следующая строка, и так пока не загрузится весь конфиг. Частота spi 8 МГц. По spi чип отвечает, делал команду PART_INFO, чип выдает ревизию и тд.
Кстати какую ревизию ставить в WDS? На команду PART_INFO чип выдает 0х22. На корпусе маркировка 44632A.
Сейчас попробовал настроить GPIO1 на вывод тактов, конфиг загружаю, на GPIO1 тишина. Подскажите, что не так делаю, прилагаю архив с проектом в keil для stm32f103c8t6 и лог обмена по spi(saleae logic).
https://www.sendspace.com/file/u9rgzl
Последний раз редактировалось aen Пн сен 18, 2017 23:29:32, всего редактировалось 1 раз.
Причина: Нарушение Правил форума п. 2.7

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

Вт июл 04, 2017 19:42:10

Насчёт ревизии чипа см. здесь. На осциллограмме GPIO1 неверно сконфигурирован на вывод тактов командой 0х13. Там должно быть 16 (0х10). Приёмнику верить можно? И его настройки частоты, модуляции, девиации и пр. соответствуют передатчику? Попробуйте сконфигурировать чип на генерацию несущей, если приёмник её определит. С Вашим кодом мне разбираться времени нет, извините.

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

Вт июл 04, 2017 20:05:27

Насчёт ревизии чипа см. здесь. На осциллограмме GPIO1 неверно сконфигурирован на вывод тактов командой 0х13. Там должно быть 16 (0х10). Приёмнику верить можно? И его настройки частоты, модуляции, девиации и пр. соответствуют передатчику? Попробуйте сконфигурировать чип на генерацию несущей, если приёмник её определит. С Вашим кодом мне разбираться времени нет, извините.

Судя по AN625 вывод тактов сконфигурирован верно. 3.2.6. GPIO_PIN_CFG сналача идет 0x13, потом байты конфигурации каждого из GPIO. На осциллограмме он настроен на вывод Divided MCU clock(0x07). На GPIO1 тишина((
Приемник неоднократно проверен и работает.
Последний раз редактировалось aen Пн сен 18, 2017 23:30:06, всего редактировалось 1 раз.
Причина: Нарушение Правил форума п. 2.7

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

Вт июл 04, 2017 21:44:43

ОК, я думал Вы хотите выводить на GPIO1 тактирование для синхронной безпакетной передачи. Я попробовал вывести тактирование частоты кристалла на вывод IRQ такими0же командами, как Вы делаете (GPIO1 у меня занят под сигнал CTS - без него мой код работать не будет). Как видно из осциллограммы, частота выводится.
freq.png
(72.44 KiB) Скачиваний: 722

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

Ср июл 05, 2017 01:10:26

ОК, я думал Вы хотите выводить на GPIO1 тактирование для синхронной безпакетной передачи. Я попробовал вывести тактирование частоты кристалла на вывод IRQ такими0же командами, как Вы делаете (GPIO1 у меня занят под сигнал CTS - без него мой код работать не будет). Как видно из осциллограммы, частота выводится.
freq.png

У Вас какая ревизия микросхемы? Хотя не думаю что тут в ревизии дело, попробую проверить на другом экземпляре модуля. До этой команды Вы что на модуль подаёте? Только Power Up?
Последний раз редактировалось aen Пн сен 18, 2017 23:30:42, всего редактировалось 1 раз.
Причина: Нарушение Правил форума п. 2.7

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

Ср июл 05, 2017 03:19:38

У меня 4461 ревизия 1B. Да, до этих команд подаю только команду PoerUp (0х02).

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

Пт июл 07, 2017 06:54:34

Здравствуйте! Как-то читал даташит и вроде как находил описание, что при передачи данных модуль сначала слушает эфир, на наличии активности, если ее нету, то начинается передача. Сейчас пришли модули, подключил к ардуино, работают. Использовал библиотеки RadioHead и пример от NiceRF. Сейчас что-то не могу найти описание такой функции.. Есть что-то подобное или нет в данных модулях, чтобы несколько модулей не начали передавать данные одновременно, а то на приемнике будет каша. Сейчас буду писать код под AVR хочется это учесть.
И по поводу адресации на уровне модуля, есть примеры, опыт использования?

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

Пт июл 07, 2017 07:14:43

Сам по себе модуль до начала передачи эфир не слушает. Может это и запрограммировано в какой-то библиотеке, но в железе изначально и дефолтно такого нет. Более того, несколько разрозненных и независимых модулей, подключенным к разным МК невозможно 100%-но синхронизировать на отсутствие одновременной передачи. Это скорее задача протокола связи, в частности реализовать LBT (Listen Before Talk) поведение модуля, используя значение RSSI.

Насчёт адресации не понял. Имеете в виду как работать с голым модулем без всяких библиотек? Если да, почитайте сначала мою статью здесь. Я лично только так с этими модулями и работаю.

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

Пт июл 07, 2017 08:14:49

Насчёт адресации не понял. Имеете в виду как работать с голым модулем без всяких библиотек? Если да, почитайте сначала мою статью здесь. Я лично только так с этими модулями и работаю.


Под адресацией я имел ввиду адреса модулей, чтобы можно было передавать данные конкретному модулю, а не широковещательно. В si4432 там были регистры Transmit Header(0x3A-0x3D), Check Header(0x3F-0x42), Received Heade(0x47-0x4a) и можно было общаться с конкретным модулем, другие модули не реагировали на сообщения. В si4463 находил в апноуте AN626 4.4. Match (Header Check) Functionality, вроде похоже на то что надо, но не смог разобраться что к чему((

Еще есть модули HC-12 на базе si4463. У меня было два модуля на передачу и один на прием. И как часто я бы не посылал сообщения с двух передатчиков на один приемник, пакеты не пересекались т.е. сначала один пакет полностью получили, потом второй. Может конечно я сильно заморачиваюсь и переживаю по этому поводу, так как нет знаний по радиопередатчикам, просто беспокоит тот момент, если во время передачи данных, начнет передачу другой модуль, то будет на приемнике каша.

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

Пт июл 07, 2017 16:18:15

Для передачи данных конкретному модулю есть несколько способов. Можно просто поместить адрес приемника в payload пакета и по приёму пакета проверять его программно. Преимущество этого способа в простоте реализации, если у Вас уже работает приём и передача пакетов. Недостаток его в нагрузке на управляющий МК и в принятии полного пакета приёмником, если даже он ему не предназначен (что выяснится позже МК). Иначе, можно передавать пакеты разным приёмникам на разных каналах (частотах) диапазона. В пределах одного канала можно ограничить вещание пакетов для определённого приёмника передавая синхрослово, на которое этот приёмник настроен. При приёме неправильного синхрослова дальнейший приём пакета приёмником прекращается. Это основной (primary) способ. О нём подробнее написано в секции 4.2 AN626. Наконец, то, что Вы упомянули (секция 4.4). В этом случае достигается значительно более гибкая отбраковка пакета по четырём (максимум) фиксированным байтам в хедере и с логическими операциями над ними.

Если оба передатчика начнут передавать одновременно, приёмник это не поймёт, конечно. Такая проблема существует во всех каналах с множественным доступом. Решается она программно на уровне протокола. Посмотрите, например, на алгоритмы CSMA/CD и CSMA/CA (подробности в Википедии).
СпойлерИзображение

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

Пт июл 28, 2017 18:36:50

Спасибо, наверное остановлюсь на синхрослове.. А подскажите пожалуйста, как зависит частота девиации на скорость передачи? Как правильно ее настроить? И как она влияет на качество сигнала?

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

Сб июл 29, 2017 04:40:37

Хороший вопрос! При передаче сигналов определяющую роль играют 2 параметра: полоса пропускания (bandwidth) и коэффициент модуляции (modulation index), которые определяются по формулам dara_rate + 2*deviation и 2*deviation/data_rate, соответственно. При широкой полосе пропускания уменьшается чувствительность приемника, в то время как при малой девиации уменьшается расстояние между сигналами (при FSK модуляции), и, как следствие чувствительность. Кроме всего прочего, в игру вступает точность кварцевых резонаторов для различения частот при малой девиации. Компромиссом выхода из ситуации считается оптимальным передавать при коэффициенте модуляции =1. Одако, это не всегда приемлимо, т.к. из-за дискретности цифровых синтезаторов частоты в радио величина девиация обычно ограчичена снизу. Поэтому при малых скоростях передачи следует установить минимальную поддерживаемую радио девиацию, так чтобы коэффициент модуляции был как можно ближе к 1.

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

Пн сен 18, 2017 19:03:24

Доброго времени суток. Есть такая проблемка. Взял библиотеку от NiceRF для ардуино, код перенес на STM32F103. Передатчик передает строку вида T1=10C H=75% T2=10C, а на приемнике бывает иногда часто приходят битые данные: T1=10G!H=75% T1=10C, T1=10C`I=/5%0T9=1ёS.. Где-то один два символа не правильно, когда и больше и по количеству бывает больше. На что можно грешить? Передатчик так передает? Или помехи при считывании с SI4463? Сейчас радиомодуль подключен макетными проводами 10см. Информацию вывожу с помощью ST-Link по SWO интерфейсу.
Вложения
RF4463-Arduino code-23cba543-60d4-463f-85e7-4d0fae0fe9d4.zip
Библиотека для ардуино от NiceRF
(20.01 KiB) Скачиваний: 600
Ответить