РадиоКот :: Радиомодули для беспроводной передачи данных. Часть 2.
Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Защита и контроль >

Теги статьи: Добавить тег

Радиомодули для беспроводной передачи данных. Часть 2.

Автор: Сергей Безруков (aka Ser60), sergeilb60@mail.ru
Опубликовано 22.10.2014
Создано при помощи КотоРед.

Эта часть статьи посвящена модулям на основе микросхем серии EZRadioPro® фирмы Silicon Laboratories. В состав серии на момент написания входит 4 трансивера Si446x (x=0,1,3,4), 2 передатчикa Si4060, Si4063, и приёмник Si4362. Помимо них в серию входит несколько микросхем уже не рекомендуемых для новых разработок (трансиверы Si443x, передатчики Si403x, и приёмник Si4330), которые мы рассматривать не будем. Новые серии микросхем имеют существенно лучшие параметры, а работа со старыми во многом аналогична работе с новыми. Отличия новых микросхем и вопросы миграции от старых к новым описаны в [1]. Все микросхемы новой серии выпускаются в корпусах QFN20 и совместимы по выводам между собой, но не со старой серией.

Рассмотрим сначала трансиверы Si446x. Приёмная часть во всех моделях одинакова и обеспечивает максимальную чувствительность -126 dBm (0.112 мкВ) при bit rate 0.5 kbps. Полосу пропускания приёмника (bandwidth) можно установить в пределах 1.1 – 850 кгц. Отличаются трансмиттеры лишь максимальной мощностью передающей части (+13 dBm, +16 dBm, +20 dBm). Казалось-бы, менее мощный трансивер всегда можно заменить более мощным, программно уменьшив его выходную мощность. В общем, это так и есть, однако КПД выходного каскада мощного передатчика при этом получается ниже, чем у маломощного. Трансиверы работают с модуляцией типов (G)FSK, 4(G)FSK, (G)MSK, OOK и bit rate в пределах 100 bps – 1 Mbps. Все микросхемы серии поддерживают пакетную и безпакетную обработку данных с огромным числом настроек и уровней автоматизации.

Начнём с модуля на трансивере Si4461 при выходной мощности +14 dBm. Изображения в статье увеличиваются при кликании.

Как видно из схемы, трансивер имеет раздельные выводы приёмной и передающей частей и может работать как с раздельными антеннами для приёма и передачи, так и с совмещённой. Балун C4,C5,L3,L4 обеспечивает согласование симметричного входа приёмника с асимметричной антенной и выходным фильтром передатчика C0-C3,C6,L0-L3. Дроссель L5 является нагрузкой выходного каскада передатчика. Номиналы C0-C6 и L0-L5 зависят от диапазона частот и режима выходного каскада. На схеме показаны номиналы для диапазона 915 мгц, взятые из [2]. Элементы C0,L0 не нужны для этого диапазона, но место под них предусмотрено на печатной плате для работы в других диапазонах. В нашем случае конденсатор C0 не установлен на плате, а вместо L0 припаян резистор на 0 Ом. Нагрузочные конденсаторы для кристалла Q1 интегрированы в микросхеме. Они могут программно подстраиваться для компенсации ухода частоты задающего генератора при изменении температуры окружающей среды или корпуса в процессе работы (трансмиттер имеет встроенный датчик температуры). Допускается подключение внешнего TCXO.

 

Модуль собран на печатной плате размером 13.5×19.5 мм и толщиной 0.8 мм. Фольга на обратной стороне платы используется в качестве общего провода. Все пассивные компоненты типоразмера 0402 за исключением C12 (0603). В качестве дросселей использованы многослойные (multilayer), но лучше применить витые SMD (wire wound). Кристалл в корпусе размером 3.2×2.5 мм и нагрузочной емкостью 10 пФ. Как и в случае Si4012 на плате имеется множество переходных отверстстий (via) диаметром 0.3 мм для соединения верхнего и нижнего слоёв земли. Микросхема требует распайки вывода подложки на землю. Если имеется возможность установки нескольких via под корпусом микросхемы, лучше это сделать. В крайнем случае (как это сделано у меня) можно вывести вывод подложки из под чипа наружу диагональными дорожками и установить по via у каждого угла корпуса. В качестве антенны, как и ранее, использован отрезок одножильного провода длиной в ¼ длины волны (82 мм). Печатная плата разработана в системе Eagle с учётом рекомендаций в [3].

