Робота з радіомодулями SI4432
У статті розглянуто функціональні особливості роботи радіомодуля на мікросхемі ISM (industrial, scientific and medical radio bands) трансівера SI4432. Також наведено найпростіші приклади програмної ініціалізації модуля та описано деякі можливі варіації налаштування.

Опис мікросхеми SI4432
Чутливість приймача -121 dBm. Потужність передавача до +20 dBm (можливе програмне налаштування з кроком 3 dBm). Є вбудована функція рознесеного прийому (Antenna Diversity). Мікросхема здатна працювати на частотах від 240 до 960 МГц із кроком 156 (240-480 МГц) або 312 Гц (480-960 МГц). Також мікросхема має такі особливості як: таймер автоматичного пробудження, детектор низького заряду батареї, 64-байтний буфер прийому/передачі, автоматичний обробник пакетів, датчик температури, 8-ми розрядний АЦП, джерело опорної напруги, три виведення GPIO, різні види модуляції сигналу (OOK, FSK, GFSK) та ін.
Мікросхема працює від 1.8 до 3.6 В напруги живлення.
Особливості радіомодуля
На модулі відсутні стабілізатори напруги, таким чином потрібно відповідне забезпечення живлення і відповідний рівень на логічних входах. На модулі видно ще одну дрібну шестививідну мікросхему з маркуванням G4C. Це мікросхема uPG2179TB, яка виконує функцію перемикання антени між висновками TX і RX, забезпечуючи цим можливість роботи модуля як у режимі прийому, так і в режимі передачі. Управління мікросхемою перемикача здійснюється самою SI4432 портами GPIO0 і GPIO1, які, при ініціалізації потрібно відповідно запрограмувати, для зміни/установки режиму приймання/передачі. При цьому дана схема конфігурація не дозволяє використовувати функцію рознесеного прийому, афункціонування висновків GPIO0 та GPIO1 має бути відведене лише на керування перемикачем uPG2179TB.
Номінали конденсаторів та індуктивностей встановлених в обв'язці антенних входів SI4432 повинні вибиратися виходячи з робочого частотного діапазону, характеристик антени та діапазону напруги живлення. Які саме номінали мають ці елементи невідомо.
Схему модуля, саме того, що наведено на малюнку я не знайшов, але за інформацією з даташиту можна встановити розпинування модуля:

NSEL, SCLK, SDI, SDO- інтерфейс SPI (робота з SI4432 зводиться до запису та читання регістрів SI4432 за інтерфейсом SPI);
NIRQ— висновок переривань (якщо сталася подія прийом/передача та ін., то рівень на цьому висновку падає в 0, які саме події призводитимуть до переривань залежить від значень бітів у відповідних регістрах);
SDN— виведення управління режимом роботи SI4432, якщо встановити високий рівень на SDN, то SI4432 переходить у режим Shutdown, в якому мікросхема переходить у режим енергозбереження зі струмом споживання 15 нА, при цьому весь вміст регістрів повертається до вихідного стану і неможлива передача даних SPI;
VDD- живлення модуля від 1.8 до 3.6 В;
GPIO0, GPIO1, GPIO2— програмовані порти введення/виводу (якщо не перепаювати модуль, то під свої цілі можна запрограмувати тільки GPIO2, оскільки GPIO0 GPIO1 вже зайняті для перемикання режиму приймання/передачі).
Налаштування модуля
Всі налаштування регістрів, описані нижче, взяті з документа AN415 Programming guide. У цьому файлі висвітлено питання використання SI4432 як передавача, приймача, приймача, а також розглядається питання передачі пакетів з довжиною понад 64 кбайт.
Мікросхеми SI4432 бувають різних ревізій: A, V, B. Визначається першою літерою в шифрі, в моєму випадку BPS10P, означає ревізія B. Для різних ревізій є деякі особливості ініціалізації.
Підключення до контролера
Підключення модуля здійснюється відповідно до розпинки наведеної вище. Для простого прийому або передачі даних висновки GPIO можна не заводити на входи мікроконтролера і залишити їх висить у повітрі. Висновки SPI підключаються до відповідних висновків мікроконтролера, NIRQ можна повісити на будь-який вільний висновок мікроконтролера (напевно краще такий висновок, де можна отримати зовнішнє переривання по фронту). SDN можна завести на "землю" або на виведення МК, але при цьому не забути встановити його в 0.
Читання та запис по SPI
Виробник SI4432 пропонує використовувати такі функції для читання та запису регістрів по SPI.
Ініціалізація. Початок роботи
Рекомендується зробити такі маніпуляції.
1) Встановити висновок SDN в 0. 2) Зачекати 15 мс, до відправки команд SPI. 3) Прочитати статуси регістрів переривань. 4) Виконати програмне скидання.
Читання статусів очищає прапори переривань і скидає висновок NIRQ в 1 (коли відбувається переривання NIRQ скидається в 0 і залишається в цьому стані, доки не буде прочитаний відповідний статусний регістр).
Встановлення частотних параметрів
Оскільки мікросхема підтримує роботу у досить широкому діапазоні частот, конфігурування регістрів відповідальних за частоту досить складно. Виробник пропонує використовувати калькулятор (EZRadioPRO Register Calculator) для розрахунку значень частотних регістрів. Калькулятор є файлом Microsoft Excel:

У цьому файлі вже виставленовідповідні значення за промовчанням. Змінювати значення можна лише у сірих осередках. Доцільно змінювати в цьому файлі значення осередків відповідальних за швидкість передачі (J9) і частоту, що несе (B17). Зазвичай, що менше швидкість передачі, то менше ймовірність виникнення помилки в процесі передачі даних. Можна вибрати тип модуляції сигналу: FSK, GFSK, OOK.
OOK модуляція кодує дані увімкненням або вимкненням підсилювача сигналу. Коли немає даних для передачі підсилювач вимкнений, при передачі логічного 0 підсилювач вимкнений на час тривалості одного біта, при передачі логічної підсилювач 1 1 включений на час тривалості одного біта.
FSK базується на зміні частоти сигналу передачі цифрових даних. Для передачі логічного частота 0 несучого сигналу зменшується на величину частоти відхилення, а для логічної 1 збільшується. Відмінність GFSK від FSK у тому, що GFSK застосовує фільтр Гауса до біт даних.
Виробник рекомендує використовувати тип GFSK, тому що при цьому типі модуляції забезпечується найкраща ефективність роботи та більш чистий спектр сигналу в порівнянні з іншими типами доступних модуляцій, що видно з малюнка (порівняння FSK та GFSK):

Конфігурування регістрів відповідальних частоту:
Передача пакета даних за допомогою обробника пакетів
Обробник пакетів використовується в режимі прийому та в режимі передачі. Можна передавати дані без обробника пакетів, у разі потрібно описувати структуру пакета в регістрах самостійно. Зазвичай структура пакета виглядає так:

Преамбула (Preamble) - послідовність 0101 ... використовується для синхронізації приймача та передавача. SI4432 має вбудований детектор преамбули. При налаштуванні SI4432 у регістрах задаєтьсязначення довжини преамбули та величини порога детектування преамбули. Якщо довжина преамбули або поріг детектування преамбули буде меншою за певне значення, то зросте ймовірність втрати пакетів даних. Детектор преамбули шукає преамбулу відповідно до порогу детектування. Якщо знайдено відповідну преамбулу, запускається механізм визначення слова синхронізації (Sync Word).
Переданий пакет завжди починається з преамбули (010101 ... бітовий патерн), яка дозволяє приймачеві приготується для прийому даних, що передаються. Діна преамбули, як і поріг, залежать від налаштувань радіо: типу модуляції, автоматичного частотного підстроювання (AFC). У SI4432 є вбудований детектор преамбули, який автоматично порівнює отримані з ефіру біти з бітовим патерном преамбули, якщо детектор преамбули виявляє зумовлену довжину послідовності бітів преамбули в прийнятому сигналі, то SI4432 повідомляє про прийом валідної преамбули налаштування GPIO.
Поріг детектування преамбули – програмована величина. Залежно від типу модуляції (FSK, GFSK, OOK), залучення автоматичного частотного підстроювання (AFC) та рознесеного прийому (antenna diversity) виробник рекомендує вибирати довжину преамбули та поріг детектування преамбули відповідно до таблиці:

Після успішного детектування преамбули, на радіо чекає слова синхронізації. Після його приходу порівнює отримані біти. Після успішного порівняння SI4432 починає заповнювати FIFO переданими даними. Слово синхронізації, відома для приймача і передавача послідовності бітів, дозволяє ідентифікувати дані, що передаються.
Якщо дані, що передаються, мають довільну довжину (можназробити фіксовану), то пакет додається байт з інформацією про довжину переданих даних.
Також до пакету додається контрольна сума CRC.
Використовуючи обробник пакетів, мікроконтролер конфігурує формат пакета, що передається один раз при первинному налаштуванні SI4432, потім, щоб передати дані мікроконтролер повинен просто записати їх у відповідний FIFO регістр SI4432.
Вимкнення заголовка, встановлення змінної кількості байт переданих даних (кількість переданих байт записується автоматично в пакет даних, що передається) і 2 байти для слова синхронізації:
Безпосереднє встановлення слова синхронізації 0x2DD4:
Увімкнення обробника пакетів передавача та CRC:
Вибір джерела модуляції FIFO та встановлення GFSK модуляції:
Джерело модуляції — дані, які необхідно промодулювати, щоб передати в ефір. У разі FIFO встановлений джерелом. Але є і прямий режим, коли біти даних, з певним таймінгом, подаються на який-небудь висновок SI4432 (GPIOn, SDI, NIRQ).
Як було описано раніше, модуль має один висновок під антену і перемикач режиму прийому передачі на мікросхемі uPG2179TB, висновки якої заведені на GPIO0 і GPIO1. Таким чином, можна запрограмувати GPIO на автоматичне перемикання:
Точність установки центральної частоти визначається точністю кварцового резонатора, його ємністю навантаження, а також різними паразитними ємностями в ланцюгу резонатора. Зменшити вплив зазначених факторів на точність встановлення центральної частоти можна такими способами:
1) Використовувати вищу частоту відхилення передавача і більш широкий діапазон для приймача.
2) Використовувати AFC (Auto-frequency calibration), для цьогонеобхідно збільшити тривалість преамбули.
3) Налаштувати регістр відповідальний за навантажувальну ємність кварцового резонатора:
Надсилання пакету
Відправлятимемо пакет раз на секунду.
Прийом пакета даних за допомогою оброблювача пакетів
Ініціалізація радіо
Ініціалізація приймача аналогічна ініціалізації передавача. Необхідно зробити скидання та прочитати регістри статусу.
Встановлення частоти
Настройки радіо: 9,6 kbps, модуляція GFSK, відхилення частоти 45 кГц, приймальний діапазон 112,1 кГц. Відповідно до калькулятора частоти заповнюються наступні регістри:
Встановлення структури пакету
Аналогічно передавачу: відключення заголовка, установка змінної кількості байт переданих даних (кількість переданих байт записується автоматично в пакет даних, що передається) і 2 байти для слова синхронізації:
Вимкнення фільтрації заголовків:
Безпосереднє встановлення слова синхронізації 0x2DD4:
Увімкнення обробника пакетів приймача та CRC:
Увімкнення режиму FIFO та GFSK модуляції:
Установка порога детектування преамбули 20 біт:
Встановлення GPIO на автоматичне перемикання антени:
Якщо не використовується рознесений прийом, біт SGI у регістрі AGC має бути встановлений для коректної роботи контролю аналогового посилення:
Налаштування регістру відповідального за навантажувальну ємність кварцового резонатора:
Прийом пакету
Включаємо два переривання:
1) переривання прийому валідного пакета; 2) переривання помилково CRC.
Читання статусних регістрів для скидання переривань:
Висновок
Уся інформація щодо програмування модулів взята з Application Note 415 Programming guide.
У датасіті на SI4432 є список всіх Application Note, що являють собою щось на кшталт світозвітів пов'язаних з роботою SI4432. Окрім даташиту та вказаного Programming guide, є серед Application Note ще один корисний документ – карта регістрів. У Programming guide також описано налаштування трансмітера для двостороннього зв'язку. У карті регістрів дано докладний опис усіх регістрів, режимів роботи та налаштувань.
А у нас тут можна отримати грант на тестовий період Яндекс.Хмари. Варто лише у полі «секретний пароль» запровадити «Хабр»