⌠Hello world■: оживление приемопередатчика СС1100
Относящаяся к применению документация микросхемы СС1100, находится в достаточно большом количестве файлов (более 15). Это основной Datasheet, Errata Notes, различные Application и Design Notes. Все упоминаемые в статье файлы можно скачать с сайта www.ti.com, набрав в поиске их название. Самая важная причина, по которой была написана эта статья - отсутствие в документации понятного и простого алгоритма действий (FlowChart) и конкретных настроек (числовых значений) чипа к этому алгоритму. Ведь чип содержит более 40 различных регистров и много режимов работы, и правильно запрограммировать работу микросхемы достаточно трудно.
В статье приведен псевдокод, написанный на С++ для операционной сиcтемы FreeRTOS, который легко можно перенести в любую среду (и без операционной системы в том числе) и на любой микроконтроллер - достаточно лишь знать работу интерфейса SPI у выбранного микроконтроллера.
За основу взят покупной набор приемопередатчиков СС1100EM1.0. Его схема и описание в файле swrr038.zip (http://focus.ti.com.cn/cn/lit/ug/swru040c/swru040c.pdf).
Плата СС1100EM1 (рис. 1) подсоединяется к host-микроконтроллеру следующими сигналами:
- питание +3,3В;
- сигналы SPI: CSn, SCLK, SI, SO(GDO1);
- сигнал GDO2- к выводу прерывания микроконтроллера (прерывание должно срабатывать по положительному фронту);
- сигнал GDO0 опционально- для отладки с осциллографом.
Рис. 1. Платы СС1100EM1
Для простоты сигналы GDO2 можно не заводить на микроконтроллер - этот вариант подключения для передатчика и приемника описан ниже.
Генерирование конфигурации
В ПО SmartFR Studio на вкладке Normal View необходимо автоматически сгенерировать конфигурацию. Вручную (на вкладке Register View) инициализировать регистры бесполезно - эти настройки не экспортируются.
Из меню File запускается генератор исходников, и по шаблону на скриншоте рис. 2 и рис. 3
"CC1100_Write (CC1100_@RN@, @<<@0x@VH@); @<<@//0x@AH@ @<<@ = 0x@VH@" все сохраняется в файл.
Рис. 2. Генерирование конфигурации - шаг1
Рис. 3. Генерирование конфигурации - шаг 2
Сгенерированный файл показывает, в какие регистры какие значения нужно записывать, чтобы инициализировать СС1100 в выбранном частотном диапазоне. Приемник и передатчик инициализируются одинаковыми значениями регистров, поэтому их настройки совпадают, и это упрощает поставленную задачу. Исключение составляет лишь регистр конфигурации вывода GDO2 - это связано с тем, что событие успешной передачи и приема в принципе трактуется по-разному.
В качестве header-файла взят пример из swra141.zip - файл под названием сс1100.h. Этот файл содержит дефайны регистров, например:
#define CC1100_IOCFG2 0x00//GDO2 output pin configuration
и т.п. Дефайны улучшают читабельность кода и являются правилом хорошего тона. Этот файл был немного изменен, чтобы он был платформенно независим. Также в файл были добавлены дефайны некоторых битов, для улучшения читабельности.
В итоге получился некоторый реально работающий псевдокод, который и хочу предложить на обсуждение. Этот псевдокод содержится в:
1. модифицированном header-файле CC1100_Registers.h (см. выше)
2. исходнике CC1100_Task_Fixed.cpp.
Некоторые комментарии приведены в самом исходнике. Некоторые платформенно зависимые функции требуют пояснения:
- функция TRACE служит для вывода отладочной информации в окне отладки;
- CC1100_Write, CC1100_Read, CC1100_Write_Burst, CC1100_Read_Burst. Эти функции записывают и считывают информацию по SPI-интерфейсу;
- vTaskDelay - задержка на заданное количество миллисекунд;
- INIT_INTERRUPT_ON_PIN_GDO2 - процедура инициализации прерывания по положительному фронту на выводе GDO2;
- xSemaphoreHandle xSemaphore_CC1100- это семафор, который срабатывает, когда на выводе GDO2 возникает положительный перепад;
- xSemaphoreTake (xSemaphore_CC1100, 15000)- эта функция возвращает «1» при срабатывании семафора, или возвращает «0», когда он не срабатывает и истекает время таймаута в миллисекундах.
Псевдокод написан для одного из самых простых режимов - режима фиксированного пакета. Файл исходника для приемника и передатчика универсальный - необходимо лишь комментировать строку #define CC110_USE_AS_RX в начале файла.
Наладка передатчика
С помощью осциллографа на выводе GDO2 каждые 6 сек можно наблюдать отрицательный импульс (ниспадающий фронт - начало передачи пакета, положительный фронт - конец пакета) длительностью примерно 2,5 мс. (38,4 кбод = 208 мкс/байт, 10 байт = 2,1 мс). Расхождение между теоретическим и практическим временем Chipcon объясняет задержкой в чипе (swra121.pdf). Можно контролировать передачу по потребляемому току питания. Для этого TI рекомендует резистор 5 Ом включить в разрыв питания. На экране отладки передатчика можно наблюдать следующие сообщения:
############## CC1100 AS TX
##############
CC1100 PART_Number = 0x0
CC1100 VERSON_Number = 0x3
1 Write at 0xE counter=0x1
CC1100 Tx finsh
1 Write at 0xE counter=0x2
CC1100 Tx finsh
1 Write at 0xE counter=0x3
CC1100 Tx finsh
Если для передатчика сигнал GDO2 не заводить в микроконтроллер, то код можно даже не поправлять - все равно все будет работать. Просто в этом случае мы не будем знать об успешной передаче пакета, но он, тем не менее, будет передаваться.
Наладка приемника
Необходимо включить передатчик, расположив его в 50 см от приемника, и двухлучевым осциллографом контролировать сигналы на выводах GDO2 передатчика и GDO0 приемника. Они должны совпадать с точностью 50 мкс. Осциллограф подсоединяется к выводу GDO2 приемника. С приходом положителного фронта (конец пакета) возникает положительный импульс на GDO2 приемника. Положительный фронт импульса на GDO2 означает, что пакет с правильным CRC записан в FIFO, отрицательный фронт - что считан первый байт из FIFO. Ширина этого импульса зависит от скорости host-микроконтроллера. На экране отладки приемника можно наблюдать следующие сообщения:
############# CC1100 AS RX
##############
CC1100 PART_Number = 0x0
CC1100 VERSON_Number = 0x3
RX=12 Counter=0x1: 0xE 0x1
0x33 0x4C 0x8B
FREQEST=-2 FSCTRL0=0x0
RSSI=0x4C (-37 dBm) LQI=0x8B
RX=12 Counter=0x2: 0xE 0x2
0x33 0x4C 0x8C
RSSI=0x4C (-37 dBm) LQI=0x8C
RX=12 Counter=0x3: 0xE 0x3
0x33 0x4B 0x8D
RSSI=0x4B (-38 dBm) LQI=0x8D
RX=12 Counter=0x4: 0xF 0x4
0x33 0x4C 0x8D
RSSI=0x4C (-37 dBm) LQI=0x8D
Если для приемника сигнал GDO2 не заводить в микроконтроллер, то код следует немного переписать - иначе мы не сможем узнать об успешном приеме пакета по прерыванию. Для этой цели следует периодически считывать статус пакета по SPI (если передатчик передает раз в шесть секунд, то считывать следует чаще, например, раз в пять секунд). Статус принятого сообщения можно узнать из регистра CC1100_PKTSTATUS (бит 8 = CRC будет установлен) или CC1100_RXBYTES (количество принятых байт в FIFO будет не нулевым). Еще одна тонкость - значение RSSI и LQI придется узнавать не из регистров CC1100_RSSI и CC1100_LQI, а из последних двух байт принятого сообщения в FIFO.
При приеме первого пакета происходит калибровка синтезатора приемника по отношению к частоте передатчика; видно, что этого потом не происходит в следующих пакетах.
По сообщениям отладчика передатчика и приемника можно наблюдать соответствие переданного и принятого сообщения.
Можно изменить значение регистра мощности передатчика CC1100_PATABLE - на стороне приемника это вызовет изменение показаний индикатора мощности сигнала RSSI. Можно разнести передатчик на большее расстояние - RSSI уменьшится (например, с -37 dBm до -68 dBm).
Чтобы приемник не принимал ненужную информацию, пришлось изменить значение некоторых регистров относительно SmartRF Studio:
1. синхрослово CC1100_SYNC1, CC1100_SYNC0 со значения по умолчанию;
2. CC1100_MDMCFG1, количество байт преамбулы = 4 байт;
3. CC1100_PKTCTRL0, проверка CRC включена;
4. CC1100_PKTCTRL1, автоматическое стирание пакетов из FIFO, у которых CRC неправильна. Это повлекло за собой соответствующую инициализацию регистра CC1100_IOCFG2 для приемника. Теперь вывод приемника GDO2 активен, только когда записался пакет с хорошей CRC.
Режим передачи с обработкой адреса тоже работает - необходимо лишь поправить регистр CC1100_PKTCTRL1. Адрес пишется в самое начало пакета передатчика (кстати, упоминания об этом в документации Chipcon найдено не было) и периодически изменяется, чтобы видеть фильтрацию пакетов.
Получение технической информации, заказ образцов, поставка - e-mail: wireless.vesti@compel.ru
Craigorafe пишет... Приобрести можно на веб-сайте http://tedsjkpb.bestseller-super.ru
25/01/2018 10:03:40 |
Ваш комментарий к статье | ||||