Связь трансивера с МК осуществляется по интерфейсу SPI на тактовых частотах до 10 мгц. У трансивера имеется 4 вывода GPIO, каждый из которых можно независимо запрограммировать на одну из 36 функций, и вывод запроса прерывания IRQ, также с массой функций. Засылка в трансивер команд для общения со встроенным управляющим контроллером и чтение данных из него производится посредством API (Application Programming Interface) функций. Готовность встроенного контроллера к приёму новой команды индицируется установкой соответствующего бита в байте статуса, который можно прочитать через интерфейс SPI, и/или путём ожидания установки лог. 1 на выводе CTS (Clear To Send). Любой из выводов GPIO может быть запрограммирован на вывод сигнала CTS, но после сброса этот сигнал по умолчанию формируется на выводе GPIO1.

Трансивер имеет 8 режимов работы, включая несколько режимов сна. Перевод его в режим Shutdown с самым малым токопотреблением (30 нА) может быть осуществлён только установкой лог. 1 на выводе SDN. Во всех остальных режимах этот вывод должен быть заземлён. В режиме Shutdown чип забывает все свои настройки, как и Si4012. Однако, в следующем по токопотреблению режиме Standby (50 нА) все настройки сохраняются и для выхода на рабочий режим TX/RX чипу требуется всего 440 мкс против 15 мс для Shutdown. Вывод SDN не имеет подтягивающего резистора и если Вас устроит минимальное токопотребление в 50 нА, этот вывод можно просто заземлить на плате, поэтому соединение его с общим проводом показано пунктиром на схеме модуля. Пробуждение чипа из этого режима производится падающим уровнем сигнала на выводе CS. Следующий по токопотреблению – режим Slеep (900 нА). Отличие от режима Standby только в работающем RC-генераторе на 32 кгц для организации временных интервалов для автоматического пробуждения и т.п. Допускается подключение и часового кристалла на выводы GPIO. Переход из режима Sleep в рабочие режимы происходит за те-же 440 мкс. В следующих 2-х режимах (SPI active и Ready) интерфейс SPI активен и отличие только в активизации задающего генератора рабочей частоты. Настройка его на установленную частоту производится в режимах TX tune/RX tune. Наконец, после настройки генератора чип может быть переведён в рабочие режимы TX/RX. Важно подчеркнуть, что командой CHANGE_STATE чип можно напрямую перевести из любого режима в любой другой (кроме Shutdown). Выбор и установка промежуточных переходных режимов при этом автоматически обеспечивается секвенсером состояний.

Передача пакетов

Выходной каскад передатчика может работать либо в импульсном режиме класса Е (CLE), либо в SQW (square wave), либо в режиме переключения тока SWC (switched current), устанавливаемым программно. По выбору режимов имеется подробный документ [2]. Очень кратко, в режиме CLE/SQW на выходе TX присутствуют импульсы близкие по форме к прямоугольной с коэффициентом заполнения 25% или 50%. При этом достигается больший КПД, однако в спектре излучения присутствует больше гармоник и сильнее сказывается зависимость выходной мощности от напряжения питания. Мощность падает пропорционально квадрату падения напряжения. Эта зависимость проявляется в меньшей степени в режиме SWC, но за счет большего токопотребления (к примеру, 31 мА против 25 мА при выходной мощности +13 dBm). Работа с мощностью выше +16 dBm возможна только в режиме CLE, а режим SQW следует использовать лишь на частотах ниже 260 мгц. В нашем случае для диапазона 915 мгц в [2] рекомендуют использовать режим SWC. Выходная мощность во всех режимах определяется числом задействованых активных элементов (транзисторов?) в выходном каскаде, при максимальном их числе 127 (зависит от диапазона). В режиме CLE зависимость выходной мощности от этого числа нелинейная и на неё ещё влияет установка скважности импульсов. В режиме SWC при том-же числе активных элементов выходная мощность вместо скважности определяется током через каждый элемент (в режиме CLE активные элементы работают как ключи и установки тока игнорируются) и наблюдается большая линейность установок.

Но довольно пока о hardware, поговорим о разработке тестового приложения. Как и в первой части статьи мы для начала хотим передать пакет из 6 байт, из которых первый – длина информационной части пакета (0х05), второй – порядковый номер пакета, а остальные 4 – ASCII коды символов строки “ABCD”. Структура пакета для Si446x показана ниже.

Описание мириада опций настройки автоматического обработчика пакетов можно найти в [4]. Как и в любом продвинутом передатчике, нам не нужно загружать в его TX FIFO байты преамбулы и синхрослова. Достаточно один раз установить их в настройках конфигурации чипа и потом они будут добавляться к пакету автоматически. Также не следует самим возиться с вычислением контрольной суммы CRC. Этот процесс полностью автоматизирован, имеется возможность выбора одного из 9 полиномов CRC и задания начального значения для CRC seed (обычно оно равно 0xFFFF). В пакете допускается иметь до 5 полей со своими CRC. В нашем простейшем случае достаточно будет пока одного поля (Field 1), куда мы и загрузим все передаваемые байты. Насчёт байта длины пакета, для пакетов фиксированной длины это одна из опций настройки обработчика пакетов. Мы её явно передаём в поле 1 только для того, чтобы нас поняли на приёмном конце. Для контроля передачи мы пока используем, как и в первой части статьи, приёмник на основе чипа CC1101 от Texas Instruments, у которого в режиме приёма пакетов переменной длины длина пакета должна сразу следовать за синхрословом.

Разобравшись с тем, что нам следует передавать, мы вплотную подошли к программированию. Кратко процесс программирования чипа описан в [5]. Как и у Si4012, команды управления Si406x разделены на 2 группы – собственно команды и настройки (properties). Команд имеется уже больше (28) a настроек вообще не счесть – я насчитал более 150. Понятное дело, каждую я здесь не опишу. Кроме того, не все настройки детально описаны в документации [6]. Отмечу, что документация сделана просто замечательно в виде набора HTML документов с перекрестными связями и открытием/закрытием полей, существенно облегчающим работу с API. Но неужели придется вникать в более чем сотню настроек? Чтобы у вас резко не пропал энтузиазм, скажу сразу – вникать во все не требуется. На помощь приходит система Wireless Development Suite (WDS), свободно доступная на сайте фирмы, и кратко упомянутая в первой части статьи. Однако, для чипов Si446x она куда более полезна, чем для Si4012.

Итак, загружаем систему, стартуем её в режиме симуляции Si4461, и запускаем Radio Configuration Application. Ниже показаны скриншоты всех закладок этого приложения для настройки чипа на передачу с параметрами из первой части статьи: частота 903 мгц, 2-FSK, 1.2 kbps, девиация 5.15 кгц. На первой закладке “Frequency and Power” устанавливаем рабочую частоту и параметры применённого кристалла. К сожалению, в режиме симуляции для настройки выходного каскада передатчика PA (Power Amplifier), несмотря на стрелочку выбора в поле “PA mode”, почему-то нет возможности установить наш режим SWC. Придётся позже сконфигурировать его вручную, вникнув в настройки. На второй закладке “RF Parameters” всё ясно и пояснений не требуется.

 

На следующей закладке “Packet” мы конфигурируем автоматический обработчик пакетов. Для безпакетной передачи данных его можно отключить, но это не наш случай. В разделе “Packet Config” следует установить галочки как показано ниже и кликнуть на “Payload”. Важным является установка длины пакета и заказ на вычисление и отправку контрольной суммы CRC. Для конфигурации используемой ранее преамбулы и синхрослова поочерёдно нажимаем на “Preamble” и “SyncWord”.

 

Далее, в разделах “CRC config” и “Field config” выбираем полином для CRC с сопутствующими параметрами и порядок обработки байтов/битов.

 

Наконец, в закладке “Interrupts” закажем генерацию запроса на прерывание по окончании отправки пакета, а в закладке “GPIO and FRR” ничего менять не будем.

 

По окончании конфигурирования нажимаем на кнопку “Generate source” в правом нижнем углу окна и сохраняем файл заголовков (header file) на диске. Полученный файл с расширением .h предназначен для использования в программе МК на языке С. Структуры, определённые в файле заголовков, используются функциями, краткое описание которых приведено в [5]. Далее можно либо разбираться как использовать эти функции и структуры, либо поступить как я – написать всё самому с нуля. В данном случае мне это проще и интереснее, чем копаться в чужом коде.

Итак, что необходимо знать для загрузки конфигурации в чип? Понятно, что загружать её следует первым делом в начале программы и до начала работы с трансмиттером. Как следует из [5], при пробуждении чипа первой командой должна быть команда POWER_UP. Потом следует установить настройки из полученного файла заголовков командами SET_PROPERTY. Некоторые настройки (например рабочая частота) состоят из нескольких байтов. Однако, за время одного сеанса SPI с момента опускания линии CS до ее подъёма, в чип можно передать не более 12 байтов конфигурации (?!), не считая байтов адреса (группы API). Все это уже учтено WDS при формировании файла заголовков. Для перевода структур из файла заголовков в последовательности байтов для загрузки в чип я написал прилагаемую программу setup.c. Имя файла заголовков указывается в программе параметром в командной строке. В результате получим следующий вывод в терминальном окне (у меня программа работает под Linux):

Показанные байты экстрагированы из определений структур директивами #define в файле заголовков, и это всё, что нам следует загрузить в чип для его инициализации на описанные выше параметры передачи. Каждая строка содержит либо байты команды, либо байты property, и может быть послана в чип за одну SPI сессию. Первый байт в строке служебный, в нём указана длина строки. Посылать его в чип не надо, он используется в программе МК для организации цикла по байтам строки. В данном случае используется 0х1Е (=30) SPI сессий по числу строк (это число приведено в последней строке). Директива DCB в начале строк служит для определения байтов в IDE Keil µVision для моего МК (тот-же, что и в первой части статьи – EFM32TG110, см. схему ниже). Байты, обведённые красной рамкой (первые 4 байта в группе 0х22, см. [5]) соответствуют режиму CLE выходного каскада. Для нашего режима SWC их следует заменить на 0x21, 0x64, 0x2E, 0x3D как советуют в [2]. К сожалению нет простой формулы, выражающей зависимость выходной мощности от числа активных элементов PA и тока через них, так как она зависит ещё и от многих других факторов, см. [2]. После передачи этого массива байтов в Si4461 он готов к работе. В прилагаемой тестовой программе конфигурация чипа производится функцией SI4461_setup() в файле si4461.s, которая использует вспомогательную процедуру Send_SI4461() и обработчик прерываний интерфейса SPI.

Напомню, что перед отправкой в чип байтов по SPI необходимо дождаться высокого уровня сигнала на выводе CTS. На осциллограмме ниже видно, что сигнал CTS падает после приёма чипом первого байта команды, но это не мешает ему принять все остальные байты в той-же команде. Чипу требуется около 20 мкс на обработку команды после завершения SPI сессии.

Теперь можно облегчённо вздохнуть - самое сложное уже позади и осталась самая малость. Для передачи пакета, как и в других радио-чипах, информационную часть его (в нашем случае всё те-же 6 байт) следует сначала загрузить в FIFO передатчика. В трансивере имеются раздельные FIFO приёмной и передающей частей объёмом по 64 байт каждая, которые при желании можно объединить в одну общую. Также имеется возможность автоматического начала передачи по заполнению FIFO выше установленного порога, но мы здесь всего этого делать не будем. Загрузка FIFO производится путём посылки в чип последовательности байтов 0х66, 0х05, 0хNN, 0х41, 0х42, 0х43, 0х44, где 0х66 – команда загрузки, а остальное – payload пакета, в котором 0х05 – длина пакета для СС1101, 0хNN его порядковый номер для контроля, а остальные – ASCII коды строки “ABCD”. Загрузка FIFO производится функцией Send_Package() в файле main.s. Для начала передачи в чип следует послать последовательность 0х31, 0х00, 0х10, 0х00, 0х00. Здесь 0х31 – код команды начала передачи, следующий байт 0х00 – номер канала, далее байт 0х10 говорит чипу в какое состояние перейти после отправки пакета (в данном случае в состояние Standby с низким потреблением). Наконец, последние 2 байта – длина передаваемой посылки. Если она нулевая, то это соответствует работе с полем фиксированной длины и длина поля берется из property PKT_FIELD_1_LENGTH, установленному выше байтами конфигурации (см. [6]). После пробуждения из режима Standby и загрузки пакета в FIFO чип останется в состоянии SPI active. Перевод его в состояние ТХ через промежуточное состояние TX tune для передачи пакета и позже в состояние сна Standby по окончании передачи производится автоматически секвенсером состояний.

Строго говоря, в данном случае можно было и не заказывать формирование запроса на прерывание МК. По умолчанию вывод IRQ у Si4461 работает в режиме с ОК без подтягивающего резистора, и я также пока не установил последний на входе PA0 в МК. Поэтому постоянный низкий уровень на выводе IRQ после передачи первого пакета на общее токопотребление схемы не влияет. В паузе между посылками пакетов последнее определяется токопотреблением МК в режиме Deep Sleep ЕМ2 и составляет около 1 мкА.

Работу передатчика можно проконтролировать на приёмном конце с помощью SmartRF Studio от Texas Instruments, подключив к ней модуль на СС1101 (о нём подробнее пойдёт речь в следующей части статьи) через CC-debugger. На осциллограмме ниже слева наблюдается наличие сигнала с периодом 1 сек на установленной в студио частоте приёмника (903 мгц). А в правом окне показан успешный приём наших пакетов. Обратите внимание, что из-за большей мощности передатчика у Si4461 уровень RSSI в точке приёма при том-же удалении приёмника от передатчика в пределах стола выше, чем у Si4012 из первой части статьи.

 

Номиналы антенного фильтра и балуна и их расчёт для трансмиттеров Si4463/64 и передатчиков Si4063 при выходной мощности +20 dBm приведены в [7].

Приём пакетов

После того как мы научились передавать пакеты трансмиттером Si4461 и убедились, что передача их работает нормально, поговорим о приёме пакетов приёмной частью трансивера. Для этого были собраны 2 модуля, один из которых был сконфигурирован на передачу, как описано выше, а другой на приём. Интерфейс трансмиттера с МК в приёмной и передающей частях выполнен по следующей схеме.

Схема аналогична таковой из первой части статьи, только вместо выводов модуля I2C в MK задействованы выводы модуля SPI. ЖКИ установлен только в приёмной части. Система WDS допускает подключение отладочных плат фирмы, которые содержат ЖКИ для визуального контроля приёма/передачи. У меня таких отладочных плат нет, поэтому и был задействован ЖКИ на приёмном конце. На ЖКИ отображается только порядковый номер принятого пакета и результат проверки его контрольной суммы CRC (OK или ER).

Конфигурацию Si4461 на приём пакетов проще всего осуществить с помощью WDS. Для этого выбираем опцию “Custom packet RX” в окне “Select project” и в закладке “Frequency and power” устанавливаем рабочую частоту 903 мгц, как и для передатчика. При конфигурации чипа на приём настройки PA в этой закладке не показываются.

Далее, в закладке “RF parameters” выбираем тип модуляции, bit rate, и девиацию, как и ранее. Эти параметры, конечно, должны соответствовать параметрам передатчика. Как я отмечал, полосу пропускания приёмной части трансивера можно программно изменять в широких пределах. Однако, лучше положиться на автоматическую установку RX bandwidth системой WDS в зависимости от установленных выше параметров радиотракта и не трогать дефолтную опцию “Auto-Calc”. Если нужно знать RSSI, то следует учесть, что приемник её постоянно отслеживает с возможностью усреднения по нескольким битам (в нашем случае 4) и записью в регистр в определённое время приёма пакета (у нас сразу после приема битов синхрослова).

 

Следующий этап – настройка параметров принимаемого пакета в закладке “Packet”. Выбор битов преамбулы (Preamble) и синхрослова (Sync Word) такой-же как и ранее для передатчика, см. выше. Напомню, что на стороне передатчика мы изпользовали пакет с одним информационным полем (Field 1), содержащим длину пакета и пр. Такую структуру передаваемого пакета мы выбрали для совместимости со структурой пакета CC1101. Хотя наш пакет имеет, по сути, фиксированную длину, но только мы с передатчиком об этом и знаем. Давайте для разнообразия не будем открывать этот секрет приёмнику и сконфигурируем его на приём пакетов переменной длины. Согласно [4], в пакете для Si4461 лишь одно поле (Field 2) может быть переменной длины. Для приёма этого поля приёмник заранее должен знать его длину. Это достигается передачей длины в предшествующем поле Field 1. При этом все остальные байты нашего пакета (его порядковый номер и “ABCD”) будут переданы в поле Field 2. Отмечу ещё раз, что конфигурацию полей в пакета в передатчике мы не производили и передавали все байты пакета подряд. Конфигурация полей в приёмнике производится только для того, чтобы научить его принимать пакеты переменной длины и знать когда заканчивать приём пакета.

В соответствии с вышеизложенным, выбираем опцию “Variable length payload with CRC”, и в закладке “Packet config” устанавливаем число полей пакета равным 2, и устанавливаем длину поля Field 1 в 1 байт, в соответствии со структурой пакета передатчика. Далее, в закладке “Variable length config” нам уже должно быть ясно что выставлять, зачем, и почему. Насчёт опции “Packet length adjust” – лучше почитайте обсуждение в [4]. У нас этот параметр просто 0.

 

Для завершения конфигурации пакета нам нужно научить чип считать контрольную сумму CRC. Как следует из структуры пакетов Si4461, каждое поле может иметь свою CRC. Мы хотим, чтобы в пакете была лишь одна CRC, считаемая по полям Field 1 и Field 2. Для этого кликаем поочередно на F1L и <F2> и выставляем галки как показано ниже. Красная черта под полями пакета показывает байты, включённые в вычисление контрольной суммы CRC. В закладке “CRC config” устанавливаем параметры калькулятора контрольной суммы такие-же, как и в передатчике.

 

Следующий этап настройки – разрешение прерываний в закладке “Interrupts”. Для нашего приложения мы разрешаем прерывания только по окончании приёма пакета и несовпадению его CRC. Наконец, в закладке “GPIO and FRR” оставляем дефолтные настройки пина GPIO1 на вывод сигнала CTS и формирование падающего уровня сигнала прерывания на выводе IRQ. И в заключении, осталось сконфигурировать регистры быстрого считывания (Fast Response Registers, FRR) как указано. Регистры эти делают работу с чипом гораздо более оперативной. Подробнее об этом рассказано ниже.

 

Получив файл заголовков настроек путём нажатия на кнопку “Generate source”, экстрагируем из него нужные байты, как и в случае передатчика выше, и загружаем их в Si4461. На этом настройка трансивера на приём закончена и можно приступить собственно к приёму пакетов.

Мы уже знаем, что трансивер известит нас о приёме пакета падающим уровнем на выводе IRQ. Таким образом, программа МК начинается с ожидания этого прерывания. Как только оно произойдёт, все байты пакета из Field 1 и Field 2 будут доступны через RX FIFO. Однако, мы принимаем пакеты переменной длины и нам нужно знать сколько байтов выгрузить из FIFO в программу МК. Приёмник уже знает это после принятия пакета, осталось выудить из него информацию об этом в МК. Для этого в Si4461 можно использовать команду FIFO_INFO, послав в приёмник 2 байта 0х15, 0х00. Второй байт может быть также использован и для очистки FIFO приёмника и передатчика. Если он нулевой, то очистка не происходит. Команда возвращает 3 байта: статус готовности данных, число байтов в RX FIFO, и число свободных байтов в TX FIFO. Чтение ответа производится командой READ_CMD_BUFF с кодом 0х44. Однако, перед чтением ответа необходимо дать контроллеру приёмника время на его подготовку. Если первый байт ответа (статус) нулевой, то ответ ещё не готов и его не следует пытаться считывать. Можно просто перед чтением ответа мониторить линию CTS пока на ней не появится сигнал лог. 1, как это сделано у меня в программе. Ниже показана осциллограмма посылки запроса в приёмник и чтение из него ответа.

После того, как мы узнали сколько байт принято, можно их считать из FIFO в МК командой 0х77. После посылки в приёмник этого байта, каждый импульс на линии SCLK интерфейса SPI возвращает 1 бит из FIFO. А как мы узнаем всё-ли в порядке с контрольной суммой пакета, значение RSSI (если нужно), и вообще, статусы обработчика пакетов, модема, и чипа? Их, конечно, можно получить в ответ на запросы содержимого соответствующих регистров приёмника. Но как мы видели выше, это не слишком оперативно, предполагает ожидание сигнала готовности CTS, наличие значительного объёма траффика на шине SPI и занятости МК. Для улучшения ситуации в Si4461 имеются 4 регистра быстрого доступа FRR_A,…,FRR_D. Чтение этих регистров осуществляется специальной командой, не требующей ожидания CTS. Конфигурацией чипа можно добиться копирования в эти регистры часто используемых данных, например, флагов прерывания или уровня RSSI. Каждый из регистров индивидуально конфигурируется на автоматическое копирование одного из 10 регистров приёмника. Одной командой можно прочитать от одного до 4 регистров FRR, и даже по нескольку раз в циклическом порядке (например, для мониторинга RSSI). В нашем случае FRR_A содержит уровень RSSI, а FRR_B – FFF_D соответственно флаги прерывания обработчика пакетов, модема, и чипа. Ниже показана осциллограмма чтения этих регистров командой 0х50.

Обратите внимание на уровень сигнала на линии CTS и сравните его с предыдущей осциллограммой. Высокий уровень сигнала на этой линии показывает постоянную готовность чипа к выдаче содержимого регистров FRR. Установленный бит 4 в регистре FRR_B в данном случае говорит о приёме нового пакета. Важно отметить, что чтение регистров FRR не сбрасывает флаги прерывания. Для их сброса следует послать в приёмник команду 0х20. Байты следующие за этой командой служат для селективного сброса флагов прерываний обработчика пакетов, модема, и чипа. Если не посылать никаких байтов после команды 0х20, то сбрасываются все флаги. Этой-же командой можно селективно прочитать флаги прерывания и/или статусы упомянутых блоков. При этом биты статуса показывают текущее состояние блока, в то время как каждый флаг прерывания устанавливается лишь по появлению в первый раз (с момента сброса флага) единицы в соответствующем бите статуса.

Я описал здесь лишь небольшую часть опций приёмника и обработчика пакетов, детали см. в ДШ на Si4461 и [4]. В заключении, момент истины – тест на дальность связи.

В этом эксперименте передатчик, как и ранее, был установлен на открытой веранде дома в точке, отмеченной зелёным маркером на карте. Я ходил по району с платой приёмника в руке и следил за номерами принятых пакетов. В пределах первых примерно 500 м приём был устойчивым в любой точке моего маршрута. После этого наблюдались «дыры», т.е. места где приёма не было. Проявлялись они, в основном, когда я стоял вблизи домов и других объектов. В точке, отмеченной красным маркером, даже напротив трансформаторной подстанции приём был уверенным, в то время как в 20 м вперёд и назад по улице были «дыры». Дальше я уже не ходил.

Здесь был рассмотрен пример только одного из простейших видов связи для односторонней передачи данных. В таком случае можно было-бы упростить и несколько удешевить проект, использовав вместо трансиверов пару чипов, состоящую из приёмника Si4362 и передатчика Si4060. Они совместимы по выводам с трансиверами (некоторые выводы корпуса, например TX в приёмнике, не задействованы) и доступны сегодня по розничной цене в 2.27 и 1.75 USD вместо 2.56 за трансивер. Экономия будет более заметна в условиях многих передатчиков, посылающих данные на общий приёмник. Кроме того, упрощаются печатные платы и на них можно установить меньше пассивных компонентов. Однако, номиналы деталей фильтра передатчика и балуна приёмника будут несколько другими, см. [2] и [8]. Печатная плата модуля трансивера для Eagle прилагается.

Следующая часть статьи будет посвящена радиомодулям на основе микросхем фирмыTexas Instruments для субгигагерцового диапазона.

Литература

1. Transitioning from the Si443x to the Si446x, AN799, Silicon Labs.
2. Si4060/Si4460/61 Low-Power PA Matching, AN627, Silicon Labs.
3. Si4460/61/63/64 RF ICs Layout Design Guide, AN629, Silicon Labs.
4. Packet Handler Operation for Si446x RFICs, AN626, Silicon Labs.
5. Programming Guide for EZRadioPRO® Si4x6x Devices, AN633, Silicon Labs.
6. EZRadioPRO API Documentation, файл с архивом на сайте Silicon Labs.
7. Si4063/Si4463/64 TX Matching, AN648, Silicon Labs.
8. Si446x/Si4362 RX LNA Matching, AN643, Silicon Labs.


Файлы:
Архив


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

50 2 0
2 0 0