Программирование ARM LR1121: руководство пользователя Fri, August 08 2025  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


LR1121: руководство пользователя Печать
Добавил(а) microsin   

[1. Введение]

В этой статье (перевод оригинальной документации [1]) предоставлена полная информация по использованию трансивера LR1121, раскрывающая как аппаратные, так и программные аспекты применения. Обзор/описание основного функционала LR1121 и параметров см. в даташите LR1121 [2].

Примечание: расшифровку различных абревиватур и терминов см. в Словарике статьи [2].

LR1121 block diagram fig1 1

Рис. 1-1. Блок-схема LR1121.

[2. Системные процессы]

2.1. Режимы системы

Режимы, в которых работает LR1121, и переходы между ними показаны на рис. 2-1:

LR1121 Modes and Transitions fig2 1

Рис. 2-1. LR1121 Modes and Transitions.

2.1.1. Boot (загрузка)

Bootloader (загрузчик) это первое, что запускается после сброса по питанию (power-on reset, POR), и он находится в самом начале flash-памяти. Подробное описание в AN1200.57 LR1110 Program Memory Update применимо ко всем устройствам LR11xx.

Загрузчик выполняет две основные задачи:

• Проверка - допустимо ли для запуска загруженное firmware.
• Загрузка firmware: получение шифрованных блоков данных, передаваемых через SPI, их дешифровка на лету и запись в память flash.

LR1121 Bootloader fig2 2

Рис. 2-2. Основное поведение Bootloader.

2.1.2. Standby

Это режим по умолчанию LR1121. В него происходит возврат из всех других режимов (за исключением специальных fall-back опций), и из этого режима возможен переход в другие режимы. Все команды по конфигурированию устройства должны быть поданы в этом режиме.

В режиме Standby доступны два варианта тактирования: или внутренний 32MHz RC-генератор (Standby RC mode), или внешний 32MHz crystal/TCXO (Standby Xosc mode). Такты RC используются по умолчанию для всех автоматических переходов между режимами. Такты crystal/TCXO позволяют быстрые переходы в другие режимы ценой повышенного энергопотребления.

2.1.2.1. SetStandby

Команда SetStandby(...) установит устройство в режим ожидания (standby mode) с выбранным генератором 32MHz.

Таблица 2-1. Команда SetStandby.

Байт 0 1 2
От хоста 0x01 0x1C StdbyConfig
К хосту Stat1 Stat2 IrqStatus(31:24)

Параметр StdbyConfig выберет генератор, используемый в режиме standby:

• 0x00: внутренний RC-генератор (Standby RC mode)
• 0x01: внешний Xtal/TCXO генератор (Standby Xosc mode)

2.1.3. Калибровки

Во время последовательности запуска (startup sequence), firmware устройства калибрует RC-генераторы высокой и низкой частоты, PLL, ADC и подавление зеркального канала смесителя (mixer image rejection) на частоте 915 МГц. После процедуры калибровки устройство устанавливается в Standby RC mode.

Если работа происходит на другой частоте, то процедура калибровки подавления зеркального канала приема (image calibration) должна быть перезапущена командой CalibImage(...). Процедуру image calibration рекомендуется выполнить после больших изменений температуры для оптимального подавления зеркального канала. Эта калибровка необходима, если частота меняется больше чем на 10 МГц, или изменилась температура больше чем на 10°C.

2.1.3.1. CalibImage

Команда CalibImage(...) запускает image-калибровку для указанного диапазона частот Freq1 и Freq2 на цепи RFI_N_LF/RFI_P_LF sub-GHz.

Таблица 2-2. Команда CalibImage.

Байт 0 1 2 3
От хоста 0x01 0x11 Freq1 Freq2
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus (23:16)

По умолчанию image-калибровка выполняется в диапазоне 902 .. 928 МГц. Тем не менее, можно запросить выполнить новую image калибровку на других частотах. Частоты приведены в единицах 4 МГц (например 900MHz -> 0xE1).

Калибровка допускается для всех частот между двумя параметрами. Обычно пользователь выбирает параметры Freq1 и Freq2 из таблицы 2-3. Можно указать одинаковую частоту для Freq1 и Freq2, чтобы выполнить одну калибровку для значения Freq1 / Freq2.

Таблица 2-3. Значения ISM Band.

Диапазон, МГц Freq1 Freq2
430-440 0x6B 0x6E
470-510 0x75 0x81
779-787 0xC1 0xC5
863-870 0xD7 0xDB
902-928 0xE1 (по умолчанию) OxE9 (по умолчанию)

Эта команда работает в любом режиме. По окончанию процедуры калибровки устройство возвратится в режим Standby RC.

Для других диапазонов частот значения Freq1 и Freq2 могу быть получены по следующим формулам:

• Freq1 = floor( (fmin_mhz - 1)/4)
• Freq2 = ceiling( (fmax_mhz + 1)/4)

В случае POR, или когда устройство восстановилось из режима power-down или режима sleep без сохранения параметров, image калибровка выполняется как часть начального процесса калибровки, и для оптимального подавления по соседнему каналу в диапазоне 902 .. 928 МГц. Если подключен TCXO, то эта калибровка терпит неудачу.

2.1.3.2. Calibrate

Команда Calibrate(...) калибрует запрошенные блоки, определенные параметром CalibParams.

Таблица 2-4. Команда Calibrate.

Байт 0 1 2
От хоста 0x01 0x0F CalibParams
К хосту Stat1 Stat2 IrqStatus(31:24)

Таблица 2-5. Параметр CalibParams.

Биты (7:6) 5 4 3 2 1 0
Имя RFU PLL_TX IMG ADC PLL HF_RC LF_RC

Эта команда работает в любом режиме. По окончанию процедуры калибровки устройство возвратится в режим Standby RC.

2.1.4. Power Down

Это самый экономный по потреблению энергии режим устройства. В этом режиме:

• Все такты остановлены, так что RTC недоступен.
• Если нет сохранения данных (no data retention), то необходима повторная конфигурация устройства при выходе из режима power down.
• Сигнал BUSY устанавливается в лог. 1, показывая тем самым хосту, что устройство не готово принимать команду.
• Устройство переводится в режим power down командой SetSleep(...), см. описание sleep mode.

Устройство может выйти из этого режима, если обнаружена активность сигнала NSS.

При выходе из этого режима устройство выполняет перезапуск firmware, и устанавливает сигнал BUSY в лог. 0, показывая успешное завершение фазы startup, и что устройство готово к приему команды.

2.1.5. Sleep

Режим сна (sleep mode) конфигурирует LR1121 в режим низкого потребления энергии между операциями радио, при этом сохраняются значения регистров и данных firmware в памяти RAM. Когда LR1121 находится в sleep mode, сигнал BUSY устанавливается в 1 резистором pull-up, все сигналы MISO SPI находятся в high-Z, и все выводы DIO находятся в режиме Hi-Z (см. DriveDiosInSleepMode).

Опционально источник тактов 32kHz может работать или от внутреннего RC-генератора, или от внутреннего генератора 32.768 кГц, частота которого задается внешним кварцем. Кварцевый генератор 32.768 кГц позволяет быстрее переходит в режим standby, но ценой повышенного потребления энергии. В обоих случаях RTC использует источник тактов 32kHz, что позволяет реализовать автоматическое пробуждение (automatic wake-up) для выхода из Sleep mode.

2.1.5.1. SetSleep

Команда SetSleep(...) переведет устройство в режим Powerdown или Sleep, и конфигурирует таймаут для автоматического пробуждения (automatic wake-up).

Таблица 2-6. Команда SetSleep.

Байт 0 1 2 3 4 5 6
От хоста 0x01 0x1B SleepConfig SleepTime(31:24) SleepTime(23:16) SleepTime(15:8) SleepTime(7:0)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00

Таблица 2-7. Параметр SleepConfig.

Биты (7:2) 1 0
Имя RFU Wakeup Retention

SleepConfig определяет, в какой режим сна будет помещено устройство, и будет ли оно просыпаться после указанного времени по событию RTC:

• Retention (bit 0) определяет, сохраняется ли конфигурация устройства и данные firmware:

   - 1: 8kB памяти используется для сохранения состояния устройства и данных firmware.
   - 0: No data retention, нет сохранения данных (в режиме Power Down).

• Wakeup (bit 1) определяет, будет ли устройсво просыпаться после истечения указанного времени по событию RTC:

   - 1: Разрешен automatic wake-up. Устройство автоматически перейдет в режим Standby с генератором RC по истечению таймаута SleepTime. Для приложений модема конфигурируйте источник тактов 32kHz командой ConfigLfClock(...).
   - 0: Automatic wake-up запрещен.

• Другие биты RFU, и должны быть установлены в 0.

SleepTime задает время сна в единицах тактов 32.768 кГц, до момента автоматического пробуждения. Таким образом, время сна можно варьировать от 0 мс до 36.4 часов с шагом 30.52 мкс.

Устройство выйдет из этого режима по спаду уровня NSS, даже когда разрешена функция automatic wakeup. При выходе из этого режима устройство выполнит перезапуск firmware. Когда сигнал BUSY установится в лог. 0, это покажет успешное завершение фазы startup, и что устройство готово к приему команды.

Следующая таблица суммарно показывает режимы сна в соответствии с конфигурацией бит Retention и Wakeup, вместе с их потреблением тока (RC/XTAL) и интервалами времени перехода в Standby (показательные значения, приведены только для сравнения).

Таблица 2-8. Сводка по Sleep Mode.

Retention Wakeup Даташит Индикативное потребление (μA) Индикативный переход в режим Standby (мс)
0 0 Powerdown IDDPDN 30
0 1 Sleep IDDSL1 / IDDSL2 30
1 9 Sleep, сохранение данных 8 кбайт, без RTC IDDSL3 < 1
1 1 Sleep, сохранение данных 8 кбайт IDDSL3A / IDDSL4A < 1

2.1.6. Reset

Доступны 4 источника сброса для перезапуска LR1121 и выполнения последовательности startup: Power-On-Reset / Brown-Out Reset (POR/BRN), NRESET и команда Reboot(...).

Сигнал BUSY удерживается в лог. 1 для каждой из этих процедур сброса, и возвращается в 0 когда процедура перезапуска завершена. По окончании процедуры сброса устройство готово к приему команд и находится в Standby mode с активным RC-генератором (STBY_RC). Весь предыдущий контекст устройства при этом теряется, и оно должно быть заново сконфигурировано и заново откалибровано. POR/BRN и NRESET также запускают процедуру аутентификации внутреннего firmware.

2.1.6.1. Power-On-Reset и Brown-Out Reset

LR1121 выполнит перезапуск, если произойдет одно любое событие из следующих:

• Напряжение батареи возрастет больше уровня Power-On-Reset (POR).
• Напряжение батареи временно просядет ниже уровня Brown-Out Reset (BRN).

И POR, и BRN приводят к полному перезапуску внутреннего firmware. Поле Status переменной состояния Stat2 покажет, что произошло, POR или BRN.

Для дополнительной информации по POR и BRN обратитесь к секции "5.5. Power-On-Reset и Brown-Out-Reset".

2.1.6.2. NRESET

Перевод сигнала NRESET в лог. 0 на время не менее 100 мкс перезапустит LR1121. Этот перезапуск эквивалентен Power-On Reset, и устройство выполнит ту же самую последовательность startup.

2.1.6.3. Reboot

Команда Reboot(...) приведет к перезапуску LR1121 firmware.

Таблица 2-9. Команда Reboot.

Байт 0 1 2
От хоста 0x01 0x18 StayInBootLoader
К хосту Stat1 Stat2 IrqStatus(31:24)

Параметр StayInBootLoader определит тип перезагрузки (reboot):

• 0: выполнит software restart.
• 3: bootloader не запустит firmware в flash, но разрешит апгрейды firmware.

Другие значения RFU.

При перезагрузке сохраняется конфигурация тактирования 32kHz. Команда ConfigLfClock(...) модифицирует конфигурацию тактирования 32kHz.

2.1.7. RX Mode

В режиме приема (RX mode) принимаются RF-пакеты на выводах RFI_N_LF0/RFI_P_LF0 в диапазоне sub-GHz (150 .. 960 МГц), и на выводе RFIO_HF в диапазоне 1.9 .. 2.1GHz Satellite и диапазоне 2.4GHz (2400 .. 2500 МГц), с использованием одного из модемов LoRa или (G)FSK. Устройство входит в RX mode по команде SetRx(...). По приему пакета генерируется прерывание RX_DONE, и принятые данные сохраняются в буфер данных устройства.

Работа режима RX может быть автоматически завершена после приема пакета, после завершения цикла или может быть активной бесконечно, в зависимости от требований приложения.

В режиме RX приемник LR1121 работает в различных подрежимах:

• Continuous mode, непрерывный режим. Устройство остается в RX mode и ждет поступления пакетов, пока хост не запросит переход в другой режим.
• Single mode, одиночный режим. Устройство автоматически возвратится в сконфигурированный режим (Standby RC по умолчанию) после приема пакета.
• Single with timeout mode, одиночный режим с таймаутом. Устройство автоматически вернется в Standby RC после приема пакета, или после истечения указанного таймаута. Если было обнаружено синхрослово (sync word) модуляции (G)FSK, или заголовок LoRa, то отсчет таймаута останавливается.
• RX Duty Cycle mode, циклический режим приема. Устройство периодически переходит в RX mode для приема пакета перед уходом обратно в Sleep mode, пока не будет получен пакет.
• AutoTx mode (автоматическая передача пакета через заданное время после приема пакета). Устройство после приема пакета переходит в промежуточный режим в течение запрошенного времени, перед входом в TX mode для передачи пакета.

2.1.8. TX Mode

Режим передачи (TX mode) использует поддерживаемые модемы для передачи RF пакетов через выбранный sub-GHz PA на выводах RFO_LP_LF или RFO_HP_LF в диапазоне sub-GHz (150 .. 960 МГц), и вывод RFIO_HF в диапазоне 1.9 .. 2.1 ГГц Satellite и диапазоне 2.4GHz (2400 .. 2500 МГц).

После активации PA передается буфер данных на указанной частоте, с заданными конфигурациями PA, выходной мощности, пакета и модуляции. Когда последний бит пакета отправлен, генерируется прерывание TX_DONE, регулятор питания PA выключается, выбранный PA выключается, и устройство переходит обратно в режим Standby RC или режим Xosc, в зависимости от конфигурации FallBackMode.

В TX mode сигнал BUSY перейдет в лог. 0, как только PA активировался и стартует передача преамбулы. Во время TX mode LR1121 работает в различных подрежимах:

• Single mode, одиночный режим. Устройство автоматически возвратится в сконфигурированный режим (Standby RC по умолчанию) после передачи пакета.
• Single mode with timeout, одиночный режим с таймаутом. Устройство автоматически возвратится в сконфигурированный режим (Standby RC по умолчанию) после передачи пакета или после истечение заданного таймаута.
• AutoRX mode, устройство автоматически переходит в RX mode после передачи пакета. В этом режиме устройство после передачи перейдет в промежуточный режим на заданное время перед возвратом в RX для приема пакета, или пока не истечет сконфигурированный таймаут.
• Continuous Wave mode (CW mode), режим генерации непрерывной несущей. Устройство бесконечно передает немодулированную несущую на заданной частоте, пока не поступит другая команда для изменения текущего режима.
• Infinite preamble mode, режим бесконечной преамбулы. Устройство непрерывно передает преамбулу сконфигурированной модуляции.

2.1.9. FS Mode

Режим синтезатора частоты (Frequency Synthesis, FS mode) это промежуточный режим между standby mode и RX mode или TX mode, где PLL и связанные регуляторы включены. Сигал BUSY перейдет в лог. 0, как только произошел захват ФАПЧ (PLL locked).

2.1.9.1. SetFs

Команда SetFs(...) установит устройство в Frequency Synthesis mode.

Таблица 2-10. Команда SetFsCommand.

Байт 0 1
От хоста 0x01 0x1D
К хосту Stat1 Stat2

2.2. Startup Sequence

После включения питания или сброса устройство инициирует фазу своего запуска (startup).

• Сигнал BUSY устанавливается в лог. 1, показывая тем самым, что устройство занято и не может принять команду.
• Когда блок управления питанием (power management unit) и RC-генератор становятся доступными, встроенный MCU запустится и выполнит код внутреннего firmware.
• По окончанию последовательности старта (startup sequence) устройство установится в Standby RC mode, сигнал BUSY перейдет в лог. 0 и устройство готово к приему команд.

2.3. Firmware Upgrade

LR1121 может быть обновлен новым образом firmware, предоставленным Semtech. Полное описание приведено в апноуте AN1200.57 "LR1110: Upgrade of the Program Memory", доступном на сайте Semtech. Соответствующие команды описаны ниже.

2.3.1. GetVersion

Команда GetVersion() возвратит версию LR1121.

Таблица 2-11. Команда GetVersion.

Байт 0 1
От хоста 0x01 0x01
К хосту Stat1 Stat2

Таблица 2-12. Ответ на команду GetVersion.

Байт 0 1 2 3 4
От хоста 0x00 0x00 0x00 0x00 0x00
К хосту Stat1 HW Version Use Case FW Major FW Minor

HW Version это версия аппаратуры LR1121.

Use Case указывает используемое устройство:

0x01: LR1110
0x02: LR1120
0x03: LR1121
0xDF: Bootloader mode

FW Major + FW Minor это версия внутреннего firmware LR1121, сохраненного в памяти flash. Поставляемая версия LR1121 после производственного теста rev 01.01. Рекомендуется провести обновление firmware на последнюю версию.

2.3.2. EraseFlash

Команда EraseFlash(...), доступная только в режиме bootloader, должна использоваться перед тем, как новый образ записывается в устройство.

Если команда запущена в другом режиме, то статус команды в Stat1 установится в P_ERR.

Таблица 2-13. Команда EraseFlash.

Байт 0 1
От хоста 0x80 0x00
К хосту Stat1 Stat2

2.3.3. WriteFlashEncrypted

Команда WriteFlashEncrypted() запишет новый образ firmware в LR1121. Дополнительную информацию можно найти в апноуте AN1200.57. Команда CryptoCheckEncryptedFirmwareImage может быть использована перед записью образа.

Таблица 2-14. Команда WriteFlashEncrypted.

Байт 0 1 2 3 4 5 6 7
От хоста 0x80 0x03 Offset(31:24) Offset(23:16) Offset(15:8) Offset(7:0) Data1(31:24) Data1(23:16)
К хосту Stat1 Stat2 0x00 0x00 0x00 0x00 0x00 0x00
Байт 8 9 10 11     ... 4*N+5
От хоста Data1(15:8) Data1(7:0) Data2(31:24) Data2(23:16) Data2(15:8) Data2(7:0) ... DataN(7:0)
К хосту 0x00 0x00 0x00 0x00 0x00 0x00 ... 0x00

Здесь N должно быть в диапазоне от 1 до 32 включительно.

2.4. Mode Transitions & Timings

В таблице 2-15 перечислены переходы между режимами и соответствующие тайминги LR1121. См. рис. 2-1, где приведена диаграмма переходов между режимами LR1121.

Таблица 2-15. Переходы между режимами и тайминги.

Переход Типовые значения TSW (мкс)
POR → STBY_RC 237e3
SLEEP → STBY_RC (без хранения данных)
если XOSC = XTAL
если XOSC = TCXO

52e3
10e3
SLEEP → STBY_RC (с сохранением данных) < 1000
STBY_RC → STBY_XOSC 43
STBY_XOSC → FS для sub-GHz 50
STBY_XOSC → FS для диапазона 2.4 GHz 80
STBY_XOSC → TX для sub-GHz 142
STBY_XOSC → TX для диапазона 2.4 GHz 172
FS → RX (LoRa®, (G)FSK) 39
FS → TX 102
RX → FS 25
RX → TX 118

2.5. Info Page

Память flash LR11xx содержит информационную страницу (Info Page), состоящую из 512 32-разрядных слов, в каждом из которых контроллер хоста может сохранить данные пользователя.

Замечание: максимальное количество обращений R/W к памяти flash LR11x составляет 10k циклов.

2.5.1. EraseInfoPage

Команда EraseInfoPage(...) сотрет запрошенную Info Page в памяти flash LR11xx.

Таблица 2-16. Команда EraseInfoPage.

Байт 0 1 2
От хоста 0x01 0x21 InfoPage
К хосту Stat1 Stat2 IrqStatus(31:24)

Параметр InfoPage может быть только в значении 1. Другие значения RFU.

2.5.2. WriteInfoPage

Команда WriteInfoPage(...) запишет блок 32-битных слов в Info Page памяти flash, начиная с определенного адреса слова.

Таблица 2-17. Команда WriteInfoPage.

Байт 0 1 2 3 4 5 6 7
От хоста 0x01 0x22 InfoPage InfoWordAddr(15:8) InfoWordAddr(7:0) data1(31:24) data1(23:16) data1(15:8)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00 0x00
Байт 8 9 10 ... N*4+4
От хоста data1(7:0) data2(31:24) data2(23:16) ... dataN(7:0)
К хосту 0x00 0x00 0x00 ... 0x00

InfoPage: может быть только 1. Другие значения RFU.

InfoWordAddr: начальный адрес блока данных в Info Page. Этот адрес автоматически инкрементируется после сохранения каждого слова данных в соседних ячейках памяти.

data: блок данных, записываемый в Info Page. Длина данных должна нацело делиться на 4. Максимальное значение N == 64.

2.5.3. ReadInfoPage

Команда ReadInfoPage(...) читает блок 32-битных слов в Info Page пространстве памяти flash, начиная с определенного адреса слова.

Таблица 2-18. Команда ReadInfoPage.

Байт 0 1 2 3 4 5
От хоста 0x01 0x23 InfoPage InfoWordAddr(15:8) InfoWordAddr(7:0) InfoReadLen
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0)

Таблица 2-19. Ответ на ReadInfoPage.

Байт 0 1 2 3 4 5 6 ... N*4
От хоста 0x00 0x00 0x00 0x00 0x00 0x00 0x00 ... 0x00
К хосту Stat1 data1(31:24) data1(23:16) data1(15:8) data1(7:0) data2(31:24) data2(23:16) ... data2(7:0)

InfoPage: может быть только 1. Другие значения RFU.

InfoWordAddr: начальный адрес блока данных в Info Page. Этот адрес автоматически инкрементируется после чтения каждого слова данных в соседних ячейках памяти.

InfoReadLen: количество считываемых слов. Максимальное значение InfoReadLen == 64.

Возвратит CMD_PERR, если пользователь попытается прочитать данные после окончания страницы.

[3. Интерфейс управляющего контролера (хоста)]

LR1121 предоставляет API, которое позволяет хосту коммуницировать с LR1121 через набор команд и ответов по интерфейсу SPI. Сигнал BUSY используется как сигнал квитирования (handshake), чтобы показать готовность LR1121 к приему команды. Таким образом, перед отправкой команды необходимо проверить состояние уровня сигнала BUSY.

3.1. Команды записи

Во время команд записи (Write) LR1121 возвращает хосту регистры статуса и регистры прерывания через вывод MISO, в зависимости от длины кода команды (opcode) и аргументов.

Хост посылает 16-битный opcode, за которым идут необходимые аргументы.

Сигнал BUSY автоматически установится по спаду уровня сигнала выборки NSS.

Как только LR1121 завершит обработку команды, сигнал BUSY снимается (переходит в 0), сигнализируя о готовности устройства к приему другой команды.

LR1121 Write command timing diagram fig3 1

Рис. 3-1. Диаграмма времени команды записи.

3.2. Команды чтения

Специальные команды чтения (Read) получают данные из LR1121, такие как результаты внутреннего статуса.

Хост посылает 16-битный opcode, за которым идут необходимые аргументы.

Сигнал BUSY автоматически установится по спаду уровня сигнала выборки NSS.

Как только LR1121 завершит подготовку запрошенных данных, сигнал BUSY переходит в 0. После этого хост может прочитать данные отправкой байт NOP (0x00) для того, чтобы данные выдвигались через вывод MISO.

LR1121 Read command timing diagram fig3 2

Рис. 3-2. Диаграмма времени команды чтения.

3.3. Command Endianness (порядок следования байт команды)

На следующих рисунках приведены примеры транзакции SPI для команды GetVersion(...).

LR1121 GetVersion Write capture fig3 3

Рис. 3-3. Команда GetVersion Write.

LR1121 GetVersion Read capture fig3 4

Рис. 3-4. Команда GetVersion Read.

3.4. Регистры состояния (Status Registers)

В LR1121 есть 2 переменные состояния (status) Stat1 и Stat2, которые показывают текущий статус LR1121 (последняя отправленная команда, прерывания устройства, рабочий режим устройства и режим загрузчика). Команда GetStatus(...) возвратит содержимое этих регистров.

Stat1 и Stat2 всегда отправляются хосту, когда хост выдает команду. Когда хост запрашивает данные из LR1121, то посылается только Stat1.

3.4.1. GetStatus

Команда GetStatus(...) возвратит флаги состояния Stat1 и Stat2, и флаги прерывания IrqStatus. Она затем очистит поле ResetStatus в stat2.

Обратите внимание, что существует альтернативный метод получения информации состояния: если через MOSI передается последовательность нулей (NOP), то LR1121 выдвигает через MISO либо ответ на последнюю команду, либо информацию статуса, если ответ хостом не ожидается. Если команда чтения SPI read разработана для записи нуля /NOP через сигнал MOSI, то это предоставляет способ получить информацию статуса, используя одиночную команду SPI read. Однако имейте в виду, что этот метод не очистит поле ResetStatus. См. Stat1/CMD_DAT для дополнительной информации.

Таблица 3-1. Команда GetStatus.

Байт 0 1 2 3 4 5
От хоста 0x01 0x00 0x00 0x00 0x00 0x00
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0)

3.4.2. Stat1

Таблица 3-2. Значения Stat1.

Биты (7:4) (3:1) 0
Имя RFU Command Status Interrupt Status

Command Status показывает статус последней команды, отправленной хостом:

• 0: CMD_FAIL: последняя команда не выполнена.
• 1: CMD_PERR: последняя команда не обработана (неправильный opcode, неправильные аргументы). Возможна генерация прерывания на DIO, если произошла ошибка команды. Любая попытка использовать функции Wi-Fi или GNSS возвратит этот код.
• 2: CMD_OK: последняя команда была успешно обработана.
• 3: CMD_DAT: последняя команда была успешно обработана, и данные в настоящий момент были переданы данные вместо состояния прерываний (IrqStatus).
• 4-7: RFU

Interrupt Status показывает, было ли прерывание LR1121:

• 0: нет активных прерываний.
• 1: было как минимум 1 прерывание.

3.4.3. Stat2

Таблица 3-3. Значения Stat2.

Биты (7:4) (3:1) 0
Имя Reset Status Chip Mode Bootloader

Reset Status показывает источник сброса LR1121:

• 0: Cleared (нет активного сброса)
• 1: Analog reset (Power On Reset, Brown-Out Reset)
• 2: External reset (внешний сброс, от импульса на выводе NRESET)
• 3: System reset
• 4: Watchdog reset
• 5: Wakeup NSS toggling (пробуждение от активности сигнала выборки SPI)
• 6: RTC restart (перезапуск по таймеру реального времени)
• 7: RFU

Chip Mode показывает текущий режим LR1121:

• 0: Sleep (сон, режим пониженного потребления энергии)
• 1: Standby with RC Oscillator (приостановка с тактированием от RC-генератора)
• 2: Standby with external Oscillator (приостановка с тактированием от внешнего генератора)
• 3: FS (режим синтезатора)
• 4: RX (режим приема)
• 5: TX (режим передачи)
• 6: RFU
• 7: RFU

Bootloader:

• 0: в настоящий момент работает код загрузчика (bootloader)
• 1: в настоящий момент выполняется код программы из flash. Поле ResetStatus очищается по первой команде GetStatus(), выданной после сброса. Оно не очищается ни одной другой командой.

3.5. BUSY

Вывод DIO0 используется для сигнала занятости BUSY: его уровень устанавливается в лог. 1, когда обрабатывается команда, и когда устройство не готово принять новую команду. Диаграмма времени сигнала BUSY показана на следующем рисунке:

LR1121 BUSY timing diagram fig3 5

Рис. 3-5. Интервалы времени сигнала BUSY.

Количество времени, в котором сигнал BUSY остается в лог. 1 после нарастания уровня NSS (время перехода между режимами TSW, см. таблицу 2-15) зависит от природы команды.

3.6. Errors (ошибки)

3.6.1. GetErrors

Команда GetErrors(...) возвратит ожидающие ошибки, которые произошли после последней команды ClearErrors(...), или после запуска схемы (circuit startup).

Есть возможность генерации прерывания на DIO9 или DIO11, когда возникает ошибка. Ошибка не может быть маскирована.

Таблица 3-4. Команда GetErrors.

Байт 0 1
От хоста 0x01 0x0D
К хосту Stat1 Stat2

Таблица 3-5. Ответ GetErrors.

Байт 0 1 2
От хоста 0x00 0x00 0x00
К хосту Stat1 ErrorStat(15:8) ErrorStat(7:0)

ErrorStat содержит все возможные флаги ошибки, которые могли произойти во время выполнения операций чипа:

• бит 0: LF_RC_CALIB_ERR. Калибровка низкочастотного RC-генератора не завершена. Для исправления этой ошибки заново выполните калибровку.
• бит 1: HF_RC_CALIB_ERR. Калибровка высокочастотного RC-генератора не завершена. Для исправления этой ошибки заново выполните калибровку.
• бит 2: ADC_CALIB_ERR. Калибровка АЦП не была завершена. Для исправления этой ошибки заново выполните калибровку.
• бит 3: PLL_CALIB_ERR. Калибровка максимальной и минимальной частот не завершена. Для исправления этой ошибки заново выполните калибровку PLL.
• бит 4: IMG_CALIB_ERR. Калибровка подавления по зеркальному каналу приема (image rejection) не завершена. Для исправления этой ошибки повторите image-калибровку.
• бит 5: HF_XOSC_START_ERR. Высокочастотный кварцевый генератор XOSC не был корректно запущен. Для исправления этой ошибки выполните заново сброс, или отправьте команду SetTcxoCmd(...), если подключен TCXO, и заново произведите калибровки.
• бит 6: LF_XOSC_START_ERR. Низкочастотный кварцевый генератор XOSC не был корректно запущен. Для исправления этой ошибки выполните заново сброс.
• бит 7: PLL_LOCK_ERR. Не произошел захват петли ФАПЧ. Это может произойти из-за слишком высокой или слишком низкой частоты настройки, или если PLL не была откалибрована. Для исправления выполните заново калибровку PLL, или используйте другие частоты.
• бит 8: RX_ADC_OFFSET_ERR. Калибровка смещения АЦП не была завершена. Для исправления этой ошибки заново выполните калибровку.
• биты 9-15: RFU.

3.6.2. ClearErrors

Команда ClearErrors(...) очистит все ожидающие обработки флаги ошибки. Флаги ошибок не могут быть очищены индивидуально.

Таблица 3-6. Команда ClearErrors.

Байт 0 1
От хоста 0x01 0x0E
К хосту Stat1 Stat2

3.7. Memory Access (доступ к памяти)

3.7.1. WriteRegMem32

Команда WriteRegMem32(...) запишет блоки 32-битных слов в пространство регистров/памяти, начиная с определенного адреса.

Таблица 3-7. Команда WriteRegMem32.

Байт 0 1 2 3 4 5 6 7
От хоста 0x01 0x05 Addr(31:24) Addr(23:16) Addr(15:8) Addr(7:0) Data1(31:24) Data1(23:16)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00 0x00
Байт 8 9 10 ... 4*N+5
От хоста Data1(15:8) Data1(7:0) Data2(31:24) ... DataN(7:0)
К хосту 0x00 0x00 0x00 ... 0x00

Адрес автоматически инкрементируется после сохранения каждого байта данных в идущие друг за другом ячейки регистров/памяти. Максимальное значение N == 64.

3.7.2. ReadRegMem32

Команда ReadRegMem32(...) считывает 32-битные слова из пространства регистров/памяти, начиная с определенного адреса.

Таблица 3-8. Команда ReadRegMem32.

Байт 0 1 2 3 4 5 6
От хоста 0x01 0x06 Addr(31:24) Addr(23:16) Addr(15:8) Addr(7:0) Len
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00

Таблица 3-9. Ответ на команду ReadRegMem32.

Байт 0 1 2 3 4 5 ... 4*N
От хоста 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
К хосту Stat1 Data1(31:24) Data1(23:16) Data1(15:8) Data1(7:0) Data2(31:24) ... Data2(7:0)

Адрес автоматически инкрементируется после чтения каждого байта из идущих друг за другом ячеек регистров. Len это количество читаемых слов, максимальное значение Len == 64.

3.7.3. WriteRegMemMask32

Команда WriteRegMemMask32(...) выполняет операцию чтение/модификация/запись маскированных бит (маскированный бит = 1) одного 32-битного слова в пространстве регистров/памяти по указанному адресу.

Таблица 3-10. Команда WriteRegMemMask32.

Байт 0 1 2 3 4 5 6 7
От хоста 0x01 0x0C Addr(31:24) Addr(23:16) Addr(15:8) Addr(7:0) Mask(31:24) Mask(23:16)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00 0x00
Байт 8 9 10 11 12 13
От хоста Mask(15:8) Mask(7:0) Data(31:24) Data(23:16) Data(15:8) Data2(7:0)
К хосту 0x00 0x00 0x00 0x00 0x00 0x00

3.7.4. WriteBuffer8

Команда WriteBuffer8(...) запишет блок байт в буфер передачи (radio TX buffer).

Таблица 3-11. Команда WriteBuffer8.

Байт 0 1 2 3 4 5 6 ... N+1
От хоста 0x01 0x09 Data1 Data2 Data3 Data4 Data5 ... DataN
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00 ... 0x00

Data: N байт данных. Максимальное значение N == 255.

3.7.5. ReadBuffer8

Команда ReadBuffer8(...) читает блок Len байт в буфер приема (radio RX buffer), начиная с указанного смещения Offset. Буфер RX должен быть реализован как кольцевой буфер.

Таблица 3-12. Команда ReadBuffer8.

Байт 0 1 2 3
От хоста 0x01 0x0A Offset(7:0) Len(7:0)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16)

Таблица 3-13. Ответ на команду ReadBuffer8.

Байт 0 1 2 3 ... N
От хоста 0x00 0x00 0x00 0x00 ... 0x00
К хосту Stat1 Data1 Data2 Data3 ... DataN

3.7.6. ClearRxBuffer

Команда ClearRxBuffer(...) очистит все данные в radio RX buffer. Она запишет '0' во все ячейки буфера приема. Это в основном используется для отладки, чтобы гарантировать отсутствие в буфере приема данных предыдущего пакета.

Таблица 3-14. Команда ClearRxBuffer.

Байт 0 1
От хоста 0x01 0x0B
К хосту Stat1 Stat2

3.7.7. GetRandomNumber

Эта команда генерирует 32-разрядное случайное число. Это не используется в целях безопасности.

Таблица 3-15. Команда GetRandomNumber.

Байт 0 1
От хоста 0x01 0x20
К хосту Stat1 Stat2

Таблица 3-16. Ответ на команду GetRandomNumber.

Байт 0 1 2 3 4
От хоста 0x00 0x00 0x00 0x00 0x00
К хосту Stat1 RandomNo(31:24) RandomNo(23:16) RandomNo(15:8) RandomNo(7:0)

3.7.8. EnableSpiCrc

Эта команда разрешает/запрещает 8-битную CRC на SPI. Алгоритм CRC использует полином 0x65 (reversed reciprocal) с начальным значением 0xFF. CRC вычисляется по всем данным, принятым через MOSI (включая Opcode), и по всем данным, отправленным через MISO (включая все статусы).

Эта команда всегда защищена CRC:

• Чтобы разрешить CRC, вычисленная CRC уже должна быть присоединена к это команде. В качестве примера: полная команда разрешения будет 0x01 0x28 0x01 0x20.
• Чтобы запретить CRC, вычисленная CRC должна быть присоединена к команде начиная с момента, когда команда CRC все еще разрешена. В качестве примера: полная команда для запрета CRC будет 0x01 0x28 0x00 0x1C.

Таблица 3-17. Команда EnableSpiCrc.

Байт 0 1 2 3
От хоста 0x01 0x28 Enable CRC
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16)

Enable: разрешает/запрещает 8-битную CRC на интерфейсе SPI:

• 0: запрещено. Не ожидается никакой CRC, посылаемой через SPI (по умолчанию).
• 1: разрешено. Ожидается присоединение CRC к данным, пересылаемым через SPI.
• Другие значения RFU.

CRC: cyclic redundancy check, значение контрольной суммы.

[4. GPIO]

В LR1121 есть 13 цифровых портов I/O (DIOn).

Таблица 4-1. Digital I/O.

I/O Описание
DIO0 Используется для сигнализации занятости BUSY, и это обязательно должно быть правильно обрабатываться интерфейсом хоста.
DIO1 .. DIO4 Выделено для сигналов SPI-интерфейса NSS, SCK, MOSI и MISO соответственно.
DIO5, DIO6, DIO7 Могут произвольно использоваться хостом, например для управления внешними RF-ключами или усилителями LNA на цепях RFIO-HF и sub-GHz RF.
DIO8 Может управлять внешними ключами RF или усилителями LNA на цепях RFIO-HF и sub-GHz RF. Может использоваться как выход тактов 32.768 кГц для контроллера хоста, если кварцевый резонатор 32.768kHz подключен к DIO10 и DIO11.
DIO9 Выделен для прерываний LR1121. Рекомендуется подключить DIO9 к контроллеру хоста для применения в приложениях, где требуется низкое потребление энергии. DIO11 может использоваться как другой вывод прерывания, если не используется кварцевый генератор 32.768kHz.
DIO10 Может управлять внешними ключами RF или усилителями LNA на цепях RFIO-HF и sub-GHz RF. Может использоваться для подключения внешнего кварцевого резонатора 32.768kHz с целью источника тактов RTC.
DIO11 Может использоваться для подключения внешнего кварцевого резонатора 32.768kHz с целью источника тактов RTC. Может использоваться как вход, если тактовый сигнал 32.768kHz поступает от контроллера хоста. В этом случае DIO10 должен оставаться не подключенным. Может использоваться как другой вывод прерывания, если не используется кварцевый генератор 32.768kHz.
NRESET Может отменить выполняющиеся функции LR1121 и сбросить всю аппаратуру (HW) и программное обеспечение (FW) чипа. Хотя перезапуск устройства также возможен по командам хоста через SPI, рекомендуется реализовать для хоста возможность управлять этим сигналом.

4.1. Interrupts (прерывания)

В LR1121 существует несколько источников прерываний, позволяющих хосту быстро реагировать на различные события в системе LR1121 без необходимости опроса регистров, что особенно полезно для приложений, оптимизированных на минимальное энергопотребление.

Прерывания LR1121 мультиплексируются на выводе DIO9 и/или DIO11. Когда приложение принимает прерывание, оно может определить его источник с помощью команды GetStatus(...). Прерывание может быть затем очищено с помощью команды ClearIrq(...).

Команда SetDioIrqParams(...) конфигурирует, какой сигнал прерывания должен быть активирован на выводах DIO9 и/или DIO11.

Статус прерываний LR1121 может быть прочитан командой GetStatus(...), однако эта информация также возвращается хосту через сигнал MISO во время SPI-транзакций через байты IrqStatus, одновременно с передачей в LR1121 аргументов команды. Таким образом, количество отправленных байт IrqStatus из LR1121 во время команд SPI зависит от количества аргументов команды. См. секцию "3. Интерфейс управляющего контролера (хоста)" для дополнительной информации.

Прерывания привязаны следующим образом:

Таблица 4-2. IrqToEnable Interruption Mapping.

Бит Прерывание Описание
0 RFU RFU
1 RFU RFU
2 TxDone Завершена передача пакета
3 RxDone Принят пакет
4 PreambleDetected Была определена преамбула
5 SyncWordValid / HeaderValid Корректное синхрослово / определен заголовок LoRa®
6 HeaderErr Ошибка CRC заголовка LoRa
7 Err Пакет был принят с ошибкой.
LoRa: принята некорректная CRC
(G)FSK: ошибка CRC
8 CadDone Завершено детектирование активности канала LoRa
9 CadDetected Детектирована активность канала LoRa
10 Timeout Таймаут RX или TX
11 LrFhssHop LR-FHSS intra-packet hopping
12-18 RFU RFU
19-20 RFU RFU
21 LBD Low Battery Detection (низкое напряжение батареи)
22 CmdError Ошибка команды хоста
23 Error Произошла ошибка, отличающаяся от ошибки команды (см. GetErrors)
24 FskLenError Сгенерировано прерывание IRQ, если был принят пакет с ошибкой длины
25 FskAddrError Сгенерировано прерывание IRQ, если был принят пакет с ошибкой адреса
26 - RFU
27 LoRaRxTimestamp Принят последний символ LoRa. Используется для фиксации метки времени приема пакета. Устройство все еще находится в режиме RX.
28-31 - RFU

4.1.1. SetDioIrqParams

Команда SetDioIrqParams(...) конфигурирует, какой сигнал прерывания должен быть активирован на выводе прерывания DIO9 и/или DIO11 (они обозначаются как выводы IRQ 1 и/или 2).

Таблица 4-3. Команда SetDioIrqParams.

Байт 0 1 2 3 4 5
От хоста 0x01 0x13 Irq1ToEnable(31:24) Irq1ToEnable(23:16) Irq1ToEnable(15:8) Irq1ToEnable(7:0)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0)
Байт 6 7 8 9
От хоста Irq2ToEnable(31:24) Irq2ToEnable(23:16) Irq2ToEnable(15:8) Irq2ToEnable(7:0)
К хосту 0x00 0x00 0x00 0x00

4.1.2. ClearIrq

Команда ClearIrq(...) очистит выбранные сигналы прерываний записью 1 в соответствующий бит.

Таблица 4-4. Команда ClearIrq.

Байт 0 1 2 3 4 5
От хоста 0x01 0x14 IrqToClear(31:24) IrqToClear(23:16) IrqToClear(15:8) IrqToClear(7:0)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0)

IrqToClear идентичен присваиванию IrqToEnable.

4.2. RF Switch Control

4.2.1. SetDioAsRfSwitch

Порты DIO5, DIO6, DIO7, DIO8 и DIO10 могут управлять внешними ключами RF или усилителями LNAs на цепях Sub-GHz т RFIO_HF RF с помощью команды SetDioAsRfSwitch(...). Только младшие 5 бит всех конфигураций, как и разрешение.

Каждый бит Cfg соответствует состоянию выхода RFSW для определенного режима:

Таблица 4-5. Команда SetDioAsRfSwitch.

Байт 0 1 2 3 4 5
От хоста 0x01 0x12 RfSwEnable RfSwStbyCfg RfSwRxCfg RfSwTxCfg
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0)
Байт 6 7 8 9
От хоста RfSwTxHPCfg RfSwTxHfCfg RFU RFU
К хосту 0x00 0x00 0x00 0x00

Значение RfswEnable показывает, какой ключ используется (1), и какой не используется (0):

• бит 0 - RFSW0 разрешен (вывод DIO5)
• бит 1 - RFSW1 разрешен (вывод DIO6)
• бит 2 - RFSW2 разрешен (вывод DIO7)
• бит 3 - RFSW3 разрешен (вывод DIO8)
• бит 4 - RFSW4 разрешен (вывод DIO10)

RfSwStbyCfg: каждый бит показывает состояние соответствующего RFSW DIO, когда LR1121 находится в standby mode (биты 5:7 RFU).

RfSwRxCfg: каждый бит показывает состояние соответствующего RFSW DIO, когда LR1121 находится в RX mode.

RfSwTxCfg: каждый бит показывает состояние соответствующего RFSW DIO, когда LR1121 находится в low power TX mode.

RfSwTxHPCfg: каждый бит показывает состояние соответствующего RFSW DIO, когда LR1121 находится в high power TX mode.

RfSwTxHfCfg: каждый бит показывает состояние соответствующего RFSW DIO, когда LR1121 находится в radio high frequency TX mode.

Биты 8:9: RFU.

По умолчанию ни один DIO не используется как управление ключами RF: все выходы RFSW находятся в состоянии High-Z.

Эта команда работает только когда LR1121 находится в Standby RC mode, иначе на неё будет возвращена ошибка CMD_FAIL в ответе на последующую команду GetStatus.

4.2.2. DriveDiosInSleepMode

Эта команда разрешает или запрещает добавление верхних (pull up) или нижних (pull down) подтягивающих резисторов на сконфигурированных выводах RF switch и сигналах прерываний (IRQ line DIO). Эта команда позволяет снизить энергопотребление в приложениях, где ключи RF управляются LR1121 DIO, когда LR1121 находится в sleep mode.

Таблица 4-6. Команда DriveDiosInSleepMode.

Байт 0 1 2
От хоста 0x01 0x2A Enable
К хосту Stat1 Stat2 IrqStatus(31:24)

Значение Enable показывает, какой ключ используется для pull-up/pull-down (1) и какой нет (0):

• 0: кодом firmware не были сконфигурированы ни pull-up, ни pull-down (по умолчанию).
• 1: pull-up или pull-down добавлены кодом firmware на сконфигурированном RF switch и IRQ DIO, когда LR1121 переходит в режимы сна (действует на всех режимах сна), в зависимости от состояния DIO в config RC mode.

При пробуждении из sleep mode соответствующие DIO переконфигурируются в режим выходов, управляемых драйверами (push/pull mode), и резисторы pull-up/pull-down удаляются.

Важное замечание: когда выполняется переход в sleep mode без сохранения параметров (retention = 0), все ожидающие обработки IRQ очищаются перед входом в sleep mode.

4.3. Temperature Sensor

В LR1121 есть встроенный датчик температуры, который показывает внутреннюю температуру устройства.

4.3.1. GetTemp

Измерение температуры может быть активировано командой GetTemp(...).

Таблица 4-7. Команда GetTemp.

Байт 0 1
От хоста 0x01 0x1A
К хосту Stat1 Stat2

Таблица 4-8. Ответ на команду GetTemp.

Байт 0 1 2
От хоста 0x00 0x00 0x00
К хосту Stat1 Temp(15:8) Temp(7:0)

Значение температуры вычисляется как функция от внутреннего источника опорного напряжения (типовое значение 1.35V), и типовой температурной характеристики (типовое значение -1.7mV/°C), и оно может быть в градусах Цельсия аппроксимировано по следующей формуле:

Температура(°C) ~= 25 + (1000/-1.7mV°C) * (Temp(10:0)/2047*1.35 - 0.7295)

Важное замечание: GetTemp() использует режим XOSC для получения температуры, так что если подключен TCXO, то это должно быть сконфигурировано командой SetTcxoMode перед вызовом GetTemp().

[5. Power Distribution]

5.1. Выбор регулятора DC-DC или LDO

Доступны 2 варианта регулировки напряжения (понижающий DC-DC или линейный LDO), выбор из которых зависит от приоритетов дизайна приложения. Линейный регулятор LDO всегда представлен во всех режимах, однако трансивер использует регулятор DC-DC, когда он выбран. Альтернативно может быть разрешен высокоэффективный преобразователь DC-DC в режимах FS, Rx и Tx.

DC-DC может управляться двумя источниками тактов:

• В STDBY_XOSC: RC13M предоставляет такты и частоту RC13M/4, частота переключения преобразователя DC-DC 3.25 МГц.
• В FS, Rx, Tx: PLL предоставляет такты, и частота ~5 МГц.

Для приложений, в которых цена и размер являются критическими, возможен вариант использования только LDO. Тогда не нужна индуктивность 15 мкГн, тем самым экономится место на печатаной плате и уменьшается BOM. Однако это достигается ценой повышенного расхода энергии.

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

Таблица 5-1. Типы регулировки напряжения (Regulation Type) против режима схемы (Circuit Mode).

Circuit Mode Sleep STDBY_RC STDBY_XOSC FS Rx Tx
Regulator Type = 0 - LDO LDO LDO LDO LDO
Regulator Type = 1 - LDO DC-DC + LDO DC-DC + LDO DC-DC + LDO DC-DC + LDO

Пользователь может указать использование DC-DC командой SetRegulatorMode(...). Эта операция должна выполняться только в STDBY_RC mode.

Когда разрешен DC-DC, регулятор LDO остается включенным (ON), его целевое напряжение остается установленным на 50mV ниже напряжения DC-DC, чтобы гарантировать стабильность напряжения для пиков потребления тока. Если напряжение на выходе DC-DC упадет ниже этого уровня, то LDO восполняет необходимый ток ценой дополнительного расхода энергии.

5.2. Выбор индуктивности DC-DC

Параметры индуктивности очень важны для оптимальной производительности внутреннего блока DC-DC. Неправильно подобранная индуктивность может привести к нежелательным эффектам пульсаций тока, что скажется на ускорении старения устройства и КПД преобразователя DC-DC.

Желательно применить экранированную индуктивность с низким внутренним сопротивлением, и частотой резонанса намного большей, чем частота переключения DC-DC. Когда выбирается индуктивность 15μH, пользователь должен корректировать свой выбор, руководствуясь параметрами:

• DCR (max) = 2 Ом
• Idc (min) = 100 mA
• Freq (min) = 20 МГц

Таблица 5-2. Рекомендуемые для применения индуктивности.

Наименование производителя Размер Значение Описание Производитель
MLZ1608N100LT000 0603 10 мкГн MLZ1608 Multilayer Shielded Inductor ±20% TDK
MLZ1608N150LT000 0603 15 мкГн MLZ1608 Multilayer Shielded Inductor ±20% TDK
MLZ1608N10MLZ2012M150WLT000 0603 15 мкГн MLZ2012 Multilayer Shielded Inductor ±5% TDK

5.3. Power Modes (режимы питания)

Доступны 2 режима питания:

• DC-DC для приложений, где важно низкое энергопотребление.
• LDO для приложений, где важны снижение цены и размера конечного устройства.

5.3.1. SetRegMode

Команда SetRegMode(...) определяет, какой регулятор должен использоваться.

Таблица 5-3. Команда SetRegMode.

Байт 0 1 2
От хоста 0x01 0x10 RegMode
К хосту Stat1 Stat2 IrqStatus(31:24)

RegMode определяет, должен ли быть включен преобразователь DC-DC:

• 0: не включать DC-DC в любом режиме (по умолчанию).
• 1: автоматически включать DC-DC, в зависимости от режима, как показано в таблице 5-4.
• Другие значения RFU.

Эта команда работает только когда устройство находится в Standby RC mode, иначе будет возвращена ошибка CMD_FAIL на последующей команде GetStatus.

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

Таблица 5-4. Опции Power Regulation.

Circuit Mode Sleep STDBY_RC STDBY_XOSC FS RX TX
Regulator Type = 0 - LDO LDO LDO LDO LDO
Regulator Type = 1 - LDO DC-DC + LDO DC-DC + LDO DC-DC + LDO DC-DC + LDO

5.4. VBAT Measurement

5.4.1. GetVbat

Команда GetVbat(...) позволяет мониторить напряжение питания, поступающее от батареи, и она возвратит напряжение Vbat как функцию от опорного напряжения 1.35V:

V = ((5*Vbat(7:0)/255) - 1) / 1.35

Таблица 5-5. Команда GetVbat.

Байт 0 1
От хоста 0x01 0x19
К хосту Stat1 Stat2

Таблица 5-6. Ответ на команду GetVbat.

Байт 0 1
От хоста 0x00 0x00
К хосту Stat1 Vbat(7:0)

5.5. Power-On-Reset и Brown-Out-Reset

У LR1121 есть фича POR и BRN.

• POR и BRN обеспечивают правильный запуск схемы (startup), удерживая внутренние блоки LR1121 в состоянии сброса, пока не будет достигнут безопасный уровень напряжения питания от батареи, например когда батарея устанавливается.
• BRN генерирует сброс устройства, если напряжение батареи упадет ниже порога для безопасного функционирования (safe operation threshold, типовое значение 1.7V).
• Детектор POR/BRN обладает гистерезисом 50 mV.
• POR сбрасывает статистику.

LR1121 POR and BRN functions fig5 1

Рис. 5-1. Функционирование LR1121 POR и BRN.

5.6. Low Battery Detector

Low Battery Detector (LBD) детектирует ситуацию, когда напряжение питания VBAT падает ниже 1.88V (типовое значение). Индикация LBD проходит по сигналу прерывания, минимизируя активность хоста в условиях критического напряжения питания. LBD IRQ активируется командой SetDioIrqParams().

5.7. Over Current Protection

У LR1121 есть встроенный блок Over Current Protection (OCP), который предотвращает импульсные токи, когда устройство используется на самых высоких уровнях потребления энергии, защищая тем самым батарею и приложения, которые от неё питаются. Текущие параметры ограничения тока настраиваются с помощью доступа к регистру. Порог OCP должен конфигурироваться чуть ниже требований к батарее, но как минимум на 25% выше тока потребления выходного каскада PA.

Значения по умолчанию OCP:

• 60mA для маломощного усилителя (low power PA, LP PA)
• 150mA для мощного усилителя (high power PA, HP PA)
• 50mA для высокочастотного PA (high frequency PA, HF PA)

[6. Источники тактирования]

LR1121 использует как низкочастотный (32 кГц), так и высокочастотный (32 МГц) источники тактов. Для каждой частоты сигнал тактов может быть получен либо от RC-генератора, либо от кварцевого генератора. RC-генераторы позволяют оптимизировать энергопотребление и достичь повышенных скоростей переключения между режимами. Кварцевые генераторы обеспечивают более точную частоту для случает, когда это необходимо. Операции RF требуют точной опорной частоты 32 МГц, которую можно получить либо от внутреннего кварцевого генератора, к которому подключен внешний кварцевый резонатор, либо от внешнего генератора TCXO.

Требования тактирования для устройств LoRa Edge™ сведены в документе AN1200.74 LoRa Edge Clock Requirements.

6.1. RC Oscillators Clock References

Доступны два RC-генератора:

• 32.768kHz RC-генератор для тактирования RTC, который может использоваться схемой в Sleep mode, чтобы пробуждать устройство для периодически операций. Несколько команд используют этот RTC для генерации событий с привязкой ко времени.
• 32MHz RC-генератор разрешен для всех коммуникаций SPI, чтобы обеспечить возможность конфигурирования устройства без необходимости запуска кварцевого генератора 32 МГц.

6.2. High-Precision Clock References

В этой секции приводится информация по опорным источникам тактирования. Для дополнительного руководства по источникам внешнего тактирования (кварц и TCXO) см. апноут AN1200.59 Selecting the Optimal Reference Clock. Также см. даташит LR1121 [2] для описания критерия выбора кварц/TCXO.

6.2.1. 32.768kHz Crystal

Кварцевый генератор 32.768kHz может использоваться вместо применяемого по умолчанию 32.768kHz RC-генератора в качестве низкочастотного источника тактирования, что активируется командой ConfigLfClock(...). Амплитуда внешнего сигнала 32.768kHz для подачи на вывод DIO11 должна соответствовать полному размаху логических уровней. Меньшая амплитуда может привести к повышенному потреблению энергии.

6.2.2. 32MHz Crystal

Кварцевый генератор 32MHz это самый недорогой и экономный по потреблению энергии вариант для точного тактирования по высокой частоте 32 МГц для LR1121. Корректирующие емкости нагрузки кварца интегрированы в чип, снижая тем самым цену BOM и оптимизируя пространство печатной платы. В случае работы от кварцевого резонатора вывод VTCXO должен оставаться неподключенным.

6.2.2.1. Дрейф частоты во время передачи пакета и теплоизоляция

Передача RF пакетов на высокой мощности приводит к значительному нагреву LR1121, и это тепло может нагреть кварц 32MHz, передаваясь по печатной плате. Для длительных передач это формирует дрейф частоты, который может вводить ошибки на приеме для противоположного конца канала связи, если не были учтены рекомендации по разработке PCB. Более подробно этот эффект для приложения SX1261/SX1262 описывается в апноуте AN1200.37 Recommendations for Best Performance.

Например, при модуляции LoRa, когда используется низкая скорость данных (Low Data Rate, LDRO), дрейф частоты передаваемого пакета 120 Гц/сек обычно приводит к уменьшению чувствительности на 3dB приемника LR1121 для всех SF и BW. Этот максимальный дрейф составит 110 Гц/сек, когда LDRO не используется. Таким образом, дрейф частоты во время передачи пакета должен удерживаться ниже максимальной величины, чтобы гарантировать самый лучший прием пакета. Дизайн, где используется TCXO, не подвержен эффекту дрейфа частоты при передаче пакета.

Реализация вырезов в слоях земляной заливки медью PCB уменьшает передачу тепла между LR1121 и кварцем 32MHz, как показано на рис. 6-1.

LR1121 Thermal Insulation on PCB Top Layer fig6 1

Рис. 6-1. Теплоизоляция LR1121 на верхнем слое печатаной платы.

См. образцовый дизайн LR1121 PCB на сайте www.semtech.com для примера реализации печатной платы.

6.2.3. 32MHz TCXO

Для применений с экстремальными изменениями температуры может потребоваться использование TCXO (Temperature Compensated Crystal Oscillator), чтобы достичь самой высокой точности стабилизации частоты. Когда используется TCXO:

• TCXO должен быть подключен к выводу XTA через последовательную цепочку из резистора 220 Ом и конденсатора 10 пФ. Апноут AN1200.59 предоставляет рекомендации по выбору 32MHz TCXO и связанных с ним компонентов.
• Вывод XTB должен оставаться неподключенным.
• TCXO получает питание от внутреннего регулятора LR1121 через вывод VTCXO.
• Регулируемое напряжение VTCXO программируется в диапазоне от 1.6 до 3.3V с помощью команды SetTcxoMode().
• VBAT должно оставаться на 200 mV выше, чем запрограммированное напряжение VTCXO, чтобы гарантировать правильную работу стабилизации напряжения питания TCXO.
• Номинальный ток потребления 1.5 mA, однако регулятор может обеспечить в нагрузке VTCXO ток до 4mA.
• На выходе TCXO необходимо наличие сигнала в форме обрезанной синусоиды, с амплитудой не выше 1.2V от пика до пика.

LR1121 TCXO circuit diagram fig6 2

Рис. 6-2. Схема подключения и питания TCXO.

6.3. Команды управления тактированием

6.3.1. ConfigLfClock

Конфигурирует источник тактов 32kHz.

Таблица 6-1. Команда ConfigLfClock.

Байт 0 1 2
От хоста 0x01 0x16 LfClkConfig
К хосту Stat1 Stat2 IrqStatus(31:24)

Параметр LfClkConfig:

• биты 0-1: выбирают такты LF:

   0: Используется 32.768kHz RC-генератор
   1: Используется 32.768kHz кварцевый генератор
   2: Используются внешнее тактирование 32.768kHz, поступающее на вывод DIO11
   3: RFU

• бит 2: когда снимается сигнал BUSY:

   0: ожидание готовности для Xtal 32k
   1: ожидание готовности для Xtal 32k перед снятием сигнала BUSY

• биты 3-7: RFU.

6.3.2. SetTcxoMode

Конфигурирует LR1121 для подключенного TCXO. TCXO должен быть сконфигурирован с помощью SetTcxoMode(...) перед вызовом GetTemp().

Таблица 6-2. Команда SetTcxoMode.

Байт 0 1 2 3 4 5
От хоста 0x01 0x17 RegTcxoTune Delay(23:16) Delay(15:8) Delay(7:0)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0)

RegTcxoTune настраивает выходное напряжение на выводе VTCXO (напряжение питания TCXO), в соответствии с таблицей 6-3. Напряжение питания TCXO меняется установкой RegTcxoTune. Оно устанавливается типично +/-50 mV для настройки VTCXO = 1.8V.

Таблица 6-3. Значения программирования напряжения питания TCXO.

RegTcxoTune Напряжение питания TCXO (типовое)
0x00 1.6V
0x01 1.7V
0x02 1.8V
0x03 2.2V
0x04 2.4V
0x05 2.7V
0x06 3.0V
0x07 3.3V

Delay представляет максимальную длительность для старта и стабилизации генератора 32MHz (с шагом 30.52 мкс). Если генерация 32 МГц от TCXO не обнаружена по истечению этого периода задержки, то внутреннее firmware устройства генерирует ошибку HF_XOSC_START_ERR.

• 0: запрещает режим TCXO (значение по умолчанию).
• 1: установит режим TCXO. Потребуется полный сброс чипа лоя возврата к обычному (не TCXO) тактированию XOSC.

Эта команда работает только в Standby RC mode, иначе она возвратит CMD_FAIL на последующей команде GetStatus().

[7. Radio]

7.1. Обзор

LR1121 это полудуплексный RF трансивер, способный обрабатывать схемы модуляции с постоянной огибающей (constant envelope modulation) такие как LoRa, (G)FSK, Sigfox и LR-FHSS. Модуляции LoRa, Sigfox и (G)FSK полностью совместимы с семейством чипов SX1261/SX1262/SX1268 для диапазона sub-GHz, и могут конфигурироваться для совместимости с семейством SX1280/SX1281 диапазона 2.4GHz.

Подсистема радиотракта показана на рис. 7-1 ниже. Она состоит из синтезатора частоты (также его называют PLL), трех цепей передачи (TX High Power, TX Low Power и High Frequency) и двух цепей приема (RX), в котором применяется широкополосный ADC. И ADC, и PLL связаны с цифровой подсистемой, поддерживаемыми модемами и модулятором LR-FHSS.

LR1121 Radio block diagram fig7 1

Рис. 7-1. Блок-схема радиотракта LR1121.

Синтезатор частоты LR1121 позволяет непрерывное функционирование в диапазоне частот 150 .. 2500 МГц. Он совместно используется на радио sub-GHz и HF, поэтому одновременная работа в диапазонах sub-GHz / HF невозможна.

Синтезатор частоты LR1121 тактируется от опорной частоты тактов 32 МГц, поступающей либо от кварцевого генератора, либо от TCXO (см. секцию "6. Источники тактирования").

7.2. Команды управления радиотрактом

7.2.1. SetRfFrequency

Команда SetRfFrequency(...) устанавливает частоту RF (PLL) радиотракта. В режиме приема (RX mode), частота внутренне преобразуется в частоту IF.

Таблица 7-1. Команда SetRfFrequency.

Байт 0 1 2 3 4 5
От хоста 0x02 0x0B RfFreq(31:24) RfFreq(23:16) RfFreq(15:8) RfFreq(7:0)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0)

RfFreq: частота RF радиотракта в Hz. все параметры, зависящие от частоты, автоматически пересчитываются кодом LR1121 firmware при обработке этой команды.

7.2.2. SetRx

Команда SetRx(...) установит sub-GHz радиотракт в режим приема (RX mode). Цепь прохождения сигнала sub-GHz выбирается для частот RfFreq меньше или равных 1.50 ГГц. Для частот выше используется цепь прохождения сигнала HF. Если не был принят пакет после определенного таймаута RxTimeout, устройство перейдет обратно в Standby RC mode.

Таблица 7-2. Команда SetRx.

Байт 0 1 2 3 4
От хоста 0x02 0x09 RxTimeout(23:16) RxTimeout(15:8) RxTimeout(7:0)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8)

RxTimeout выражается в периодах частоты 32.768kHz RTC. Максимальное значение длительности таймаута соответствует 512 секундам. Значения 0x000000 и 0xFFFFFF запрещают функцию таймаута.

• 0x000000 установит устройство в RX mode до тех пор, пока не произойдет прием пакета. После приема пакета устройство возвратится в Standby mode.
• 0xFFFFFF установит устройство в RX mode до тех пор, пока хост не поменяет режим работы. Устройство может принять несколько пакетов. Каждый раз, когда принят пакет, выдается индикация хосту (прерывание) о завершении приема пакета, и устройство автоматически ищет новый пакет.

Если таймер активен, то radio остановит прием по окончанию периода таймаута, кроме ситуации, когда был обнаружена преамбула или заголовок (Header), как это было определено конфигурацией StopTimeoutOnPreamble.

Если не был сконфигурирован тип пакета, или тип пакета не позволяет выполнять операции приема, то эта команда потерпит неудачу.

Сигнал BUSY перейдет в лог. 0 после того, как устройство установится в RX mode.

7.2.3. SetTx

Команда SetTx(...) установит sub-GHz radio или HF в режим передачи (TX mode), запуская RF передачу пакета, и также запуская RTC с указанным значением TxTimeout. Здесь нет выбора PA на основе конфигурации RfFreq. Подробнее про выбор и работу PA см. главу 9. Если событие RTC возникнет до завершения передачи, то сработает TIMEOUT IRQ, и это остановит передачу. Иначе по окончании передачи пакета генерируется прерывание TX_DONE.

После TIMEOUT IRQ или TX_DONE IRQ устройство перейдет обратно в режим STBY_RC (по умолчанию), STBY_XOSC или FS, в зависимости от конфигурации FallBackMode.

Таблица 7-3. Команда SetTx.

Байт 0 1 2 3 4
От хоста 0x02 0x0A TxTimeout(23:16) TxTimeout(15:8) TxTimeout(7:0)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8)

TxTimeout выражается в периодах 32.768kHz RTC. Максимальное значение соответствует 512 секунд. 0x000000 запрещает функцию таймаута.

Если не был сконфигурирован тип пакета, или тип пакета не позволяет выполнять операции передачи, то эта команда потерпит неудачу.

Сигнал BUSY перейдет в лог. 0 после того, как устройство установится в TX mode.

7.2.4. AutoTxRx

Команда AutoTxRx(...) автоматически выполняет переход в RX mode после передачи пакета, или в TX mode после приема пакета. После второго режима устройство перейдет обратно в Standby RC mode.

Если разрешен AutoTxRx mode, и:

• команда SetTx(...) отправлена в устройство, то оно перейдет в RX mode после TX_DONE и указанной задержки. Timeout используется как RxTimeout для автоматического приема (auto RX).
• команда SetRx(...) отправлена в устройство, то оно перейдет в TX mode после RX_DONE и указанной задержки. Timeout используется как TxTimeout для автоматической передачи (auto TX).

Если стартовал Rx Duty Cycle, то этот режим не используется.

Таблица 7-4. Команда AutoTxRx.

Байт 0 1 2 3 4 5 6 7 8
От хоста 0x02 0x0C Delay(23:16) Delay(15:8) Delay(7:0) IntermediaryMode Timeout(23:16) Timeout(15:8) Timeout(7:0)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00 0x00 0x00

Delay определяет время перехода между TX mode и RX mode, выраженную в периодах 32.768kHz RTC. Максимальное значение Delay соответствует 512 секундам.

• 0x000000: выполнит прямой переход от TX к RX или от RX к TX, без прохождения через IntermediaryMode.
• 0xFFFFFF: запрещает функцию AutoTxRx. По умолчанию функция AutoTxRx запрещена.

IntermediaryMode: режим устройства между TX mode и RX mode.

• 0x00: Sleep mode.
• 0x01: Standby RC mode.
• 0x02: Standby Xosc mode.
• 0x03: FS mode.

Timeout определяет таймаут второго режима, переход в который произошел автоматически. Выражается в периодах 32.768kHz RTC. Максимальное значение таймаута соответствует 512 секундам.

• 0x000000: запретит функцию таймаута.

7.2.5. SetRxTxFallbackMode

Команда SetRxTxFallbackMode(...) определяет, в какой режим устройство переходит после передачи или приема пакета. Если запущен Rx Duty Cycle или сконфигурирован AutoRxTx, то этот режим не используется.

Таблица 7-5. Команда SetRxTxFallbackMode.

Байт 0 1 2
От хоста 0x02 0x13 FallbackMode
К хосту Stat1 Stat2 IrqStatus(31:24)

Значения FallbackMode:

• 0x01: Standby RC mode (значение по умолчанию).
• 0x02: Standby Xosc mode.
• 0x03: FS mode.
• Другие значения RFU.

Fallback mode также исползуется для Rx Duty Cycle после прерывания RX_DONE, или для AutoRxTx после переключения от RX к TX, или когда выполнена последовательность от TX до RX.

7.2.6. SetRxDutyCycle

Команда SetRxDutyCycle(...) периодически открывает окна RX. Между окнами RX устройство переходит в Sleep mode (с сохранением параметров, retention). Источник тактов для RTC должен быть сконфигурирован командой перед входом в Duty Cycle mode.

Таблица 7-6. Команда SetRxDutyCycle.

Байт 0 1 2 3 4 5 6 7 8
От хоста 0x02 0x14 RxPeriod(23:16) RxPeriod(15:8) RxPeriod(7:0) SleepPeriod(23:16) SleepPeriod(15:8) SleepPeriod(7:0) Mode
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00 0x00 0x00

RxPeriod определяет максимальную длительность RX-окна, выраженную в периодах 32.768kHz RTC. Максимальное значение задержки соответствует 512 секундам.

SleepPeriod определяет длительность периода Sleep между RX-окнами. Она выражается в периодах 32.768kHz RTC. Максимальное значение задержки соответствует 512 секундам.

Mode выбирает режим устройства во время RX-окна:

   0: конфигурирует устройство в RX mode во время RX-окна. Доступно для типов пакетов (G)FSK и LoRa.
   1: конфигурирует устройство в CAD во время RX-окна. Доступно только для типов пакетов LoRa. Возвратит CMD_FAIL для типов пакетов (G)FSK.

Параметр Mode опцинальный, и устанавливается в 0, если не посылается.

Если команда посылается в Standby mode, то контекст (конфигурация устройства) сохраняется и устройство входит в цикл, определяемый следующими шагами, как показано на рис. 7-2:

1. Устройство входит в RX и прослушивает эфир на предмет послупления RF-пакета в течение периода времени, заданного параметром RxPeriod.
2. При детектировании преамбулы отсчет таймаута останаливается и перезапускается со значением 2 * RxPeriod + SleepPeriod, как показано на рис. 7-3.
3. Если не был принят никакой пакет во время RX-окна, то устройство входит в Sleep mode с сохраненным контекстом на период времени, определенным SleepPeriod.
4. По окончании окна Sleep устройство автоматически перезапустит процесс восстановления контекста и войдет в RX mode, и так далее.

Хост в любой момент времени может остановить этот цикл.

LR1121 Current Profile during RX Duty Cycle fig7 2

Рис. 7-2. Профиль LR1121 во время работы RX Duty Cycle.

LR1121 RX Duty Cycle upon Preamble detection fig7 3

Рис. 7-3. RX Duty Cycle при детектировании преамбулы.

Цикл прервется, если произойдет что-то из следующего:

• Во время RX-окна был обнаружен пакет, в этот момент чип посылает хосту прерывание через флаг RX_DONE и возвратится к сконфигурированному режиму Fallback (см. секцию "7.2.5. SetRxTxFallbackMode").
• Хост выдал команду SetStandby(...) во время RX-окна.
• Устройство пробудилось из Sleep mode по спаду уровня NSS. В этом случае пользователь должен послать команду SetStandby(...), чтобы избежать ситуаций гонки, если спад NSS был выдан во время фазы загрузки (boot phase).

Если запущена команда RxDutyCycle(...), то режимы AutoRxTx или SetRxTxFallback не используются.

В этом режиме команда StopTimeoutOnPreamble(...) не дает эффекта.

Замечание: команда RxDutyCycle(...) возвратит CMD_FAIL на последующей команде статуса, если не был установлен тип пакета.

7.2.7. StopTimeoutOnPreamble

Команда StopTimeoutOnPreamble(...) определяет, должен ли быть остановлен RX-таймаут во время обнаружения Syncword/Header, или при детектировании преамбулы.

Таблица 7-7. Команда StopTimeoutOnPreamble.

Байт 0 1 2
От хоста 0x02 0x17 StopOnPreamble
К хосту Stat1 Stat2 IrqStatus(31:24)

Значения StopOnPreamble:

0x00: остановка на детектировании Syncword/Header (значение по умолчанию).
0x01: остановка на дедектировании преамбулы.

7.2.8. GetRssiInst

Команда GetRssiInst(...) возвратит мгновенное значение RSSI в момент отправки команды. Таким образом, если не присутствует RF-пакет, то возвращенное командой GetRssiInst(...) значение RSSI соответствует шуму RF.

Таблица 7-8. Команда GetRssiInst.

Байт 0 1
От хоста 0x02 0x05
К хосту Stat1 Stat2

Таблица 7-9. Ответ на команду GetRssiInst.

Байт 0 1
От хоста 0x00 0x00
К хосту Stat1 Rssi

RSSI вычисляется по следующей формуле: RSSI (dBm) = -Rssi/2.

7.2.9. GetStats

Команда GetStats(...) возвратит внутреннюю статистику принятых RF-пакетов.

Таблица 7-10. Команда GetStats.

Байт 0 1
От хоста 0x02 0x01
К хосту Stat1 Stat2

Таблица 7-11. Ответ на команду GetStats.

Байт 0 1 2 3 4 5 6 7 8
От хоста 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
К хосту Stat1 NbPktReceived
(15:8)
NbPktReceived
(7:0)
NbPktCrcError
(15:8)
NbPktCrcError
(7:0)
Data1
(15:8)
Data1
(7:0)
Data2
(15:8)
Data2
(7:0)

NbPktReceived это общее количество принятых пакетов.

NbPktCrcError это общее количество принятых пакетов с ошибкой CRC.

Data1 зависит от PacketType:

• Режим (G)FSK: Data1 = NbPacketLengthError(15:0): количество пакетов с ошибкой длины.
• Режим LoRa: Data1 = NbPktHeaderErr(15:0): количество пакетов с ошибкой заголовка.

Data2 зависит от PacketType:

• Режим (G)FSK: Data2 = 0x00.
• Режим LoRa: Data2 = NbPktFalseSync(15:0): количество сбоев синхронизации.

Статистика сбрасывается при Power On Reset, выключении питания, или по команде ResetStats(...).

7.2.10. ResetStats

Команда ResetStats(...) сбросит внутреннюю статистику принятых RF пакетов.

Таблица 7-12. Команда ResetStats.

Байт 0 1
От хоста 0x02 0x00
К хосту Stat1 Stat2

7.2.11. GetRxBufferStatus

Команда GetRxBufferStatus(...) возвратит длину последнего принятого пакета и смещение в RX-буфере первого принятого байта.

Таблица 7-13. Команда GetRxBufferStatus.

Байт 0 1
От хоста 0x02 0x03
К хосту Stat1 Stat2

Таблица 7-14. Ответ на команду GetRxBufferStatus.

Байт 0 1 2
От хоста 0x00 0x00 0x00
К хосту Stat1 PayloadLengthRX RxStartBufferPointer

PayloadLengthRX это длина полезной нагрузки приятого пакета в байтах.

RxStartBufferPointer это смещение в RX-буфере первого принятого байта.

7.2.12. SetRxBoosted

Команда SetRxBoosted(...) установит устройство в RX Boosted mode, что позволяет приблизительно на 2dB увеличить чувствительность ценой повышенного потребления тока ~2 mA в RX mode.

Таблица 7-15. Команда SetRxBoosted.

Байт 0 1 2
От хоста 0x02 0x27 RxBoosted
К хосту Stat1 Stat2 IrqStatus(31:24)

RxBoosted: установит Rx Boosted mode.

0: RX Boosted mode деактивирован.
1: RX Boosted mode активирован.

Другие значения RFU.

7.2.13. SetLoRaSyncWord

Эта команда установит SetLoRaSyncWord.

Таблица 7-16. Команда SetLoRaSyncWord.

Байт 0 1 2
От хоста 0x02 0x28 Syncword
К хосту Stat1 Stat2 IrqStatus(31:24)

Syncword: установит SetLoRaSyncWord. Допустимо для всех SF. Примеры значений:

0x12: Private Network (по умолчанию).
0x34: Public Network.

7.2.14. GetLoRaRxHeaderInfos

Команда GetLoRaRxHeaderInfos(...) возвратит информацию, закодированную в последнем принятом заголовке пакета (explicit header mode), или сконфигурированные настройки coding_rate и crc_type:

Таблица 7-17. Команда GetLoRaRxHeaderInfos.

Байт 0 1
От хоста 0x02 0x30
К хосту Stat1 Stat2

Таблица 7-18. Ответ на команду GetLoRaRxHeaderInfos.

Байт 0 1
От хоста 0x00 0x00
К хосту Stat1 Infos

Infos:

• биты 7-5: 0 RFU
• бит 4: 1 = CRC ON, 0 = CRC OFF
• бит 3: 0 RFU
• биты 2-0: скорость кодирования (см. команду 8.3.1. SetModulationParams для значений этого поля).

7.2.15. SetRssiCalibration

Команда SetRssiCalibration(...) установит смещение усиления для встроенного в чип измерителя мощности (power estimation). Внутренний LNA чипа LR1121 устанавливается в предварительно заданные коэффициенты усиления (G4, G5, ... G13, поделенные на подусиления G13 hp1, G13hp2, ... G13 hp7), используемые для усиления мощности RF на корректном уровне, в зависимости от входной мощности RF. При нормальном использовании чипа управление усилением LNA автоматическое.

На мощность, которую видит LR1121 analog front-end, влияют внешние компоненты, такие как цепь согласования или ключи RF.

• Некорректный RSSI приводит к деградации чувствительности в режиме (G)FSK и к некорректному выбору усиления в режимах LoRa и GFSK.
• Некорректное усиление может привести к пропуску детектирования (потере пакета) или ухудшению устойчивости к помехам.

По умолчанию чип калибруется для диапазона 868-915MHz на LR1121 EVK. Таким образом, чтобы было корректным считываемое значение RSSI чипа, встроенное на печатную плату приложенияPCB, RSSI должен быть откалиброван. RSSI должен быть калиброван для каждого типа аппаратуры, но не для каждого устройства индивидуально: смещение RSSI должно быть определено один раз во время отладки аппаратуры или на фазе тестирования, и затем применено ко все устройствам, использующим то же самое оборудование (идентичные схему, разводку платы и BOM).

Таблица 7-19. Команда SetRssiCalibration.

Байт 0 1 2 3 4 5 6
От хоста 0x02 0x29 TuneG5(7:4)G4(3:0) TuneG7(7:4)G6(3:0) TuneG9(7:4)G8(3:0) TuneG11(7:4)G10(3:0) TuneG13(7:4)G12(3:0)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00
Байт 7 8 9 10 11 12
От хоста TuneG13hp2(7:4)
G13hp1(3:0)
TuneG13hp4(7:4)
G13hp3(3:0)
TuneG13hp6(7:4)
G13hp5(3:0)
TuneG13hp7(3:0) GainOffset(15:8) GainOffset(7:0)
К хосту 0 0        

TuneGx(...) (аргументы от 2 до 10): значения настройки усиления индикатора уровня сигнала (RSSI Gain Tune). Tune это 4-разрядное значение со знаком, где вес младшего бита = 0.5dB.

Таблица 7-20. Значения Gain Tune.

Tune Значение (dBm)
0 0
1 0.5
2 1
3 1.5
4 2
5 2.5
6 3
7 3.5
8 -4
9 -3.5
10 -3
11 -2.5
12 -2
13 -1.5
14 -1

GainOffset: глобальное смещение, добавляемое к значениям Gain Tune. Смещение это 12-разрядное значение со знаком, где вес младшего разряда = 0.5dB.

Таблица 7-21. Рекомендуемые значения для Reference EVK.

Частота < 600 МГц 600 МГц .. 2 ГГц > 2 ГГц
Gain Offset 0 0 2030
G4 Tune 12 2 6
G5 Tune 12 2 7
G6 Tune 14 2 6
G7 Tune 0 3 4
G8 Tun 1 3 3
G9 Tune 3 4 4
G10 Tune 4 5 14
G11 Tune 4 4 12
G12 Tune 3 4 14
G13 Tune 6 6 12
G13hp1 Tune 6 5 12
G13hp2 Tune 6 5 12
G13hp3 Tune 6 6 12
G13hp4 Tune 6 6 8
G13hp5 Tune 6 6 8
G13hp6 Tune 6 7 9

Значения Gain Tune и Gain Offset могут быть определены с помощью RF-генератора с аппаратной реализацией LR1121 следующим образом:

1. Устройство настраивается в режим GFSK и устанавливается на нужную частоту RF.

2. Устройство настраивается в режим ручной установки усиления (запрещается AGC, Auto Gain Control).

3. Используется SetRssiCalibration API для установки всех tune и offset в 0.

4. Выполняется цикл по всем различным усилениям, включая LNA boost mode (high power mode):

a. С помощью генератора выдается непрерывный тон на указанной выходной мощности gen_pwr (в зависимости от усиления), с учетом всех потерь на кабеле. Рекомендуется применять непосредственное соединение с лабораторным генератором.
b. Считывается мгновенное значение RSSI (rssi_inst).
c. Вычисляется rssi_error = rssi_inst - gen_pwr.
d. Записывается в файл rssi_error.

5. Находится общее смещение между всеми измеренными ошибками, и оно используется как новое глобальное смещение.

6. Находятся индивидуальные ошибки (относительно нового глобального смещения) и они используются в качестве tunes.

7. Вызывается SetRssiCalibration(), и снова выполняется цикл по усилениям для проверки, что мгновенный RSSI теперь откалиброван.

Вот пример псевдокода для этого алгоритма:

uint8_t gain[] = { 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
// ПРИМЕЧАНИЕ: для цепи 2G4 максимальное усиление 16, так что 17-20 можно игнорировать.
float power[] = { -35.0, -41.0, -45.0, -50.0, -53.5, -60.0, -65.0, -69.5, -75.0, -81.0,
-82.5, -83.5, -84.0, -85.0, -86.0, -86.5, -87.0 };

/* Конфигурирование чипа на системном уровне */ lr11xx_system_reset( context ); lr11xx_system_set_reg_mode( context, reg_mode ); lr11xx_system_set_dio_as_rf_switch( context, rf_switch_cfg ); lr11xx_system_set_tcxo_mode( context, tune, timeout ); // Опционально - только для TCXO lr11xx_system_clear_errors( context ); lr11xx_system_calibrate( context, 0x3F ); // 0x3F для разрешения всех полей

/* Конфигурирование чипа на уровне модема */ lr11xx_radio_set_pkt_type( context, LR11XX_RADIO_PKT_TYPE_GFSK ); lr11xx_radio_set_rf_freq( context, freq_in_hz ); lr11xx_system_calibrate_image_in_mhz( context, freq1_in_mhz, freq2_in_mhz ); lr11xx_radio_set_gfsk_mod_params( context, mod_params ); // Rx BW должна быть установлена
// в LR11XX_RADIO_GFSK_BW_234300,
// другие параметры модуляции
// могут быть любыми. lr11xx_radio_set_gfsk_pkt_params( context, pkt_params ); // Параметры пакета могут быть
// любыми.

/* Конфигурирование чипа для управления вручную */ lr11xx_regmem_write_regmem32_mask( context, 0x00F20214, 0x00080000, 0x00080000 ); lr11xx_regmem_write_regmem32_mask( context, 0x00F20230, 0x71110000, 0x71100000 ); lr11xx_radio_set_rssi_calibration( context, rssi_cal_table ); // Все параметры rssi_cal_table
// устанавливаются в 0 lr11xx_radio_set_rx_with_timeout_in_rtc_step( context, 0xFFFFFF );

for(int i = 0; i++; i < 17) // 17 это количество элементов в массиве усилений gain {
const uint8_t gain_step = MIN( gain[i], 13 );
const uint8_t lna_boost = ( gain > 13 ) ? gain - 13 : 0;
lr11xx_regmem_write_regmem32_mask( context, 0x00F20214, 0x00F00000, gain_step < < 20 );
lr11xx_regmem_write_regmem32_mask( context, 0x00F3008C, 0x00070000, lna_boost < < 16 );
/* Ожидание 1 мс */
/* Здесь вставляется управление вашим тестовым оборудованием, чтобы генерировать
тон на частоте RF, установленной в freq_in_hz, с выходной мощностью, установленной
в power[i] dBm */
lr11xx_radio_get_rssi_inst( context, rssi_in_dbm );
/* Добавляется способ регистрации триплета (gain[i], power[i], rssi_in_dbm), чтобы
можно было вычислить значения offset и tunes для калибровки RSSI */ }

[8. Модемы]

8.1. Конфигурация модема

The LR1121 содержит различные модемы, которые могут обрабатывать модуляции с постоянной огибающей (constant envelope modulation). Для модемов LoRa®/(G)FSK, модуляций LR-FHSS и Sigfox подходящая последовательность команд следующая:

• Пользователь должен указать используемый модем командой SetPacketType(...).
• Команда SetModulationParams(...) конфигурирует параметры модема (SF, BW, CR и LDRO).
• SetPacketParams(...) определяет параметры RF-пакета (длина полезной нагрузки Implicit/Explicit mode, ...). Эта команда не нужна для LR-FHSS.
• SetPaConfig(...) конфигурирует настройки PA, используемые для передачи RF-пакета (какой PA, режим питания...).
• SetTxParams(...) определяет параметры PA (выходная мощность, время нарастания мощности ramp time).

LR1121 Modem command order fig8 1

Рис. 8-1. Последовательность команд настройки модема.

Руководство по использованию Modem-E firmware см. по ссылке [3].

8.1.1. SetPacketType

Команда SetPacketType(...) определяет, какой модем используется.

Таблица 8-1. Команда SetPacketType.

Байт 0 1 2
От хоста 0x02 0x0E PacketType
К хосту Stat1 Stat2 IrqStatus(31:24)

PacketType определяет используемый модем для последующих RF-транзакций:

0x00: None (по умолчанию)
0x01: (G)FSK
0x02: LoRa
0x03: Sigfox Uplink(1)
0x04: GMSK (LR-FHSS)
Другие значения RFU.

Эта команда первая из вызываемых перед переходом в RX или TX, и перед определением модуляции и параметров пакета. Она работает только когда устройство находится в режимах Standby RC, Standby Xosc или Fs, иначе в статусе будет возвращена ошибка CMD_FAIL при выдаче следующей команды.

8.1.2. GetPacketType

Команда GetPacketType(...) возвратит текущий протокол radio.

Таблица 8-2. Команда GetPacketType.

Байт 0 1
От хоста 0x02 0x02
К хосту Stat1 Stat2

Таблица 8-3. Ответ на команду GetPacketType.

Байт 0 1
От хоста 0x00 0x00
К хосту Stat1 PacketType

PacketType соответствует модему, используемому для последующих RF-транзакций:

0: None
1: (G)FSK
2: LoRa
3: Sigfox Uplink(1)
4: LR-FHSS

Другие значения RFU.

Примечание (1): Sigfox downlink выполняется с использованием PacketType 0x01, подробности см. в апноуте AN1200.73.

8.2. Модем LoRa®

В этой главе объясняются некоторые термины технологии LoRa.

8.2.1. Принцип модуляции LoRa

Модем LoRa использует проприетарную технологию модуляции с расширением спектра (spread spectrum modulation), которая позволяет использовать увеличенный бюджет линка и повышенную устойчивость к помехам на используемой полосе частот в сравнении с традиционными техниками модуляции. Это позволяет принимать сигналы с отрицательным SNR, что увеличивает как бюджет канала связи, так и дальность связи приемника LoRa.

8.2.1.1. Spreading Factor (SF)

Модуляция spread spectrum LoRa выполняется путем представления каждого бита информации полезной нагрузки несколькими "chips". Скорость, с которой spread-символ (содержащий 2^SF chips) посылается, называют symbol rate (Rs). Соотношение между номинальной symbol rate и chip это Spreading Factor (SF), и он определяет количество бит, посылаемых на символ.

Замечание: spreading factor должен быть заранее известен на обоих сторонах обмена (на приемнике и передатчике), поскольку разные SF ортогональны друг другу.

8.2.1.2. LoRa Bandwidth (BWL)

Модем LoRa работает на программируемой полосе частот (BWL) вокруг центральной частоты fRF. Полоса частот модема LoRa всегда относится к двойной полосе частот (double side band, DSB), как показано на рис. 8-2.

LR1121 LoRa signal bandwidth fig8 2

Рис. 8-2. Полоса частот сигнала LoRa.

Расширение полосы частот позволяет использовать повышенные эффективные скорости передачи, уменьшая время передачи ценой снижения чувствительности.

Замечание: большинство стран вводят регуляторные ограничения на допустимую полосу частот, поэтому можно использовать ограниченное подмножество вариантов BWL.

8.2.1.3. Coding Rate (CR)

Чтобы дополнительно улучшить надежность линка, модем LoRa реализует специальное кодирование (cyclic error coding) для выполнения опережающих обнаружения и коррекции возникающих ошибок (forward error detection and correction, FEC). Такое кодирование вносит в передачу дополнительную информационную нагрузку.

8.2.1.4. Low Data Rate Optimization (LDRO)

LDRO повышает надежность линка LoRa на низких скоростях данных, повышая чувствительность, устойчивость к дрейфу частоты и эффектам Доплера. Использование LDRO предписано на SF11 и SF12 на полосе частот 125kHz, и SF12 на полосе частот 250kHz.

8.2.1.5. LoRa Symbol Rate (Rs)

Зная ключевые параметры, которыми может управлять пользователь, мы определяем скорость передачи символов LoRa следующим образом:

Rs = BWL / (2SF)

Здесь BWL и SF это программируемые параметры полосы частот и spreading factor. Передаваемый сигнал является сигналом с постоянной огибающей (constant envelope signal). Эквивалентно один chip посылается в секунду на Гц полосы частот.

8.2.2. Формат пакета LoRa

Модем LoRa поддерживает 2 формата пакета: режимы явного и неявного заголовка (explicit header mode и implicit header mode). Explicit пакет содержит дополнительную информацию, которая включает короткий заголовок, содержащий информацию о количестве байт, скорости кодирования (coding rate) и используется ли CRC в пакете.

В определенных сценариях, когда фиксированы и заранее известны параметры полезной нагрузки, coding rate и наличия CRC, есть смысл уменьшить время передачи использованием режима неявного заголовка (implicit header mode). В этом режиме заголовок удаляется из пакета. В этом случае длина полезной нагрузки (payload length), скорость кодирования коррекции ошибок (error coding rate) и наличие контрольной суммы полезной нагрузки (payload CRC) должны быть одинаково сконфигурированы на обоих концах RF канала связи.

LR1121 LoRa packet format fig8 3

Рис. 8-3. LoRa Packet Format.

8.2.2.1. Preamble (преамбула)

Пакет LoRa начинается с последовательности преамбулы, используемой для синхронизации приемника с приходящим сигналом. Передаваемая преамбула может варьироваться от 1 до 65535 символов. Это позволяет передавать почти произвольно длинные последовательности преамбулы. Для оптимизации приема пакетов рекомендуется использовать минимальную длину преамбулы 12 для SF5 и SF6, и 8 для других SF.

Приемник предпринимает попытки детектирования преамбулы, которые периодически перезапускаются. По этой причине длина преамбулы в приемнике должна быть сконфигурирована идентично длине преамбулы передатчика. Если длина преамбулы неизвестна или может меняться, то на стороне приемника должна быть запрограммирована максимальная длина преамбулы.

8.2.2.2. Header (заголовок, только для explicit пакетов)

Заголовок предоставляет информацию о полезной нагрузке:

• Длина полезной нагрузки в байтах.
• Скорость кодирования опережающей коррекции ошибок (forward error correction coding rate).
• Опциональное применение 16-битной CRC для данных полезной нагрузки.

Заголовок передается с максимальным коэффициентом кодирования для восстановления ошибок (error correction code 4/8). Это также содержит собственную CRC заголовка, позволяющую отбрасывать некорректные заголовки.

8.2.2.3. Payload (полезная нагрузка)

Полезная нагрузка это поле данных переменной длины, содержащее полезные данные, закодированные со скоростью, заданной в заголовке explicit-режима, или заданной в настройках регистров при использовании implicit-режима. Опционально может быть добавлена CRC полезной нагрузки.

8.2.2.4. LoRa Packet Time On Air (время передачи пакета по радиоканалу)

Time On Air пакета LoRa показано в драйверах LR11xx.

8.2.3. Channel Activity Detection (CAD)

Детектирование активности канала CAD, используемое только в пакетах LoRa, это специальный режим LoRa, когда устройство ищет в обоих полях преамбулы и полезной нагрузки наличие сигнала преамбулы LoRa.

По окончании периода поиска устройство генерирует IRQ CADdone. Если был обнаружен корректный сигнал, то также генерируется IRQ CadDetected. Для выполнения CAD рекомендуется минимум 2 символа.

После завершения поиска устройство вернется в режим STDBY_RC. Длина поиска конфигурируется командой SetCadParams(...).

8.3. Команды LoRa

8.3.1. SetModulationParams

Команда SetModulationParams(...) конфигурирует параметры модуляции для выбранного модема. Поскольку параметры зависят от модема, то приведенное ниже описание применимо только для модема LoRa.

Таблица 8-4. Команда SetModulationParams.

Байт 0 1 2 3 4 5
От хоста 0x02 0x0F SF BWL CR LowDataRateOptimize
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0)

SF определяет spreading factor (не перечисленные ниже значения относятся к RFU). SF5 и SF6 совместимы с семейством устройств SX126x. SF6 может быть совместимым с семейством SX127x в implicit режиме через настройку регистров(1).

0x05: SF5
0x06: SF6
0x07:SF7
0x08: SF8
0x09: SF9
0x0A: SF10
0x0B: SF11
0x0C: SF12

BWL определяет полосу частот модуляции LoRa (не перечисленные ниже значения относятся к RFU):

0x03: LoRa_BW_62, полоса частот 62.5kHz
0x04: LoRa_BW_125, полоса частот 125kHz
0x05: LoRa_BW_250, полоса частот 250kHz
0x06: LoRa_BW_500, полоса частот 500kHz
0x0D: BW203 (только для диапазона 2.4GHz)
0x0E: BW406 (только для диапазона 2.4GHz)
0x0F: BW812 (только для диапазона 2.4GHz)

CR конфигурирует Coding Rate. Длинное чередование (Long Interleaver) повышает устойчивость к помехам (не перечисленные ниже значения относятся к RFU):

0x01: Short Interleaver CR = 4/5 Overhead Ratio 1.25
0x02: Short Interleaver CR = 4/6 Overhead Ratio 1.5
0x03: Short Interleaver CR = 4/7 Overhead Ratio 1.75
0x04: Short Interleaver CR = 4/8 Overhead Ratio 2
0x05: Long Interleaver CR = 4/5(2) Overhead Ratio 1.25
0x06: Long Interleaver CR = 4/6(2) Overhead Ratio 1.5
0x07: Long Interleaver CR = 4/8(2) Overhead Ratio 2

LowDataRateOptimize уменьшает количество бит на символ:

0x00: LowDataRateOptimize выключено
0x01: LowDataRateOptimize включено

Примечания:

(1) LR1121 должен установить бит 18 в 1 и бит 23 в 0 регистра по адресу 0xF20414.
(2) Long Interleaver (CR = 4/5, 4/6 и 4/8) поддерживается для пакетов с минимальной длиной полезной нагрузки 8 байт и максимальной длиной полезной нагрузки 253 байта, если CRC активирована (255 байт, если CRC деактивирована).

8.3.2. SetPacketParams

Команда SetPacketParams(...) конфигурирует параметры RF-пакета для выбранного модема. Поскольку параметры зависят от модема, то приведенное ниже описание применимо только для модема LoRa.

Таблица 8-5. Команда SetPacketParams.

Байт 0 1 2 3 4 5 6 7
От хоста 0x02 0x10 PbLengthTX(15:8) PbLengthTX(7:0) HeaderType PayloadLen CRC InvertIQ
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00 0x00

PbLengthTX определяет длину преамбулы пакета LoRa. Кодируется 2 байтами от 0x0001 (1) до 0xFFFF (65535). Рекомендуется установить минимум 12 для SF5 и SF6, и 8 для других вариантов SF.

HeaderType определяет, явный или неявный заголовок:

0x00: Explicit header (явный заголовок, по умолчанию)
0x01: Implicit header (неявный заголовок)

PayloadLen определяет размер полезной нагрузки (в байтах) для передачи, или максимальный размер полезной нагрузки, которую приемник может принять.

В режиме явного заголовка:

0: допускается прием полезной нагрузки любой длины от 0 до 255 байт.
N: допускается прием полезной нагрузки от 1 до N байт. Длины полезной нагрузки 0 или > N отбрасываются и генерируют HeaderErr IRQ.

В режиме неявного заголовка PayloadLen конфигурирует точную длину полезной нагрузки, которая передается или принимается.

CRC определяет, активна ли CRC:

0x00: OFF (CRC не используется)
0x01: ON (CRC используется)

InvertIQ определяет, инвертированы или нет сигналы I и Q.

0x00: не инвертированы.
0x01: инвертированы.

Эта команда завершится неудачей, если не был установлен тип пакета.

8.3.3. SetCad

Команда SetCad(...) активирует фичу CAD.

Таблица 8-6. Команда SetCad.

Байт 0 1
От хоста 0x02 0x18
К хосту Stat1 Stat2

8.3.4. SetCadParams

Команда SetCadParams(...) определяет параметры LoRa CAD.

Таблица 8-7. Команда SetCadParams.

Байт 0 1 2 3 4 5 6 7 8
От хоста 0x02 0x0D SymbolNum DetPeak DetMin CadExitMode Timeout(23:16) Timeout(15:8) Timeout(7:0)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00 0x00 0x00

SymbolNum определяет количество символов, используемых для детектирования CAD.

DetPeak и DetMin определят чувствительность модема LoRa, когда он пытается обнаружить корреляцию с актуальными символами преамбулы LoRa. Эти две настройки зависят от LoRa spreading factor, Bandwidth и количества символов, используемых для проверки и детектирования сигнала. Выбор правильного значения должен быть тщательно протестирован для обеспечения наилучшего детектирования для уровня чувствительности, и также для ограничения количества неправильных обнаружений сигнала.

CadExitMode определяет действие, которое выполняется после операции CAD.

Таблица 8-8. Параметр CadExitMode.

Значение CadExitMode Операция
0x00 CAD_ONLY Микросхема выполняет в LoRa операцию CAD. После этого и независимо от активности на канале устройство возвращается в STBY_RC режим.
0x01 CAD_RX Устройство выполняет операцию CAD, и если активность обнаружено, оно остается в RX до тех пор, пока не будет обнаружен пакет или таймер не достигнет тайм-аута, определенного Timeout * 31.25 мкс.
0x10 CAD_LBT Устройство выполняет операцию CAD, и если активность не обнаружена, оно переходит в режим TX с заданным параметром Timeout в качестве таймаута.

Таймаут используется только когда CAD выполняется с cadExitMode = CAD_RX или CAD_LBT.

• Если cadExitMode = CAD_RX, то см. 7.2.2. SetRx для определения таймаута.
• Если cadExitMode = CAD_LBT, то см. 7.2.3. SetTx для определения таймаута.

8.3.5. SetLoRaSynchTimeout

Команда SetLoRaSynchTimeout(...) конфигурирует модем LoRa для выдачи RX timeout после именно SymbolNum символов, если к тому времени пакет не был обнаружен.

Таблица 8-9. Команда SetLoRaSynchTimeout.

Байт 0 1 2
От хоста 0x02 0x1B SymbolNum
К хосту Stat1 Stat2 IrqStatus(31:24)

SymbolNum: 0x00 означает отсутствие таймаута (значение по умолчанию).

8.3.6. SetLoRaPublicNetwork

Команда SetLoRaPublicNetwork(...) установит синхрослово (Syncword) модема LoRa modem для публичной или частной сети.

Таблица 8-10. Команда SetLoRaPublicNetwork.

Байт 0 1 2
От хоста 0x02 0x08 PublicNetwork
К хосту Stat1 Stat2 IrqStatus(31:24)

PublicNetwork:

0x00: Private network (частная сеть, значение по умолчанию).
0x01: Public network (публичная сеть).

Другие значения RFU.

8.3.7. GetPacketStatus

Команда GetPacketStatus(...) получает статус последнего принятого пакета. Поскольку возвращенные значения зависят от установленного модема, то приведенное ниже описание применимо только для модема LoRa.

Таблица 8-11. Команда GetPacketStatus.

Байт 0 1
От хоста 0x02 0x04
К хосту Stat1 Stat2

Таблица 8-12. Ответ на команду GetPacketStatus.

Байт 0 1 2 3
От хоста 0x00 0x00 0x00 0x00
К хосту Stat1 RssiPkt SnrPkt SignalRssiPkt

RssiPkt определяет средний RSSI по последнему принятому пакету. Значение RSSI в dBm вычисляется как –RssiPkt/2.

SnrPkt это оценка SNR на последнем принятом пакете. Выражается значением в формате двоичного дополнения (two’s complement format), умноженным на 4. Фактическое SNR в dB вычисляется как SnrPkt/4. Значение SNR является несмещенным масштабированным значением.

Если деление на 4 выполняется операцией плавающей точки, то стандартное округление предоставит корректное значение. Если деление на 4 выполняется операцией с фиксированной точкой, то рекомендуется выполнить округление к ближайшему целому значению. В C-драйверах от Semtech это выполняется путем начального добавления 2, и затем выполняется деление на 4 методом сдвига:

pkt_status->snr_pkt_in_db = (((int8_t)rbuffer[1]) + 2) >> 2;

SignalRssiPkt это оценка RSSI сигнала LoRa (после despreading) последнего принятого пакета, в формате двоичного дополнения [negated, dBm, fixdt(0,8,1)]. Актуальный RSSI в dB вычисляется как -SignalRssiPkt/2.

Дополнительную информацию по RSSI можно найти в секции "8.10. Функционал RSSI".

8.4. Модем (G)FSK

8.4.1. Принцип модуляции (G)FSK

Модем (G)FSK может передавать 2-FSK модулированные пакеты со скоростями данных от 0.6kbps до 300kbps.

И скорость бит (Bitrate), и девиация частоты (Fdev) непосредственно конфигурируется командой SetModulationParams().

Дополнительно в режиме передачи к сигналу могут быть применены несколько формирующих фильтров (shaping filters) в пакетном режиме (packet mode) или непрерывном режиме (continuous mode). В режиме приема пользователю нужно выбрать самую лучшую полосу частот в зависимости от его условий. Для обеспечения корректной демодуляции должно соблюдаться следующее ограничение по полосе частот:

(2 x Fdev + BR) < BWF

Здесь полоса частот BWF в диапазоне от 4.8kHz до 467kHz.

Полоса частот должна быть выбрана так, чтобы выполнялось условие:

Полоса [DSB] >= BR + 2 x девиация_частоты + ошибка_частоты

Здесь ошибка_частоты это удвоенная ошибка по частоте используемого кварцевого резонатора.

8.4.2. (G)FSK Packet Engine

LR1121 разработан для обмена с использованием пакетов. Контроллер пакетов работает только полудуплексном режиме (half-duplex), т. е. в любой момент времени происходит либо передача, либо прием. Это конфигурируется командой SetPacketParams(...). Эта функция может быть вызвана только после определения протокола.

8.4.2.1. Прием

Блок контроллера пакета отвечает за сборку принятых потоков бит данных в пакеты и сохранение их в буфер данных. Он также выполняет операции декодирования потока бит, такие как de-whitening (операция XOR с псевдослучайной последовательностью над данными) & CRC-проверки на принятом потоке бит.

Детектирование преамбулы в режиме приема

LR1121 может отбросить пакет, если он увидел недостаточное количество чередующихся символов преамбулы (обычно это данные 0x55 или 0xAA). Параметр PblDetect в команде SetPacketParams(...) определяет длину детектора преамбулы, и позволяет пользователю выбрать диапазон от:

• Off: радиотракт не производит регулирование приема по преамбуле, и непосредственно ожидает появление Syncword, до
• 32 бит: радиотракт ожидает приема 32 бит преамбулы перед последующим Syncword. В этом случае, если 32 бита преамбулы не обнаружены, то радиотракт либо отбросит прием в режиме RxSingle, либо перезапустит свой цикл отслеживания в режиме RxContinuous.

Для достижения самой лучшей производительности рекомендуется установить PblDetect в 8 или 16 бит, в зависимости от полного размера преамбулы, передаваемой передатчиком.

Замечание: для корректного детектирования пакетов PblDetect должен быть всегда меньше, чем размер последующего за преамбулой Syncword. Если PblDetect больше, чем длина Syncword (обычно когда Syncword не используется) то пользователь должен заполнить байты Syncword значениями 0x55.

8.4.2.2. Передача

В режиме передачи обработчик пакета должен формировать и посылать поток бит в модулятор. Он может применить операцию whiten над полезной нагрузкой (XOR-наложение на данные псевдослучайной последовательности), а также добавлять контрольную сумму CRC в конец пакета.

8.4.3. Формат пакета (G)FSK

Формат пакета (G)FSK предоставляет обычный формат для приложений в проприетарном кодировании NRZ, на каналах связи низкой энергии. В формат пакета встроена проверки CRC для полезной нагрузки. Полезная нагрузка может быть динамическая, и предусматривается подтверждение пакета. Может быть разрешена фича whitening, когда на передаваемые данные накладывается псевдослучайная последовательность. Доступны два принципа формирования пакета в протоколе (G)FSK: фиксированная длина и переменная длина.

8.4.3.1. Fixed-Length Packet (пакет фиксированной длины)

Если длина пакета фиксирована и известна на обоих сторонах канала связи, то длину пакета передавать не нужно. Для этого длина пакета записывается в параметр PacketLength который определяет длину пакета в байтах:

• от 0 до 255, если фильтрация адреса не активирована.
• от 0 до 254, если фильтрация адреса активирована.

LR1121 Fixed Length Packet fig8 4

Рис. 8-4. Пакет фиксированной длины.

Обычно рекомендуется использовать минимум 16 бит для преамбулы, чтобы гарантировать корректный прием пакета. Работа CRC, длина пакета и длина преамбулы определяются командой SetPacketParams(...).

8.4.3.2. Variable-Length Packet (пакет переменной длины)

В пакете содержится поле Length, которое кодирует длину пакета в файлах.

Формат пакета переменной длины показан на рис. 8-5:

• Длина пакета может быть от 0 до 254 байт, если активирована фильтрация адреса.
• Поле Length имеет длину 1 байт, за исключением совместимости с SX128x, когда у него длина 9 бит (см. "8.4.4. Совместимость с SX128x").

LR1121 Variable Length Packet fig8 5

Рис. 8-5. Пакет переменной длины.

8.4.3.3. Установка длины пакета (Packet Length) или адреса узла (Node Address)

Длина пакета и адрес Node или Broadcast не считаются полезной нагрузкой, и автоматически добавляются аппаратурой. Длина пакета автоматически добавляется в пакет, когда поле PacketType установлено в переменный размер командой SetPacketParams(...).

Адрес узда (node address) или широковещательный адрес (broadcast address) может быть разрешен полем AddrComp в команде SetPacketParams(...). Это поле позволяет пользователю разрешить и выбрать дополнительную фильтрацию пакета на уровне полезной нагрузки.

8.4.3.4. Whitening

Операция whitening основана на 9-разрядном LFSR [4] с полиномом x9+x5+1 для диапазона sub-GHz и с полиномом x7 + x4 + 1 для HF, который генерирует "случайную" последовательность бит. С такой структурой LSB на выходе LFSR операцией XOR объединяется с MSB данных. На начальной стадии команда SetGfskWhitParams(...) установит начальное состояние регистра (whitening Seed).

Тогда вся полезная нагрузка (включая длину полезной нагрузки, адреса Node или Broadcast, а также CRC, когда она необходима) операцией XOR складывается с этой псевдослучайной последовательностью для генерации whitened полезной нагрузки.

Обратная операция восстановления данных (de-whitened) на приемнике выполняется той же самой операцией XOR на такой же псевдослучайной последовательности. Процесс Whitening ограничивает количество идущих друг за другом нулей или единиц 9 разрядами. Обратите внимание, что whitening для данных требуется только когда в пользовательских данных присутствует высокая корреляция длинных последовательностей нулей и единиц. Если данные уже имеют случайный вид, то операция whitening не требуется.

8.4.3.5. CRC

LR1121 предоставляет возможность для выбора полинома CRC и начального значения выбранного полинома. Пользователь также может выбрать полную инверсию вычисленного CRC для соответствия некоторым международным стандартам.

CRC может быть разрешена и сконфигурирована полем CrcType в команде SetPacketParams(...). Это позволяет разрешить CRC и выбрать длину и конфигурацию CRC.

Команда SetGfskCrcParams(...) конфигурирует полином CRC и начальное значение.

8.4.4. Совместимость с SX128x

Применяются следующие ограничения, когда используется 9-разрядный заголовок SX128x типа пакета PacketType 0x02:

• Payload length: длина полезной нагрузки ограничена максимум 254 - CrcLength (например 252 байта с 16-разрядной CRC).
• CRC length: 0, 1 или 2 байта.
• Syncword length: разрешены только длины синхрослова 8, 16, 24, 32 или 40 бит.
• AddrComp: эта фича должна быть запрещена (её нет в SX128x).
• DcFree фича должна быть либо запрещена (0x00), либо совместимой с SX128x (0x03). 0x01 не принимается.

Чтобы по радиоканалу LR1121 был совместим с SX128x:

• Командой SetGfskWhitParams установите whitening seed 0x0001 (значение по умолчанию SX128x).

• SetGfskCrcParams (значения по умолчанию SX128x):

   1 байт CRC: seed = 0xFF, poly = 0x07
   2 байта CRC: seed = 0xFFFF, poly = 0x1021

• Имейте в виду:

- для передаваемых кадров передается 7 дополнительных бит;
- для принимаемых кадров принимается 23 дополнительных бит (задержанное RX_DONE IRQ).

8.4.5. Специальные настройки для BRF = 0.6kbps и 1.2kbps

Необходимы дополнительные настройки радиоканала для скоростей 0.6kbps и 1.2kbps, а именно:

• BRF = 1.2kbps: запись 0 в бит 4 по адресу 0x08b8 (инструкцией read-modify-write).

• BRF = 0.6kbps: запись следующих бит (инструкцией read-modify-write):

   биты 4:3 @ 0x06D1 в 0x03
   биты 4:2 @ 0x089B в 1
   бит 4    @ 0x08B8 в 0
   бит 6    @ 0x06AC в 1
   бит 5    @ 0x06AC в 0
   бит 4    @ 0x06AC в 1

Пользователь в любой может может прочитать значения по умолчанию регистров 0x6D1, 0x89B, 0x6AC, 0x8B8, и использовать их для восстановления при необходимости. Эти регистры не восстанавливают свои значения по умолчанию командами SetPacketParams и SetModulationParams.

8.5. Команды (G)FSK

8.5.1. SetModulationParams

Команда SetModulationParams(...) конфигурирует параметры модуляции выбранного модема. Поскольку значения параметров зависят от установленного модема, то приведенное ниже описание применимо только для модема (G)FSK.

Таблица 8-13. Команда SetModulationParams.

Байт 0 1 2 3 4 5 6
От хоста 0x02 0x0F Bitrate(31:24) Bitrate(23:16) Bitrate(15:8) Bitrate(7:0) PulseShape
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00
Байт 7 8 9 10 11
От хоста BWF Fdev(31:24) Fdev(23:16) Fdev(15:8) Fdev(7:0)
К хосту 0x00 0x00 0x00 0x00 0x00

BitRate: интерпретация скорости бит (G)FSK зависит от BitRate(31). Это либо bits/s, либо 8 LSB дробной части:

BitRate(31) = 0: GFSK Bitrate в bits/s это BitRate(30:0)
BitRate(31) = 1: GFSK Bitrate в bits/s это BitRate(30:0)/256

PulseShape определяет фильтрацию, применяемую к пакету (G)FSK:

0x00: никакой фильтр не применяется
0x08: Gaussian BT 0.3
0x09: Gaussian BT 0.5
0x0A: Gaussian BT 0.7
0x0B: Gaussian BT 1
0x16: Raise Cosine BPSK BT 0.7

BWF определяет полосу частот.

Таблица 8-14. Параметр полосы частот BWF.

BWF Описание
0x1F RX_BW_4800 (4.8kHz DSB)
0x17 RX_BW_5800 (5.8kHz DSB)
0x0F RX_BW_7300 (7.3kHz DSB)
0x1E RX_BW_9700 (9.7kHz DSB)
0x16 RX_BW_11700 (11.7kHz DSB)
0x0E RX_BW_14600 (14.6kHz DSB)
0x1D RX_BW_19500 (19.5kHz DSB)
0x15 RX_BW_23400 (23.4kHz DSB)
0x0D RX_BW_29300 (29.3kHz DSB)
0x1C RX_BW_39000 (39kHz DSB)
0x14 RX_BW_46900 (46.9kHz DSB)
0x0C RX_BW_58600 (58.6kHz DSB)
0x1B RX_BW_78200 (78.2kHz DSB)
0x13 RX_BW_93800 (93.8 Hz DSB)
0x0B RX_BW_117300 (117.3kHz DSB)
0x1A RX_BW_156200 (156.2kHz DSB)
0x12 RX_BW_187200 (187.2kHz DSB)
0x0A RX_BW_234300 (234.3kHz DSB)
0x19 RX_BW_312000 (312kHz DSB)
0x11 RX_BW_373600 (373.6kHz DSB)
0x09 RX_BW_467000 (467kHz DSB)

8.5.2. SetPacketParams

Команда SetPacketParams(...) конфигурирует параметры RF пакета для выбранного модема. Поскольку значения параметров зависят от установленного модема, то приведенное ниже описание применимо только для модема (G)FSK.

Таблица 8-15. Команда SetPacketParams.

Байт 0 1 2 3 4 5
От хоста 0x02 0x10 PblLengthTX(15:8) PblLengthTX(7:0) PblDetect SyncWordLen
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0)
Байт 6 7 8 9 10
От хоста AddrComp PacketType PayloadLen CrcType DcFree
К хосту 0x00 0x00 0x00 0x00 0x00

PblLengthTX определяет длину преамбулы пакета (G)FSK в битах. Она кодируется 2 байтами, от 0x0008 (8 бит) до 0xFFFF (65535 бит).

PblDetect определяет длину детектора преамбулы. Детектор преамбулы работает как шлюз для контроллера пакета. Когда PblDetect не 0x00 (0x00 соответствует выключенному детектору преамбулы), контроллер пакета активируется только если будет успешно обнаружено определенное количество бит преамбулы.

0x00: длина детектора преамбулы выключена
0x04: длина детектора преамбулы 8 бит
0x05: длина детектора преамбулы 16 бит
0x06: длина детектора преамбулы 24 бита
0x07: длина детектора преамбулы 32 бита

SyncWordLen определяет длину синхрослова (Syncword). Синхрослово программируется командой SetGfskSyncWord(...). SyncWordLen должна быть выровнена по размеру байта. Например, в полезную нагрузку попадет до 7 бит Syncword, если SyncWordLen не выровнен по 8 битам.

AddrComp позволяет привести прием пакета к предварительно заданному адресу противоположного устройства. Адрес узла (node address) и широковещательный адрес (broadcast address) могут быть установлены командой SetPacketAdrs(...). Если сравнение адреса терпит неудачу, то прием пакета отменяется, и установится флаг adrsErr.

0x00: фильтрация адреса запрещена.
0x01: Rx и Tx: фильтрация адреса активирована на node address.
0x02: фильтрация активирована для Rx на node и broadcast адресах, для Tx на node адресе.

PacketType определяет длину приходящего пакета.

0x00: длина пакета известна на обоих сторонах, размер полезной нагрузки не добавляется в пакет.
0x01: у пакета переменный размер, PayloadLen это размер пакета (в заголовке он кодируется 8 битами).
0x02: у пакета переменный размер, PayloadLen это размер пакета - в режиме совместимости с чипом SX128x (в заголовке он кодируется 9 битами).

PayloadLen определяет полезную нагрузку (в байтах) для передачи, или максимальный размер полезной нагрузки, который может принять приемник.

В режиме explicit header:

0: разрешен прием любой полезной нагрузки длиной между 0 и 255 байт.
N: разрешен прием любой полезной нагрузки длиной между 1 и N байт. Длины полезной нагрузки 0 или > N отклоняются с генерацией HeaderErr IRQ.

В режиме implicit header поле PayloadLen конфигурирует точную длину полезной нагрузки, которая передается или принимается.

CrcType определяет CRC пакета. CRC можно полностью конфигурировать как по используемому полиному, так и начальному значению, что настраивается командой SetGfskCrcParams(...).

0x01: CRC_OFF (без CRC)
0x00: CRC_1_BYTE (CRC вычисляется в 1 байт)
0x02: CRC_2_BYTE (CRC вычисляется в 2 байта)
0x04: CRC_1_BYTE_INV (CRC вычисляется в 1 байт и инвертируется)
0x06: CRC_2_BYTE_INV (CRC вычисляется в 2 байта и инвертируется)

DcFree разрешает функцию whitening на RF пакете:

0x00: whitening-кодирование не применяется.
0x01: разрешено whitening-кодирование, совместимое с SX127x/SX126x/LR11xx.
0x03: разрешено whitening-кодирование, совместимое с SX128x.

8.5.3. SetGfskSyncWord

Команда SetGfskSyncWord(...) конфигурирует синхрослово (Syncword) пакета (G)FSK.

Таблица 8-16. Команда SetGfskSyncWord.

Байт 0 1 2 3 4 5
От хоста 0x02 0x06 Syncword(63:56) Syncword(55:48) Syncword(47:40) Syncword(39:32)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0)
Байт 6 7 8 9
От хоста Syncword(31:24) Syncword(23:16) Syncword 15:8) Syncword(7:0)
К хосту 0x00 0x00 0x00 0x00

Syncword: по умолчанию 0x9723522556536564. Только для приема, GFSK Syncword должно по размеру нацело делиться на 8 бит. Если это не так, то Syncword должно все еще быть сконфигурировано нацело делящимся на 8 бит, и Syncword должно иметь фильтр, добавленный в начало. Например, если длина Syncword была 30 бит, то длина синхрослова должна быть сконфигурирована в 32 бита, и значения "01b" или "10b" должны быть добавлены в начало Syncword.

8.5.4. SetPacketAdrs

Команда SetPacketAdrs(...) установит адрес Node или адрес Broadcast, используемый для приема/передачи пакета (G)FSK, когда фильтрация разрешена (AddrComp 0x01 или 0x02).

Таблица 8-17. Команда SetPacketAdrs.

Байт 0 1 2 3
От хоста 0x02 0x12 NodeAddr BroadcastAddr
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16)

NodeAddr: по умолчанию 0x00.

BroadcastAddr: по умолчанию 0x00.

Если сравнение адреса потерпело неудачу, то прием пакета обрывается, и установится флаг adrsErr.

8.5.5. SetGfskCrcParams

Команда SetGfskCrcParams(...) конфигурирует полином CRC и его начальное значение, так что им не надо управлять вручную.

Таблица 8-18. Команда SetGfskCrcParams.

Байт 0 1 2 3 4 5
От хоста 0x02 0x24 InitValue(31:24) InitValue(23:16) InitValue(15:8) InitValue(7:0)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0)
Байт 6 7 8 9
От хоста Poly(31:24) Poly(23:16) Poly(15:8) Poly(7:0)
К хосту 0x00 0x00 0x00 0x00

InitValue: начальное значение сконфигурированного полинома CRC (по умолчанию 0x1D0F).

Poly: полином CRC (по умолчанию Ox1021).

Для конфигурации IBM CRC нужно выбрать:

• 0xFFFF для начального значения
• 0x8005 для полинома CRC
• 0x02 (CRC_2_BYTE) для поля CrcType в команде SetPacketParams(...).

Для конфигурации CCITT CRC нужно выбрать:

• 0x1D0F для начального значения
• 0x1021 для полинома CRC
• 0x06 (CRC_2_BYTE_INV) для поля CrcType в команде SetPacketParams(...).

8.5.6. SetGfskWhitParams

Команда SetGfskWhitParams(...) устанавливает начальное значение операции whitening (Seed):

Таблица 8-19. Команда SetGfskWhitParams.

Байт 0 1 2 3
От хоста 0x02 0x25 Seed(15:8) Seed (7:0)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16)

Значение по умолчанию для Seed 0x0100.

8.5.7. GetPacketStatus

Команда GetPacketStatus(...) получает информацию по состоянию последнего принятого пакета. Поскольку возвращенные значения зависят от установленного модема, то приведенное ниже описание применимо только для модема (G)FSK.

Таблица 8-20. Команда GetPacketStatus.

Байт 0 1
От хоста 0x02 0x04
К хосту Stat1 Stat2

Таблица 8-21. Ответ на команду GetPacketStatus.

Байт 0 1 2 3 4
От хоста 0x00 0x00 0x00 0x00 0x00
К хосту Stat1 RxStatus(31:24) RxStatus(23:16) RxStatus(15:8) RxStatus(7:0)

Описание бит RxStatus:

• биты 31:24: RssiSync, значения RSSI, захваченные в момент детектирования sync-адреса. Negated, dBm, ufix(8,1).
• биты 23:16 RssiAvg, среднее RSSI по полезной нагрузке принятого пакета. Захватывается в момент генерации packet_done IRQ. Negated, dBm, ufix(8,1).
• биты 15:8 RxLen, длина (Length) принятого пакета.
• бит 7: RFU.
• бит 6: RFU.
• бит 5: Adrserr, статус фильтрации адреса текущего пакета. Установится, когда адрес принятого пакета не совпадет с node_adrs(7:0) или broadcast(7:0) в соответствии с конфигурацией adrs_comp(1:0).
• бит 4: Crcerr, статус проверки CRC текущего пакета. Применимо только в Rx, когда проверка CRC не запрещена. Пакет доступен в FIFO.
• бит 3: Lenerr, статус фильтрации длины (Length) текущего пакета. Установится, когда длина принятого пакета больше, чем Max длина, определенная полем payload_len(7:0). Применяется только на Rx для пакетов переменной длины.
• бит 2: Aborterr, статус Abort текущего пакета. Установится, когда текущий пакет оборван полем pkt_abort_p регистра. Применимо и в режиме Rx и в режиме Tx.
• бит 1: PktRcvd, статус приема пакета. Показывает, что прием пакета завершился. Показывает только то, что процесс приема завершился, но не достоверность пакета. Применимо только для Rx.
• бит 0: PktSent, статус передачи пакета. Показывает, что передача пакета завершена. Применимо только для Tx.

8.6. Модуляция LR-FHSS

LR-FHSS это frequency hopping spread spectrum modulation, метод модуляции с применением псевдослучайной перестройки рабочей частоты (ППРЧ). Несущая частота радиосигнала быстро и псевдослучайным образом переключается между разными частотами в заданном диапазоне. Передатчик и приемник знают последовательность переключения, что позволяет им синхронно "прыгать" по частотам, обеспечивая надежную передачу данных, устойчивую к помехам.

Этот вид модуляции отлично подходит для коммуникаций дальнего радиуса действия, когда в одной и той же области находятся большое количество устройств. LR-FHSS может обеспечить почти эквивалентный бюджет режиму LoRa SF12 BW125kHz, причем позволяет множеству устройств соседствовать друг с другом в одной области спектра. Реализация LR-FHSS в LR1121 поддерживает только передачу. LR1121 имеет полный контроль над следующим функционалом:

• Конструирование кадров, включая преамбулу, заголовки синхронизации (sync headers), полезную нагрузку (payload), проверку целостности (integrity check), размазывание длинной последовательности одинаковых уровней (whitening), чередование (interleaving) и кодирование для упреждающей коррекции ошибок (forward error correction).
• Вычисление последовательностей прыжков по частоте (hopping sequences).
• Обработка всего механизма прыжков по частоте.

8.6.1. Принцип модуляции LR-FHSS

LR-FHSS это модуляция с низкой скоростью передачи данных, наследующая принцип модуляции GMSK, с применением конфигурируемых последовательностей прыжков перестройки по частоте внутри пакета для каждого устройства. В настоящий момент поддерживается только скорость данных 488.28215Hz. Передача полезной нагрузки использует сверточное кодирование для реализации упреждающего обнаружения и коррекции ошибок (FEC), что подразумевает введение некоторой избыточности в передаваемые данные. В контексте распределения спектра пакет LR-FHSS делится на несколько кадров, посылаемых через псевдо-случайно распределенные частоты, разделенные конфигурируемым шагом (Grid). Общее занятие спектра пакета LR-FHSS соответствует параметру Bandwidth. Модуляция LR-FHSS представлена на рис. 8-6.

LR1121 LR FHSS Spectral Plot example fig8 6

Рис. 8-6. Спектральная диаграмма примера модуляции LR-FHSS.

Каждый кадр полезной нагрузки (Payload frame), кроме последнего, содержит ровно 50 закодированных бит, и их длительность одинакова по времени. Последний кадр может содержать меньше 50 бит. Таким образом, количество кадров меняется с изменением полезной нагрузки и скорости кодирования (Coding Rate).

Кадры полезной нагрузки предваряются одним - четырьмя последовательностями синхронизации (Headers), чтобы обеспечить надежную синхронизацию по частоте и времени. Даже если прием одного Header достаточен для декодирования полезной нагрузки, как минимум 2 Header улучшают устойчивость против радиопомех. Если используется несколько header, то они посылаются на разных частотах. Каждый header содержит ровно 114 закодированных бит, и таким образом их длительность одинакова по времени.

Дополнительная информация представлена в апноутах AN1200.58 Long Range FHSS Demo и AN1200.64 Long Range FHSS System Performance.

8.7. Команды LR-FHSS

8.7.1. SetModulationParams

Комада SetModulationParams(...) конфигурирует параметры модуляции для выбранного модема. Поскольку параметры зависят от установленного модема, то приведенное ниже описание применимо только для модуляции LR-FHSS.

Таблица 8-22. Команда SetModulationParams.

Байт 0 1 2 3 4 5 6
От хоста 0x02 0x0F BitRate(31:24) BitRate(23:16) BitRate(15:8) BitRate (7:0) PulseShape
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0

BitRate определяет скорость бит LR-FHSS в битах на секунду. Значение скорости в bits/s определяется как Bitrate(30:0)/256, где Bitrate(31) = 1. Например, скорость 488.28215Hz будет кодироваться Bitrate = 125000 с Bitrate(31) = 1.

В текущей реализации поддерживается только LR-FHSS на скорости 488.28215 Гц, другие значения RFU.

PulseShape определяет фильтрацию, применяемую для пакета LR-FHSS:

0x0B: Gaussian BT 1. Другие значения RFU.

8.7.2. LrFhssBuildFrame

Команда LrFhssBuildFrame(...) кодирует заданную полезную нагрузку и конфигурирует внутреннюю таблицу перескоков по частотам (hopping table).

Таблица 8-23. Команда LrFhssBuildFrame.

Байт 0 1 2 3 4 5 6
От хоста 0x02 0x2C HeaderCount CR ModType Grid Hopping
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00
Байт 7 8 9 10 11 12 ... ...
От хоста BW HopSequence(8) HopSequence(7:0) DeviceOffset Payload[0] Payload[1] ... Payload[N]
К хосту 0x00 0x00 0x00 0x00 0x00 0x00 ... 0x00

HeaderCount: количество заголовков (Headers) для пакета LR-FHSS packet: 1, 2, 3 или 4.

CR: конфигурирует Coding Rate:

0x00: CR = 5/6
0x01: CR = 2/3
0x02: CR = 1/2
0x03: CR = 1/3

ModType: 0 = модуляция GMSK, скорость данных 488.28125bps.

Grid: размер шага прыжков по частотам:

0x00: 25.390625kHz для случая использования FCC.
0x01: 3.90625kHz для случая, не относящегося к FCC.

Hopping: конфигурирует наличие перестроек по частоте внутри пакета (intra-packet hopping):

0x00: без перестроек, no hopping (для целей тестирования)
0x01: перестройка между кадрами разрешена (hopping)

BW: полоса частот, занимаемая шаблоном перестроек по частоте:

0x00: 39.06kHz
0x01: 85.94kHz
0x02: 136.72kHz
0x03: 183.59kHz
0x04: 335.94kHz
0x05: 386.72kHz
0x06: 722.66kHz
0x07: 773.44kHz
0x08: 1523.4kHz
0x09: 1574.2kHz

Другие значения RFU.

HopSequence: 9-битное целое число, начальное значение (seed) для псевдослучайных перестроек по частоте:

Значение в диапазоне [0; 383] для Grid = 0x00, BW в {0x06, 0x07, 0x08, 0x09}
Значение в диапазоне [0; 383] для Grid = 0x01, BW в {0x00, 0x01, 0x02, 0x03}
Значение в диапазоне [0; 511] для Grid = 0x01, BW в {0x04, 0x05, 0x06, 0x07, 0x08, 0x09}

DeviceOffset: смещение частоты на устройстве для уменьшения риска коллизии пакетов. Смещение частоты (Гц) = DeviceOffset * 488.28125Hz:

Значение со знаком в диапазоне [-26; 25] для Grid = 25.390625kHz
Значение со знаком в диапазоне [-4; 3] для Grid = 3.90625kHz

Для случая использования FCC параметр DeviceOffset не должен меняться, будучи сконфигурированным.

Payload: фактически кодируемая полезная нагрузка. Возвратит CMD_OK, если параметры правильные, и если полезную нагрузку можно закодировать, иначе CMD_PERR.

Максимальный поддерживаемый размер пакета составляет 255 кодируемых байт. Максимальная длина полезной нагрузки пользователя приведена в таблице 8-24.

Таблица 8-24. Максимальная полезная нагрузка пользователя (в байтах).

CR HeaderCount = 1 HeaderCount = 2 HeaderCount = 3 HeaderCount = 4
CR = 5/6 189 178 167 155
CR = 2/3 151 142 133 123
CR = 1/2 112 105 99 92
CR = 1/3 74 69 65 60

Случай использования FCC соответствует BW = 0x08/0x09, Hopping = 0x01, Grid = 0x00.

Замечание: эта команда не посылает пакет LR-FHSS. Передача срабатывает по команде SetTx(...).

8.7.3. LrFhssSetSyncWord

Команда LrFhssSetSyncWord(...) установит синхрослово LR-FHSS Syncword.

Таблица 8-25. Команда LrFhssSetSyncWord.

Байт 0 1 2 3 4 5
От хоста 0x02 0x2D Syncword[0] Syncword[1] Syncword[2] Syncword[3]
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0)

Syncword: синхрослово LR-FHSS. Значение по умолчанию {0x2C, 0x0F, 0x79, 0x95}.

8.7.4. Конфигурация устройства для Long Range FHSS Transmission

После включения питания (установка батареи или аппаратного сброса) LR1121 автоматически запустит процедуру калибровки и перейдет в режим STDBY_RC. Это покажет лог. 0 на выводе BUSY.

Из STDBY_RC необходимая последовательность операций для перехода в режим передачи Long Range FHSS следующая:

1. Если устройство не находится в режиме STDBY_RC, то установите схему в этот режим командой SetStandby(...).
2. Установите базовые команды конфигурации, такие как RF switch, конфигурация PA, OCP, TxParams, RfFrequency...
3. Определите модуляцию (LR-FHSS) командой SetPacketType(...).
4. Установите параметры модуляции (командой SetModulationParams(...)) с правильным значением Bit Rate (488.28125 bps), и правильным Pulse Shape.
5. Вызовите команду LrFhssBuildFrame(...).
6. Активируйте IRQ: TxDone.
7. Установите схему в режим передатчика для запуска передачи командой SetTx(...).
8. Ожидайте прерывания TxDone.

Если это сконфигурировано, то генерируется LrFhssHop IRQ на каждом перескоке частоты внутри пакета LR-FHSS, после каждого включения усилителя мощности (PA ramp-up).

8.8. Модуляция Sigfox

LR1121 может передавать Sigfox-пакеты на скоростях как 100, так и 600bps. Это позволяет поддерживать все варианты конфигураций (Sigfox Radio Configurations) от RC1 до RC7. LR1121 также может принимать Sigfox downlinks на 600bps в выбранной Sigfox Radio Configuration. Обратитесь к представительству Semtech за дополнительной информацией.

Внутри LR1121 нет встроенной реализации стека протоколов Sigfox. Пользоватлеь должен сам конфигурировать и передавать пакеты Sigfox в соответствии с порядком команд, обозначенном на рис. 8-1 "Последовательность команд настройки модема".

Поскольку команды SetModulationParams(...) и SetPacketParams(...) специфичны для выбранного модема, здесь приведено описание этих команд в контексте поддержки протокола Sigfox.

8.8.1. SetModulationParams

Команда SetModulationParams(...) конфигурирует параметры модуляции для выбранного модема. Поскольку параметры зависят от модема, последующее описание применимо только для модуляции Sigfox.

Таблица 8-26. Команда SetModulationParams.

Байт 0 1 2 3 4 5 6
От хоста 0x02 0x0F BitRate(31:24) BitRate(23:16) BitRate(15:8) BitRate(7:0) PulseShape
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00

BitRate: см. секцию 8.5.1. Поддерживаются только скорости 100bps (RC1/RC3/RC5/RC6 и RC7) и 600bps (RC2 и RC4).

PulseShape: см. описание в секции 8.5.1. Поддерживается только BT 0.7 (0x16).

8.8.2. SetPacketParams

Команда SetPacketParams(...) конфигурирует параметры RF пакета для выбранного модема. Поскольку параметры зависят от модема, последующее описание применимо только для модуляции Sigfox.

Таблица 8-27. Команда SetPacketParams.

Байт 0 1 2 3 4 5
От хоста 0x02 0x10 Payloadlen RampUpDelay(15:8) RampUpDelay(7:0) RampDownDelay(15:8)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0)
Байт 6 7 8
От хоста RampDownDelay(7:0) BitNum(15:8) BitNum(7:0)
К хосту 0x00 0x00 0x00

PayloadLen: длина полезной нагрузки в байтах. Для конфигурирования контроллера пакета.

RampUpDelay: задержка в мкс, для точной настройки времени включения (ramp up time).

RampDownDelay: задержка в мкс, для точной настройки времени выключения (ramp down time).

BitNum: в битах. Используетяс для выключения (ramp down) PA перед окончанием длины полезной нагрузки в случае, когда реальная длина не делится нацело на 8.

8.9. Data Buffer

LR1121 оборудован двумя буферами данных по 255 байт RAM, которые доступны во всех режимах, кроме sleep mode. Один буфер хранит принятые данные полезной нагрузки, в то время как другой содержит данные полезной нагрузки для передачи. LR1121 автоматически управляет указателями на данные, т. е. нет необходимости ручного управления базовыми адресами буфера со стороны пользователя.

Data Buffer в Receive Mode. Принятая полезная нагрузка сохраняется в RX buffer:

• Она может быть прочитана командой ReadBuffer8(...) (см. команду 3.7.5. ReadBuffer8).• GetRxbufferStatus(...) читает
указатель на первый байт последнего принятого пакета и его длину (см. команрду 7.2.11. GetRxBufferStatus).
• ClearRxBuffer(...) очистит все данные в LR1121 RX buffer (см. команду 3.7.6 ClearRxBuffer).

Data Buffer в Transmit Mode. Данные полезной нагрузки для передачи должны быть записаны в Tx Buffer с помощью команды WriteBuffer8(...) (см. описание 3.7.4. WriteBuffer8).

8.10. Функционал RSSI

Информация RSSI LR1121 доступа либо в цепи радиотракта, либо после демодуляции на конце стадии приема. Суммарно информация RSSI и её общий смысл приведен в таблице 8-28:

Таблица 8-28. Происхождение информации уровня сигнала (RSSI Information Origin) и её смысл.

Команда Модем Имя Описание
GetRssiInst(...) Все RssiInst Мгновенный RSSI
GetPacketStatus(...) (G)FSK RssiSync Мгновенное значение RSSI, зафиксированное в (G)FSK демодуляторе, при обнаружении адреса синхронизации
RssiAvg Среднее значение RSSI по всей полезной нагрузке принятого пакета, определенное в (G)FSK демодуляторе.
LoRa® RssiPkt Измерение средней энергии на входе модема за последний полученный пакет.
SignalRssiPkt Оценка средней энергии сигнала LoRa за последний принятый пакет. Эквивалент RssiPkt - шум окружающей среды.

См. описание каждой команды для деталей реализации на различных полях RSSI.

Информация RSSI имеет время распространения в цифровых цепях приемника. Как показано ниже на рис. 8-7, самое большое время обычно необходимо для первого доступного значения RSSI (Twait), в отличие от последующих выборок RSSI (Trssi).

LR1121 RSSI Propagation Time fig8 7

Рис. 8-7. Время распространения RSSI.

Для GFSK значения Twait и Trssi зависят от выбранной полосы частот, как показано в таблице 8-29:

Таблица 8-29. Значения Twait и Trssi для разных GFSK Bandwidth.

BWF, кГц Twait, мкс Trssi, мкс
467 30.68 2.00
373.6 37.78 2.50
312 44.89 3.00
234.3 54.61 4.00
187.2 67.69 5.00
156.2 80.76 6.00
117.3 102.30 8.00
93.8 127.28 10.00
78.2 152.26 12.00
58.6 197.61 16.00
46.9 246.41 20.00
39 295.20 24.00
29.3 388.18 32.00
23.4 484.59 40.00
19.5 581.01 48.00
14.6 769.24 64.00
11.7 960.91 80.00
9.7 1152.58 96.00
7.3 1531.30 128.00
5.8 1913.47 160.00
4.8 2295.64 192.00

Для модуляции LoRa значения Twait и Rssi идентичны, и равны времени символа протокола (LoRa Symbol time).

[9. Power Amplifiers]

В LR1121 встроено 2 усилителя мощности передатчика (power amplifiers, PA) для sub-GHz диапазона, и один для диапазона HF (2.4GHz):

• high power PA (HP PA), оптимизированный для работы +22dBm.
• low power PA (LP PA), оптимизированный для работы +14dBm, который может выдавать до +15dBm выходной мощности.
• high frequency PA (HF PA), оптимизированный для работы +13dBm в диапазоне частот 2.4GHz.

LR1121 Power Amplifiers block diagram fig9 1

Рис. 9-1. Усилители PA на блок-схеме LR1121.

PA конфигурируются двумя командами: SetPaConfig(...) и SetTxParams(...).

Команда SetPaConfig(...) используется для:

• Выбора используемого PA (HP, LP или HF).
• Выбора питания PA (VBAT или VREG).
• Выбора скважности рабочего цикла любого PA.
• Выбора размера PA (применимо только к high power PA).

Команда SetTxParams(...) используется для:

• Управления напряжением питания PA (VR_PA) и выходной мощностью.
• Выбора времени выхода на мощность (ramp time) при старте/остановке TX.

Пользователь должен сконфигурировать PA на нужную выходую мощность и потребление тока в соответствии с требованиями приложения. При выборе PA нет автоматического ограничения на частоту: выбор частоты должен производиться в соответствии с возможностями, предоставленными аппаратными цепями согласования на основе внешних компонентов, через которые подключается антенна.

Схема питания PA показана на рис. 9-2.

LR1121 PA Supply Scheme fig9 2

Рис. 9-2. PA Supply Scheme.

Регулятор питания PA (Reg_PA) предоставляет ток для high power PA (HP PA), low power PA (LP PA) и high-frequency PA (HF PA) через вывод VR_PA pin. Оба усилителя, HP PA и the LP PA требуют high-Q choke индуктивностей, подключенных снаружи между соответствующими выходами и выводом VR_PA. Через эти индуктивности предоставляется питание PA и управление выходной мощностью. Для HF PA такая индуктивность не нужна. Лучшей практикой будет подключить резистор 200 Ом параллельно HP PA choke-индуктивности, как показано на рис. 9-2.

Регулятор PA внутренне подключен к выходу DC-DC/LDO для питания low power PA и high frequency PA, позволяя достичь выходной мощности +15dBm и +13dBm для обоих конфигураций - DCDC или LDO. Для high power PA это подключается к выводу VBAT_RF, т. е. к основному напряжению питания. Это означает, что максимальная генерируемая выходная мощность PA зависит от напряжения VBAT.

Основное питание TX может переключаться между батареей VBAT и внутренним регулятором VREG, в соответствии с вариантом использования PA. Когда происходит работа при напряжении VR_PA свыше 1.35V (например в случае высокой мощности, high power), должно быь выбрано питание от VBAT. Когда происходит работа при напряжении VR_PA ниже 1.35V (например в случае низкой мощности, low power PA), можно выбрать любой вариант питания. Однако лучше выбрать внутренний регулятор VREG каждый раз, когда требуется VR_PA 1.35V или ниже, чтобы получить преимущества эффективного использования питания на основе понижающего импульсного преобразователя DC-DC.

LR1121 включает в себя точный триммер рабочего цикла (precise duty cycle trimmer), совместно используемый между тремя усилителями мощности. Этот триммер может использоваться при согласовании выходной мощности, эффективности и гармонического излучения для удовлетворения различных требований региональных стандартов. Триммер рабочего цикла зависит от импеданса, представленного PA, и таким образом, может варьироваться для разных вариантов дизайна PCB.

9.1.1. Low Power PA

Для максимальной эффективности low power PA должен работать с максимальным VR_PA, близким к 1.35V. Чтобы получить VR_PA = 1.35V, пользователь должен установить TxPower = 14. На этой настройке:

• PA может выдавать до 15dBm выходной мощности, постоянной для всего заданного диапазона напряжений батареи.
• Реальная выходная мощность может быть установлена в соответствии с настройкой цикла скважности (PaDutyCycle).
• Если необходимо, то выходная мощность может декрементироваться шагами 1dB от максимума, если использовать TxPower < 14.

Изменение VR_PA по запрограммированному значению TxPower для различных напряжений питания и циклов скважности PaDutyCycle показано на рис. 9-3 (при допустимых значениях источников питания VBAT и VREG, в обоих конфигурациях LDO или DCDC).

LR1121 Low Power PA VR PA voltage vs TxPower fig9 3

Рис. 9-3. Зависимость напряжения VR_PA для питания Low Power PA и настройки TxPower.

9.1.2. High Power PA

Для максимальной эффективности high power PA должен работать с максимальным напряжением VR_PA около 3.1V. Чтобы получить VR_PA = 3.1V, пользователь должен установить TxPower = 22. На этой настройке:

• PA может выдавать выходную мощность до 22dBm. Выходная мощность в этом случае меняется в зависимости от напряжения батареи, когда её заряд снижается до напряжения ниже 3.3V.
• Фактическая максимальная выходная мощность может быть установлена в соответствии с PaDutyCycle и PaHpSel.
• Если необходимо, то выходная мощность может декрементироваться шагами 1dB от максимума, если использовать TxPower < 22.

Изменение VR_PA по запрограммированному значению TxPower для различных напряжений питания и циклов скважности PaDutyCycle показано на рис. 9-4.

LR1121 High Power PA VR PA voltage vs TxPower fig9 4

Рис. 9-4. Зависимость напряжения VR_PA для питания Low Power PA и настройки TxPower.

9.2. PA Output Power

Как утверждалось выше, два параметра оказывают влияние на генерируемую выходную мощность передачи TX для каждого PA: программируемая мощность TxPower и цикл скважности PaDutyCycle. Третий параметр PaHPSel управляет размером high power PA, и поэтому оказывает непосредственное влияние на выходную мощность high power PA.

Чтобы достичь выходной мощности +22dBm, PaHPSel должен быть установлен в 7. PaHPSel не влияет ни на low power PA, ни на high frequency PA.

9.2.1. Low Power PA

Рис. 9-5 показывает выходную мощность low power PA в зависимости от TxPower для различных настроек PaDutyCycle при всех напряжениях питания.

Напряжение питания не влияет на выходную мощность, поскольку low power PA имеет внутреннюю регулировку. На выходную мощность оказывает влияние только PaDutyCycle. Поэтому графики 1.8V, 3.3V и 3.7V накладываются друг на друга, так что виден только график для 3.7V.

LR1121 Low Power PA Output Power vs TxPower fig9 5

Рис. 9-5. Зависимость выходной мощности Low Power PA от TxPower.

Например:

• TxPower = 14 и PaDutyCycle = 0 дает +10dBm при любом напряжении питания (1.8V, 3.3V и 3.7V).
• TxPower = 14 и PaDutyCycle = 4 дает +14dBm при любом напряжении питания (1.8V, 3.3V и 3.7V).
• TxPower = 14 и PaDutyCycle = 7 дает +15dBm при любом напряжении питания (1.8V, 3.3V и 3.7V).

9.2.2. High Power PA

На рис. 9-6 показана зависимость выходной мощности high power PA от настроек TxPower для различных установок PaDutyCycle по всем вариантам напряжений питания.

Для определенного PaDutyCycle выходная мощность high power PA поддерживается на определенном диапазоне уровней напряжений, и затем уменьшается при пониженном VBAT.

Например:

• Для настройки +22dBm выходной мощности, требуется VR_PA ~3.1V (см. рис. 9-4 выше). Таким образом при падении напряжения 200mV на регуляторе PA выходная мощность +22dBm может быть получена только для диапазона напряжений от 3.3V до 3.7V.
• Для +17dBm требуется VR_PA около 2V. Таким образом, выходная мощность LR1121 упадет до +17dBm для минимального напряжения питания 1.8V.

Поэтому графики 3.3V и 3.7V накладываются друг на друга при заданном PaDutyCycle, и виден только график для 3.7V.

LR1121 HP PA Output Power vs TxPower fig9 6

Рис. 9-6. Зависимость выходной мощности HP PA от TxPower.

9.2.3. High Frequency PA

На рис. 9-7 показана зависимость выходной мощности High Frequency PA от TxPower при разных значениях напряжения питания.

Напряжение питания не влияет на выходную мощность, поскольку HF PA имеет внутреннюю регулировку. Поэтому графики для 1.8V, 3.3V и накладываются друг на друга, и виден только график 3.7V.

LR1121 High Frequency PA Output Power vs TxPower fig9 7

Рис. 9-7. Зависимость выходной мощности High Frequency PA от TxPower.

9.3. Потребление тока PA

9.3.1. Low Power PA

На рис. 9-8 показано влияние на ток потребления напряжения питания для трех вариантов настроек PaDutyCycle (0, 4 и 7) в конфигурации DC-DC.

На заданном напряжении питания большее значение настройки PaDutyCycle приводит к большему току потребления. На заданной настройке PaDutyCycle потребление тока оптимально для напряжения питания равного или больше 3.3V, поэтому графики для 3.3V и 3.7V накладываются друг на друга. Источник питания 1.8V на настолько эффективен, как источник напряжением 3.3V или больше, что приводит к повышенному потреблению тока от 1.8V.

Например:

• Для 3.7V настройка PaDutyCycle = 0 дает потребление тока приблизительно 28mA, для PaDutyCycle = 4 приблизительно 47mA, и для PaDutyCycle = 7 приблизительно 62mA.
• Для PaDutyCycle = 4 потребление тока приблизительно 47mA для 3.3V и 3.7V, и приблизительно 49mA для 1.8V.

LR1121 IDDTX vs TxPower Low Power PA DC DC fig9 8

Рис. 9-8. Зависимость IDDTX от TxPower, Low Power PA, конфигурация DC-DC.

На рис. 9-9 показано влияние напряжения питания на потребление тока для трех вариантов настройки PaDutyCycle (0, 4 и 7) в конфигурации LDO.

LR1121 IDDTX vs TxPower Low Power PA LDO fig9 9

Рис. 9-9. Зависимость IDDTX от TxPower, Low Power PA, конфигурация LDO.

Подобно конфигурации DC-DC мы здесь видим, что для заданного напряжения питания повышенная настройка PaDutyCycle приводит к повышению потребления тока. Однако напряжение питания не влияет на потребление тока на заданной установке PaDutyCycle, в результате графики 1.8V, 3.3V и 3.7V накладываются друг на друга.

Рис. 9-8 и рис. 9-9 показывают, что эффективность по мощности low power PA максимальна, когда используется внутренний регулятор DC-DC на напряжении питания 3.3V или выше.

9.3.2. High Power PA

Рис. 9-10 и рис 9-11 показывают влияние напряжения питания на ток потребления для двух вариантов настройки PaDutyCycle (2 and 4) в обоих конфигурациях DC-DC и LDO.

Подобно low power PA, на определенном напряжении питания повышенное значение настройки PaDutyCycle повышает потребление тока устройством. Однако для заданной настройки PaDutyCycle потребление тока стабильно по отношению к напряжению питания при условии, что напряжение питания достаточно высокое, чтобы обеспечить генерацию напряжения VR_PA, требуемого для запрограммированного значения мощности TxPower.

Например:

• Для 3.3V ток потребления приблизительно 98mA для PaDutyCycle = 2, и приблизительно 118mA для PaDutyCycle = 4.
• Для 1.8V ток потребления приблизительно 69mA для PaDutyCycle = 2, и приблизительно 81mA для PaDutyCycle = 4. Это связано с тем, что при напряжении питания 1.8V максимальное значение напряжения VR_PA составляет 1.6V, поэтому максимальная выходная мощность +17dBm.

Во время работы high power PA, регулятор DC-DC питает аналоговое и цифровое ядра устройств, в то время как сам PA - как самый большой потребитель мощности - питается напрямую от VBAT. Таким образом, нет значительных различий в потреблении тока между режимами DC-DC или LDO при работе high power PA.

LR1121 IDDTX vs TxPower High Power PA DC DC fig9 10

Рис. 9-10. Зависимость IDDTX от TxPower, High Power PA, конфигурация DC-DC.

LR1121 IDDTX vs TxPower High Power PA LDO fig9 11

Рис. 9-11. Зависимость IDDTX от TxPower, High Power PA, конфигурация LDO.

9.3.3. High Frequency PA

Рис. 9-12 показывает влияние настройки TxPower на ток потребления для трех напряжений питания в конфигурации DC-DC.

Потребление тока оптимально для напряжения питания 3.3V или выше, так что графики для 3.3V и 3.7V накладываются друг на друга. Напряжение питания 1.8V не настолько эффективно по энергопотреблению, как напряжение 3.3V или выше, что приводит к повышенному потреблению тока при питании от 1.8V.

LR1121 IDDTX vs TxPower High Frequency PA DC DC fig9 12

Рис. 9-12. Зависимость IDDTX от TxPower, High Frequency PA, конфигурация DC-DC.

Рис. 9-13 показывает влияние настройки TxPower на ток потребления для трех напряжений питания в конфигурации LDO.

Напряжение питания не влияет на потребление тока, и так что графики для 1.8V, 3.3V и 3.7V накладываются друг на друга.

LR1121 IDDTX vs TxPower High Frequency PA LDO fig9 13

Рис. 9-13. Зависимость IDDTX от TxPower, High Frequency PA, конфигурация LDO.

Рис. 9-12 и рис. 9-13 показывают, что эффективность по мощности High Frequency PA максимальна, когда используется внутренний регулятор DC-DC при напряжении питания 3.3V или выше.

9.4. Цепочки согласования импеданса

High power PA и low power PA работают на выходных выводах RFO_HP_LF и RFO_LP_LF соответственно. Они подключены к антенне через отдельные цепи согласования сопротивлений, целью которых является предоставление оптимизированной нагрузки на выходных контактах корпуса, когда на уровне антенны волновое сопротивление нагрузки 50 Ом.

High Frequency PA работает на выходной вывод RFIO-HF. Он внутренне согласован для 50 Ом, чем снижается необходимость во внешних компонентах при работе HF. Некоторые компоненты, присутствующие на выводе RFIO_HF в образцовом дизайне Semtech, предназначены для обеспечения фильтрации в соответствии с нормами регуляторов RF.

9.4.1. Работа в нескольких диапазонах

Можно реализовать многодиапазонную конфигурацию на одиночной цепи согласования, при этом доступно применение одинакового набора SMD компонентов для обеспечения нескольких sub-GHz ISM диапазонов. Таблицы ниже показывают оптимальные настройки для PA, когда используется цепь согласования эталонного дизайна Semtech. Пользователь может точно подстроить PaDutyCycle и PaHpSel в соответствии с его требованиями к цепи согласования, эффективности, выходной мощности и уровню излучения гармоник. Обратите внимание, что эффект влияния настроек PaDutyCycle и PaHpSel на эффективность, выходную мощность, излучение гармоник зависит от дизайна PCB, так что настройки PA, показанные в таблице 9-1 и таблице 9-2, должны быть оптимизированы на приложении пользователя.

Реализация цепи согласования антенны, предложенная Semtech, оптимизирована для +22dBm и +15dBm верхних диапазонов ISM, т. е. при работе на частотах 868-928MHz.

Таблица 9-1. Оптимизированные настройки для LP PA с одинаковой цепью согласования.

Целевая мощность TxPower PaSel RegPASupply PaDutyCycle PaHPSel
+15dBm 14 0 0 7 -
+14dBm 14 0 0 5 -
+10dBm 14 0 0 1 -

Таблица 9-2. Оптимизированные настройки для HP PA с одинаковой цепью согласования.

Целевая мощность TxPower PaSel RegPASupply PaDutyCycle PaHPSel
+22dBm 22 1 1 4 7
+20dBm 22 1 1 3 7
+17dBm 22 1 1 1 5
+14dBm 22 1 1 1 3

Таблица 9-3. Оптимизированные настройки для HF PA с одинаковой цепью согласования.

Целевая мощность TxPower PaSel RegPASupply PaDutyCycle PaHPSel
+13dBm 13 2 0 0 0
+11dBm 12 2 0 3 0
+10dBm 11 2 0 4 0

9.4.2. Реализация ключа RF

Примеры реализаций, показанные ниже, объединяют функционирование high power PA и high efficiency PA, при использовании 3-портового RF-ключа SP3T (одно направление три положения). Также возможна работа в одном диапазоне, тогда не используемый вывод PA остается неподключенным. В последнем случае понадобится 2-портовый RF-ключ SPDT (одно направление два положения).

Реализация RF switch оптимизирует импеданс, представленный для PA, и отдельно импеданс, представленный для LNA. Таким образом можно оптимизировать эффективность TX без влияния на чувствительность RX.

RF switch может управляться либо контроллером хоста, либо самим LR1121 (выводами DIO5, DIO6, DIO7, DIO8 and DIO10) с помощью команды SetDioAsRfSwitch(...).

LR1121 RF Switch Double PA Operation fig9 14

Рис. 9-14. RF Switch, работа двух PA.

LR1121 RF Switch Single PA Operation High Power PA example fig9 15

Рис. 9-15. RF Switch, работа одного PA (пример High Power PA).

9.4.3. Реализация с прямым подключением

В случае недорогого приложения можно избавиться от RF-ключа, и применить так называемую реализацию прямого подключения (direct-tie).

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

LR1121 Single Tie Implementation Only One PA Used High Power PA example fig9 16

Рис. 9-16. Реализация Single Tie: используется только один PA (пример High Power PA).

LR1121 Single Tie Implementation Both PAs Used High Power PA example fig9 17

Рис. 9-17. Реализация Single Tie: используются оба PA (пример High Power PA).

Если сравнивать с реализацией на основе ключа, direct-tie это компромиссное решение между эффективностью TX и чувствительностью RX, т. е. ни то, ни другое не реализовано максимально эффективно. Это неизбежно, поскольку передатчик и приемник требуют разные оптимальные импедансы, достичь которые одновременно не представляется возможным. В случае direct-tie ожидается деградация 2 ~ 3dB для чувствительности RX.

9.5. Команды

9.5.1. SetPaConfig

Команда SetPaConfig(...) выберет, какой PA используется, и конфигурирует питание этого PA.

Таблица 9-4. Команда SetPaConfig.

Байт 0 1 2 3 4 5
От хоста 0x02 0x15 PaSel RegPaSupply PaDutyCycle PaHPSel
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0)

PaSel выбирает PA:

0x00: low power PA
0x01: high power PA
0x02: high frequency PA

RegPaSupply выбирает источник питания PA:

0x00: PA питается от внутреннего регулятора.
0x01: PA питается от VBAT. Пользователь должен использовать RegPaSupply = 0x01 всякий раз, когда TxPower > 14.

PaDutyCycle управляет циклом скважности каждого PA. Значение этого параметра по умолчанию 0x04.

Таблица 9-5. Допустимые диапазоны параметра PaDutyCycle.

Low Power PA High Power PA High Frequency PA
Для частоты ≥ 400MHz, 0 ≤ PaDutyCycle ≤ 0x07 При PaHpSel ≥ 0x05, 0 ≤ PaDutyCycle ≤ 0x04 0 ≤ PaDutyCycle ≤ 0x04
Для частоты < 400MHz, 0 ≤ PaDutyCycle ≤ 0x04 При PaHpSel ≤ 0x04, 0 ≤ PaDutyCycle ≤ 0x07

PaHPSel управляет размером high power PA.

9.5.2. SetTxParams

Команда SetTxParams(...) установит Tx Power и Ramp Time выбранного PA. Команда SetPaConfig(...) должна быть отправлена перед этой командой.

Таблица 9-6. Команда SetTxParams.

Байт 0 1 2 3
От хоста 0x02 0x11 TxPower RampTime
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16)

TxPower определяет выходную мощность dBm в диапазоне:

• От -17dBm (0xEF) до +14dBm (0x0E) с шагом 1dB, если выбран low power PA.
• От -9dBm (0xF7) до +22dBm (0x16) с шагом 1dB, если выбран high power PA.
• От -18dBm (0xEE) до +13dBm (0x0F) с шагом 1dB, если выбран high frequency PA.
• Если TxPower > +14dBm, то пользователь должен выбрать источник питания VBAT для PA с помощью команды SetPaConfig.

RampTime определяет время нарастания выходной мощности (PA power ramping time), которое может быть от 16 до 304 мкс в соответствии со следующей таблицей:

Таблица 9-7. Значения RampTime.

RampTime Значение Ramp Time в мкс
SET_RAMP_16U 0x00 16
SET_RAMP_32U 0x01 32
SET_RAMP_48U 0x02 48
SET_RAMP_64U 0x03 64
SET_RAMP_80U 0x04 80
SET_RAMP_96U 0x05 96
SET_RAMP_112U 0x06 112
SET_RAMP_128U 0x07 128
SET_RAMP_144U 0x08 144
SET_RAMP_160U 0x09 160
SET_RAMP_176U 0x0A 176
SET_RAMP_192U 0x0B 192
SET_RAMP_208U 0x0C 208
SET_RAMP_240U 0x0D 240
SET_RAMP_272U 0x0E 272
SET_RAMP_304U 0x0F 304

RampTime 48 мкс дает лучший компромисс между быстрой установкой мощности RF и минимумом излучения побочных помех RF, удовлетворяя стандартам радио. 10 мкс ramp time не удовлетворяет регуляторным требованиям Австралии или Новой Зеландии.

[10. Буфер данных]

Трансивер оборудован 256-байтным буфером данных RAM, который доступен во всех режимах, кроме sleep mode. Эта область RAM полностью настраивается пользователем и позволяет получить доступ либо данным для передачи, либо к данным последнего принятого пакета.

LR1121 Data buffer operation fig10 1

Рис. 10-1. Работа буфера данных.

Буфер данных может быть сконфигурирован для хранения как передаваемой, так и принимаемой полезной нагрузки.

10.1. Буфер данных в режиме приема

В режиме приема RxBaseAddr указывает смещение буфера в памяти, куда записываются данные полезной нагрузки принятого пакета. Смещение буфера последнего байта, записанного в режиме приема, затем сохраняется в RxDataPointer, который инициализируется значением RxBaseAddr в начале приема.

Указатель на первый байт последнего принятого пакета и длину пакета можно прочитать командой GetRxbufferStatus.

В одиночном режиме (single mode) указатель RxDataPointer автоматически инициализируется в RxBaseAddr каждый раз, когда трансивер входит в RX mode.

В непрерывном режиме (continuous mode) указатель RxDataPointer постоянно инкрементируется начиная от предыдущей позиции.

10.2. Буфер данных в режиме передачи

При каждом переходе в режим передачи TxDataPointer инициализируется в TxBaseAddr, и инкрементируется с каждым байтом, отправляемым по радио. Эта операция остановится, как только будет отправлено количество байт, равное параметру Payloadlength, определенному функцией SetPacketParams.

10.3. Использование буфера данных

Оба базовых адреса RxBaseAddr и TxBaseAddr устанавливаются командой SetBufferBaseAddresses(...).

По умолчанию RxBaseAddr и TxBaseAddr инициализированы в адрес 0x00.

Из-за непрерывной природы буфера данных базовые адреса для TX и RX полностью конфигурируемы по всей области памяти 256 байт. Каждый указатель может быть независимо установлен в любое место буфера. Чтобы задействовать максимальный объем буфера данных в режиме передачи или приема, весь буфер целиком может использоваться в каждом режиме путем установки базовых адресов TxBaseAddr и RxBaseAddr в нижнюю границу памяти (адрес 0x00).

Буфер данных очищается, когда устройство переходит в Sleep mode (что подразумевает отсутствие доступа к буферу). Во всех других режимах работы содержимое буфера сохраняется.

К буферу данным доступ осуществляется командами WriteBuffer и ReadBuffer. В этих функциях параметр смещения offset определяет указатель адреса первых записываемых или считываемых данных. Offset 0 определяет первую позицию в буфере данных.

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

Существует две возможности для получения значения смещения:

• Использовать значение RxBaseAddr, поскольку пользователь его определяет перед приемом полезной нагрузки.
• Инициализировать смещение значением RxStartBufferPointer, возвращенным командой GetRxbufferStatus.

Замечание: все принятые данные записываются в буфер данных даже если CRC неправильная, что позволяет для пользователя выполнить постобработку поврежденных данных. При приеме, если размер пакета превышает область буфера, выделенную для RX, то принятые данные перезапишут область буфера, выделенную для передачи.

[11. Cryptographic Engine]

11.1. Описание

Подсистема криптографии (Cryptographic Engine) предоставляет выделенный аппаратный акселератор для алгоритмов шифрования на основе AES-128, и выделенную память flash и RAM для обработки таких параметров устройства, как ключи шифрования, без возможности к ним доступа.

Cryptographic Engine повышает эффективность энергопотребления для криптографических операций и уменьшает размер кода программного стека. Проверка целостности данных, таких как полезная нагрузка downlink кадров важна для обеспечения защищенных коммуникаций. Проверка message integration check (MIC) использует алгоритм AES-CMAC для вычисления хэша. Реализация вычисления MIC программно поставит под угрозу конфиденциальность используемого ключа. Cryptographic Engine предоставляет аппаратную реализацию AES-CMAC, в которой внутри вычисляется и проверяется MIC.

Статус криптографических операций можно проверить либо опросом регистра статуса прерываний, либо используя подпрограмму обработки прерывания (interrupt service routine, ISR).

11.2. Определение ключей криптографии (Cryptographic Keys)

Ключи криптографии рассортированы в несколько групп, в соответствие с выполняемыми ими функциями, как показано в таблице 11-1. Эта таблица обобщает разрешенные использования ключей и некоторые ключи могут быть вычислены из других ключей.

Таблица 11-1. Использование и вычисление криптографических ключей.

Group Name Key Source / Dest. Index Key Name Использование Откуда вычислено
Network 2 NwkKey CryptoProcessJoinAccept()
CryptoComputeAesCmac()
CryptoDeriveKey()
CryptoSetKey(...)
DKEY(1)
Application 3 Application CryptoDeriveKey()
CryptoSetKey(...)
DKEY(1)
LifeTimeEnc 4 JSEncKey CryptoProcessJoinAccept()
(Decryption)
CryptoSetKey(...)
Из Network и Application
LifeTimeInt 5 JSIntKey CryptoProcessJoinAccept()
(MIC Computation)
CryptoComputeAesCmac()
CryptoSetKey(...)
GpTransport 6 GpKEKey0 CryptoDeriveKey(...)
CryptoSetKey(...)
Любой multicast Key
Из любой другой группы,
транспортного ключа
или ключа приложения
7 GpKEKey1
8 GpKEKey2
9 GpKEKey3
10 GpKEKey4
11 GpKEKey5
Unicast 12 AppSKey CryptoAesEncrypt01(...)
CryptoComputeAesCmac()
CryptoSetKey(...)
Из Network и Application
13 FNwkSIntKey
14 SNwkSIntKey
15 NwkSEncKey
16 RFU0
17 RFU1
Multicast 18 McAppSKey0 CryptoAesEncrypt01(...)
CryptoVerifyAesCmac(...)
CryptoSetKey(...)
Только из GpTransport Key
19 McAppSKey1
20 McAppSKey2
21 McAppSKey3
22 McNwkSKey0
23 McNwkSKey1
24 McNwkSKey2
25 McNwkSKey3
General Purpose 26 GP0 CryptoAesEncrypt(...)
CryptoAesDecrypt(...)
CryptoSetKey(...)
Не разрешено
27 GP0

Примечание (1): собрано в устройстве, вычислено по команде DeriveRootKeysAndGetPin().

11.3. Команды

11.3.1. CEStatus

Байт статуса подсистемы криптографии (Crypto Status) CEStatus показывает состояние Crypto Engine. Он возвращается после каждой команды, которая касается Crypto Engine.

CEStatus:

0: CRYP_API_SUCCESS. Предыдущая команда была успешной.
1: CRYP_API_FAIL_CMAC. Сравнение MIC потерпело неудачу (первые 4 байта CMAC).
2: RFU.
3: CRYP_API_INV_KEY_ID. Ошибка ключа/параметра источника (Key/Param Source) или идентификатора назначения (Destination ID).
4: RFU.
5: CRYP_API_BUF_SIZE. Размер буфера данных недопустимый. Для CryptoAesEncrypt(...) размер буфера должен нацело делиться на порции по 16 байт.
6: CRYP_API_ERROR. Любая другая ошибка.

11.3.2. CryptoSetKey

Команда CryptoSetKey(...) установит определенный ключ (Key), идентифицируемый по KeyID в Crypto Engine:

Таблица 11-2. Команда CryptoSetKey.

Байт 0 1 2 3 4 5 ... 18
От хоста 0x05 0x02 KeyID(7:0) Key1 Key2 Key3 ... Key16
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) ... 0x00

Таблица 11-3. Ответ на команду CryptoSetKey.

Байт 0 1
От хоста 0x00 0x00
К хосту Stat1 CEStatus

KeyID изменяется от 2 до 27, как определено в таблице 11-1. Другие значения RFU.

Key это массив байт, как определено в FIPS-197. С ключом K (2b7e1516 28aed2a6abf71588 09cf4f3c), предоставленным в тестовых векторах rfc4493, мы тогда имеем Key1 = 0x2b, Key2 = 0x7e, Key3 = 0x15, Key4 = 0x16, .. до Key16 = 0x3c.

CEStatus определен в секции 11.3.1 выше.

11.3.3. CryptoDeriveKey

Команда CryptoDeriveKey(...) вычисляет (шифрует) в указанный Key, идентифицируемый по DstKeyID, входное предоставленное значение (включая LoRaWAN DevNonce), используя ключ источника, идентифицируемый SrcKeyID.

Таблица 11-4. Команда CryptoDeriveKey.

Байт 0 1 2 3 4 5 6 ... 19
От хоста 0x05 0x03 SrcKeyID(7:0) DstKeyID(7:0) Input[1:16]
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00 ... 0x00

Таблица 11-5. Ответ на команду CryptoDeriveKey.

Байт 0 1
От хоста 0x00 0x00
К хосту Stat1 CEStatus

DstKeyID и SrcKeyID для этой функции определены в таблице 11-1:

DstKeyID: Destination Key ID (идентификатор ключа назначения). Допустимы значения от 4 до 25.

SrcKeyID: Source Key ID (идентификатор ключа источника), для этой функции допустимы значения 2-3 и 6-11.

Input[1:16] массив байт. Пример этой конструкции приведен в секции 12.3 и секции 12.4.

CEStatus определен в секции 11.3.1 выше.

Замечание: по окончанию процесса CryptoDeriveKey() сгенерированный ключ находится в выделенной области Crypto Engine RAM, и может быть сохранен в память flash командой CryptoStoreToFlash().

11.3.4. CryptoProcessJoinAccept

Команда CryptoProcessJoinAccept(...) расшифровывает сообщение join accept (с использованием шифрования AES-ECB согласно спецификации LoRaWAN) на Data и Header, и затем проверяет MIC расшифрованного сообщения. Затем предоставляются расшифрованные данные, если проверка MIC была успешной.

Таблица 11-6. Команда CryptoProcessJoinAccept.

Байт 0 1 2 3 4 5 ... N+4 N+5 ... N+4+M
От хоста 0x05 0x04 DecKeyID(7:0) VerKeyID(7:0) LoRaWANVer(7:0) Header1 ... HeaderN Data1 ... DataM
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) ... 0x00 0x00 ... 0x00

Таблица 11-7. Ответ на команду CryptoProcessJoinAccept.

Байт 0 1 2 ... M+1
От хоста 0x00 0x00 0x00 ... 0x00
К хосту Stat1 CEStatus Data1 ... DataM

DecKeyID и VerKeyID определены в таблице 11-1:

DecKeyID: ключ, используемый для расшифровки сообщения.

VerKeyID: ключ, используемый для верификации MIC.

LoRaWANVer: определяет ожидаемый размер N для Header: 1 байт (v1.0) или 12 байт (v1.1)

LoRaWANVer = 0: LoRaWAN версия 1.0.x, только MHDR (1 байт)
LoRaWANVer = 1: LoRaWAN версия 1.1.x, SIntKey, JoinReqType | JoinEUI | DevNonce | MHDR

Header1 .. HeaderN: заголовок. N зависит от LoRaWANVer.

Data1 .. DataM: данные. Размер данных M либо 16, либо 32 бата. Данные должны включать зашифрованную MIC.

CEStatus определен в секции 11.3.1 выше.

11.3.5. CryptoComputeAesCmac

Команда CryptoComputeAesCmac(...) вычисляет AES CMAC предоставленных данных, используя указанный Key и возвратит MIC.

Таблица 11-8. Команда CryptoComputeAesCmac.

Байт 0 1 2 3 4 5 ... N+2
От хоста 0x05 0x05 KeyID(7:0) Data1 Data2 Data3 ... DataN
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) ... 0x00

Таблица 11-9. Ответ на команду CryptoComputeAesCmac.

Байт 0 1 2 3 4 5
От хоста 0x00 0x00 0x00 0x00 0x00 0x00
К хосту Stat1 CEStatus MIC1 MIC2 MIC3 MIC4

KeyID: указанный идентификатор ключа, как определено в таблице 11-1. Поддерживаются 2, 5, 12-17.

Data1, Data2, ..., DataN: предоставленные данные, рассматриваемые как байты буфера.

CEStatus определен в секции 11.3.1 выше.

MIC: Message Integrity Check (первые 4 байта CMAC).

Например, когда используются тест-векторы RFC4493 example 2, у нас получится:

Message: 6BC1BEE2 2E409F96 E93D7E11 7393172A (N = 16)
MIC: 070A16B4

Таблица 11-10. Пример команды CryptoComputeAesCmac.

Байт 0 1 2 3 4 5 ... 18
От хоста 0x05 0x05 KeyID(7:0) 0x6b 0xc1 0xbe ... 0x2a
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) ... 0x00

Таблица 11-11. Ответ на пример команды CryptoComputeAesCmac.

Байт 0 1 2 3 4 5
От хоста 0x00 0x00 0x00 0x00 0x00 0x00
К хосту Stat1 CEStatus 0x07 0x0a 0x16 0xb4

11.3.6. CryptoVerifyAesCmac

Команда CryptoVerifyAesCmac(...) вычислит AES CMAC от предоставленных данных, используя указанный Key, и сравнит предоставленный MIC с реальным вычисленным MIC (первые 4 байта CMAC).

Таблица 11-12. Команда CryptoVerifyAesCmac.

Байт 0 1 2 3 4 5 6 7 ... N+6
От хоста 0x05 0x06 KeyID(7:0) Expected
MIC1
Expected
MIC2
Expected
MIC3
Expected
MIC4
Data1 ... DataN
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00 0x00 ... 0x00

Таблица 11-13. Ответ на команду CryptoVerifyAesCmac.

Байт 0 1
От хоста 0x00 0x00
К хосту Stat1 CEStatus

KeyID: указанный Key ID, как определено в таблице 11-1. Возможны идентификаторы 2, 5, 12-25.

ExpectedMIC: предоставленный MIC (первые 4 байта CMAC).

Data1, Data2, .. DataN: предоставленные данные, рассматриваются как байты буфера.

CEStatus определен в секции 11.3.1 выше.

Если два MIC-а одинаковые, команда возвратит CRYP_API_SUCCESS, иначе CRYP_API_FAIL_CMAC.

11.3.7. CryptoAesEncrypt01

Команда CryptoAesEncrypt01(...) шифрует предоставленные данные с использованием указанного Key и возвратит зашифрованные данные. Она не может использоваться на ключах с индексами 2-11, чтобы предотвратить повторное вычисление ключей сессии.

Таблица 11-14. Команда CryptoAesEncrypt01.

Байт 0 1 2 3 4 ... N+2
От хоста 0x05 0x07 KeyID(7:0) 0x01 Data2 ... DataN
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) ... 0x00

Таблица 11-15. Ответ на команду CryptoAesEncrypt01.

Байт 0 1 2 ... N+1
От хоста 0x00 0x00 0x00 ... 0x00
К хосту Stat1 CEStatus Encrypted Data1 ... Encrypted DataN

KeyID: указанный Key ID, как определено в таблице 11-1. Допустимы значения от 12 до 25.

Data1, Data2, .. DataN: предоставленные данные, рассматриваемые как байты буфера.

CEStatus определен в секции 11.3.1 выше.

EncryptedData1, EncryptedData2,... , EncryptedDataN: зашифрованные данные, рассматриваемые как байты буфера.

11.3.8. CryptoAesEncrypt

Команда CryptoAesEncrypt(...) шифрует предоставленные данные указанным ключом Key и возвратит их. Это предназначено для использования в обычных non-LoRaWAN криптографических операциях, где Crypto Engine используется как аппаратный ускоритель, только на ключах с индексами 26 и 27 (General Purpose keys, ключи общего назначения).

Таблица 11-16. Команда CryptoAesEncrypt.

Байт 0 1 2 3 ... N+2
От хоста 0x05 0x08 KeyID(7:0) Data1 ... DataN
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) ... 0x00

Таблица 11-17. Ответ на команду CryptoAesEncrypt.

Байт 0 1 2 ... N+1
От хоста 0x00 0x00 0x00 ... 0x00
К хосту Stat1 CEStatus Encrypted Data1 ... Encrypted DataN

KeyID: указанный Key ID, как определено в таблице 11-1. Допустимы значения от 26 до 27.

Data1, Data2, .. DataN: предоставленные данные, рассматриваемые как байты буфера.

CEStatus определен в секции 11.3.1 выше.

EncryptedData1, EncryptedData2, ..., EncryptedDataN: зашифрованные данные, рассматриваемые как байты буфера.

11.3.9. CryptoAesDecrypt

Команда CryptoAesDecrypt(...) расшифровывает предоставленные данные и возвращает их, используя указанный Key, и можно использовать только ключи с индексами 26-27, когда Crypto Engine используется как отдельный аппаратный ускоритель для задач безопасности, не относящихся к LoRaWAN.

Таблица 11-18. Команда CryptoAesDecrypt.

Байт 0 1 2 3 ... N+2
От хоста 0x05 0x09 KeyID(7:0) Data1 ... DataN
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) ... 0x00

Таблица 11-19. Ответ на команду CryptoAesDecrypt.

Байт 0 1 2 ... N+1
От хоста 0x00 0x00 0x00 ... 0x00
К хосту Stat1 CEStatus Encrypted Data1 ... Encrypted DataN

KeyID: указанный Key ID, как опрелено в таблице Table 11-1. Допустимы значения от 0 до 27.

Data1, Data2 to DataN: предоставленные данные, рассматриваемые как данные буфера.

CEStatus определен в секции 11.3.1 выше.

DecryptedData1, DecryptedData2, ..., DecryptedDataN: расшифрованные данные, рассматриваемые как байты буфера.

11.3.10. CryptoStoreToFlash

Команда CryptoStoreToFlash(...) выполняет сохранение данных Crypto Engine (ключи и параметры) из RAM в память flash.

Таблица 11-20. Команда CryptoStoreToFlash.

Байт 0 1
От хоста 0x05 0x0A
К хосту Stat1 Stat2

Таблица 11-21. Ответ на команду CryptoAesDecrypt.

Байт 0 1
От хоста 0x00 0x00
К хосту Stat1 CEStatus

CEStatus определен в секции 11.3.1 выше.

11.3.11. CryptoRestoreFromFlash

Команда CryptoRestoreFromFlash(...) выполняет восстановление данных Crypto Engine (ключей и параметров) из памяти flash в RAM.

Таблица 11-22. Команда CryptoRestoreFromFlash.

Байт 0 1
От хоста 0x05 0x0B
К хосту Stat1 Stat2

Таблица 11-23. Ответ на команду CryptoRestoreFromFlash.

Байт 0 1
От хоста 0x00 0x00
К хосту Stat1 CEStatus

CEStatus определен в секции 11.3.1 выше.

11.3.12. CryptoSetParam

Команда CryptoSetParam() установит определенный параметр Parameter в Crypto Engine RAM.

Таблица 11-24. Команда CryptoSetParam.

Байт 0 1 2 3 4 5 6
От хоста 0x05 0x0D ParamID(7:0) Data(31:24) Data(23:16) Data(15:8) Data(7:0)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00

Таблица 11-25. Ответ на команду CryptoSetParam.

Байт 0 1
От хоста 0x00 0x00
К хосту Stat1 CEStatus

ParamID: идентификатор параметра Parameter ID, от 0 до 119.

Data: данные параметра.

CEStatus определен в секции 11.3.1 выше.

11.3.13. CryptoGetParam

Команда CryptoGetParam() извлекает определенный параметр из Crypto Engine RAM.

Таблица 11-26. Команда CryptoGetParam.

Байт 0 1 2
От хоста 0x05 0x0E ParamID(7:0)
К хосту Stat1 Stat2 IrqStatus(31:24)

Таблица 11-27. Ответ на команду CryptoGetParam.

Байт 0 1 2 3 4 5
От хоста 0x00 0x00 0x00 0x00 0x00 0x00
К хосту Stat1 CEStatus Data(31:24) Data(23:16) Data(15:8) Data(7:0)

ParamID: идентификатор параметра Parameter ID, от 0 до 119.

Data: данные параметра.

CEStatus определен в секции 11.3.1 выше.

11.3.14. CryptoCheckEncryptedFirmwareImage

Команда CryptoCheckEncryptedFirmwareImage() добавит кусок зашифрованного образа FW для проверки. Она должна быть вызвана несколько раз, пока весь образ не будет передан в чип:

• Он занимает всего 64 куска 32-битных данных (всего 256 байт + команда и код операции) за один раз, за исключением последнего сегмента, который может быть короче.
• Первое смещение offset равно 0.
• Ножка BUSY показывает отсутствие занятости, когда LR1121 готов принять другой кусок данных.

Как только весь образ firmware был передан в чип, вы можете вызвать команду CryptoCheckFirmwareImageResult() чтобы проверить результат передачи. Эти команды полезны для проверки достоверности firmware перед его прошивкой.

Таблица 11-28. Команда CryptoCheckEncryptedFirmwareImage.

Байт 0 1 2 3 4 5 6 7
От хоста 0x05 0x0E Offset(31:24) Offset(23:16) Offset (15:8) Offset(7:0) Data1(31:24) Data1(23:16)
К хосту Stat1 Stat2 IrqStatus(31:24) 0x00 0x00 0x00 0x00 0x00
Байт 8 9 10 11 ... 4*N+5
От хоста Data1(15:8) Data1(7:0) Data2(31:24) Data2(23:16) ... DataN(7:0)
К хосту 0x00 0x00 0x00 9x99 ... 0x00

Offset: должно нацело делиться на 4 (смещение в байтах)

Data: длина данных должна нацело делиться на 4. Максимальная длина = 256 байт.

Замечание: N = 64 для всех кусочков данных, кроме последнего, который может быть короче.

11.3.15. CryptoCheckEncryptedFirmwareImageResult

Команда CryptoCheckEncryptedFirmwareImageResult() извлекает результат проверки переданного образа FW.

Таблица 11-29. Команда CryptoCheckEncryptedFirmwareImageResult.

Байт 0 1
От хоста 0x05 0x10
К хосту Stat1 Stat2

Таблица 11-30. Ответ на команду CryptoCheckEncryptedFirmwareImageResult.

Байт 0 1
От хоста 0x00 0x00
К хосту Stat1 Result

Result:

1: успешная провека firmware.
0: ошибка верификации firmware.

[12. LR1121 Provisioning]

Во время производственного тестирования Semtech LR1121 предварительно предоставляется с двумя идентификаторами, которые можно использовать для идентификации устройств на сети LoRaWAN®. Для получения дополнительной информации обратитесь к веб-сайту LoRa Alliance®.

• Номер ChipEui глобально уникальный и идентифицирует конкретное устройство.
• SemtechJoinEui повторно используется на устройствах Semtech.
• Также предварительно предоставляется уникальный Device Key (DKEY).
• С этими номерами вычисляется Device PIN при выполнении команды DeriveRootKeysAndGetPin(...). Этот PIN необходим для получения сервисов LoRa Cloud™ JoinServer. Для дополнительной информации обратитесь на официальный сайт LoRa Cloud.

Все эти уникальные идентификаторы сохранены в постоянной памяти устройства. Они предварительно конфигурируются компанией Semtech для упрощения реализации LoRaWAN и доступа к службам LoRa Cloud Join Server, но они также могут игнорироваться пользователем.

12.2. Команды Provisioning

12.2.1. GetChipEui

Команда GetChipEui(...) считывает предварительно предоставленный LR1121 ChipEui. Это глобально уникальное число, назначенное компанией Semtech при производстве, с использованием одного из назначенных EUI для Semtech (организацией IEEE). В стандартном случае использования ChipEui используется для вычисления двух корневых LoRaWAN ключей (root keys AppKey, NwkKey), и должен также использоваться как DevEui (в определении LoRaWAN) для генерации Join Request (который сам передает DevEui).

Таблица 12-1. Команда GetChipEui.

Байт 0 1
От хоста 0x01 0x25
К хосту Stat1 Stat2

Таблица 12-2. Ответ на команду GetChipEui.

Байт 0 1 ... 8
От хоста 0x00 0x00 ... 0x00
К хосту Stat1 ChipEui(63:56) .. ChipEui(7:0)

ChipEui кодируется 8 байтами, в формате big endian [5].

12.2.2. GetSemtechJoinEui

Команда GetSemtechJoinEui(...) читает предварительно запрограммированный LR1121 JoinEui, установленный при производстве компанией Semtech.

Два LoRaWAN root-ключа (AppKey, NwkKey) в устройстве вычисляются из этого JoinEui, среди других номеров.

На верхнем уровне, в стандартном случае использования, пользователь должен применять SemtechJoinEui как LoRaWAN-поле JoinEui для построения кадра Join Request (который сам передает JoinEui).

Таблица 12-3. Команда GetSemtechJoinEui.

Байт 0 1
От хоста 0x01 0x26
К хосту Stat1 Stat2

Таблица 12-4. Ответ на команду GetSemtechJoinEui.

Байт 0 1 ... 8
От хоста 0x00 0x00 ... 0x00
К хосту Stat1 SemtechJoinEui(63:56) ... SemtechJoinEui(7:0)

SemtechJoinEui кодируется 8 байтами, в формате big endian [5].

12.2.3. DeriveRootKeysAndGetPin

Команда DeriveRootKeysAndGetPin(...) вычисляет root-ключи AppKey и NwkKey, и вычисляет соответствующий PIN, необходимый для предоставления устройством на Semtech Join Server. Это очень универсальная функция со стандартным использованием и более расширенным использованием, как описано в следующих разделах:

Возможны 3 варианта использования:

• Standard: используется предварительно предоставленные ChipEui, DevEui, и используется Semtech Join Server.
• Advanced: DevEui и/или JoinEui могут быть персонализированными, при этом все еще используя Join Server.
• Alternate: AppKey и NwkKey принудительно выполняются пользователем, и не могут использоваться Join Server.

12.2.3.1. Standard использование

Таблица 12-5. Команда DeriveRootKeysAndGetPin (Standard).

Байт 0 1
От хоста 0x01 0x27
К хосту Stat1 Stat2

Таблица 12-6. Ответ на команду DeriveRootKeysAndGetPin (Standard).

Байт 0 1 2 3 4
От хоста 0x00 0x00 0x00 0x00 0x00
К хосту Stat1 PIN(31:24) PIN(23:16) PIN(15:8) PIN(7:0)

PIN: кодируется 4 байтами, в формате big endian.

В стандартном использовании ChipEui применяется как LoRaWAN DevEui, SemtechJoinEui как LoRaWAN JoinEui, и поэтому никакие специальные действия не производятся. Хост должен:

1. Вызвать команду DeriveRootKeysAndGetPin() без аргумента.
2. Прочитать SemtechJoinEui (командой GetSemtechJoinEui()) на назначить его переменной JoinEui.
3. Прочитать ChipEui (командой GetChipEui()) и назначить его переменной DevEui.
4. Выполнить процедуру Join, используя только что прочитанные элементы.
5. На приеме корректного Join Answer все lifetime и session ключи могут быть вычислены в соответствии требуемому стандарту LoRaWAN.

Устройство также должно быть заявлено на Semtech Join Server, чтобы запрос Join Request на присоединение был принят.

12.2.3.2. Advanced использование

LR1121 поддерживает определенный пользователем DevEui и/или выделенный JoinEui, оба отличающиеся от LR1121-встроенных ChipEui и SemtechJoinEui. Если повторно используется схема вычисления, определенная службой Semtech Join Server, то вызов функции DeriveRootKeysAndGetPin() должен быть выполнен следующим образом.

Таблица 12-7. Команда DeriveRootKeysAndGetPin (Advanced).

Байт 0 1 2 3 4 5 6:9 10:17 18
От хоста 0x01 0x27 DevEui(63:0) JoinEui RFU (0x00)
К хосту Stat1 Stat2 IrqStatus(31:24) IrqStatus(23:16) IrqStatus(15:8) IrqStatus(7:0) 0x00 0x00 0x00

Таблица 12-8. Ответ на команду DeriveRootKeysAndGetPin (Advanced).

Байт 0 1 2 3 4
От хоста 0x00 0x00 0x00 0x00 0x00
К хосту Stat1 PIN(31:24) PIN(23:16) PIN(15:8) PIN(7:0)

PIN: кодируется 4 байтами, в формате big endian.

В advanced случае использования могут применяться специфические для пользователя DevEui и/или JoinEui. Хост должен:

1. Вызвать DeriveRootKeysAndGetPin() со своими собственными DevEui и/или JoinEui, получить в ответ PIN.
2. Выполнить процедуру Join, использующую DevEui и JoinEui (т. е. не ChipEui и SemtechJoinEui).
3. На приеме корректного Join Answer все lifetime и session ключи могут быть вычислены в соответствии требуемому стандарту LoRaWAN.

Устройство также должно быть заявлено на Semtech Join Server, чтобы запрос Join Request на присоединение был принят.

12.2.3.3. Alternate использование

LR1121 может использоваться вне службы Join Server и его встроенных схем получения корневого ключа (built-in root key derivation schemes). В этом сценарии концепция PIN становится неуместной, и пользователь может предоставить свои собственные NwkKey и AppKey, но все же использовать Crypto Engine для любой из задач аутентификации, подписи и шифрования для повышения безопасности. Обратите внимание на то, что в этом сценарии команда DeriveRootKeysAndGetPin(...) НЕ ДОЛЖНА использоваться, так как это перезаписало бы корневые ключи, персонализированные в устройстве пользователем с помощью команды CryptoSetKey (...). Хост должен:

1. Использовать CryptoSetKey(...) для персонализации NwkKey и AppKey (в соответствии с интересующей версией LoRaWAN).
2. Выполнить процедуру Join, используя DevEui и JoinEui, выбранные пользователем (ChipEui и SemtechJoinEui могут быть повторно использованы в этом отношении).
3. Получить DevAddr и вычислить ключи сессии с принятием ответа Join Response.

12.3. Crypto Engine, используемая с LoRaWAN V1.1.x

Схема вычисления ключей (key derivation scheme) доступная из спецификации LoRaWAN:

LR1121 Key Derivation Scheme for LoRaWAN fig12 1

Рис. 12-1. Key Derivation Scheme для LoRaWAN 1.1.x.

Все ключи, необходимые для подписания, аутентификации или шифрования трафика Join, а также ключи сеанса могут быть получены из предоставленных корневых ключей (AppKey, NwkKey) в соответствии со схемой получения, описанной на рис. 12-1. Аргументы функции CryptoDeriveKey (...) должны быть вычислены хост-контроллером и переданы функции в качестве аргумента Input [1:16] с соответствующими заполняющими байтами, когда это применимо. Например, при вычислении FNwkSIntKey команду следует использовать следующим образом:

FNwkSIntKey = CryptoDeriveKey(NwkKey, 0x01 | JoinNonce | NetID | DevNonce | pad16)

Здесь pad16 это требуемое количество байт дополнения 0x00 для расширения в 16-байтное число.

12.4. Crypto Engine, используемая с LoRaWAN V1.0.x

Схема вычисления ключей (key derivation scheme) доступная из спецификации LoRaWAN:

LR1121 Key Derivation Scheme for LoRaWAN fig12 2

Рис. 12-2. Key Derivation Scheme для LoRaWAN 1.0.x.

Хотя crypto engine LR1121 следует соглашению именования стандарта LoRaWAN 1.1.x, она может использоваться для LoRaWAN 1.0.x по следующей таблице:

Таблица 12-9. Соответствие LoRaWAN 1.0.x и 1.1.x Security Correspondence.

1.0.x 1.1.x
LoRaWAN_DEVICE_EUI LoRaWAN_DEVICE_EUI
LoRaWAN_APP_EUI LoRaWAN_JOIN_EUI
LoRaWAN_GEN_APP_KEY(1) LoRaWAN_APP_KEY(1)
LoRaWAN_APP_KEY LoRaWAN_NWK_KEY
LoRaWAN_NWK_S_KEY LoRaWAN_F_NWK_S_INT_KEY
LoRaWAN_NWK_S_KEY LoRaWAN_S_NWK_S_INT_KEY
LoRaWAN_NWK_S_KEY LoRaWAN_NWK_S_ENC_KEY
LoRaWAN_APP_S_KEY LoRaWAN_APP_S_KEY

Примечание (1): GenAppKey может использоваться как материнский ключ (mother key) для вычисления специфического для множественного вещания ключа (multicast-specific key material) в LoRaWAN 1.0.x, в то время как AppKey используется в LoRaWAN 1.1.x.

[13. Команды тестирования]

Несколько тестовых команд LR1121 позволяют упростить конфигурацию устройства для соответствия регулирующим требованиям ETSI или FCC.

13.1. Обзор регулирующих требований

В этой секции описаны только RF-режимы, необходимые в регуляторном тестировании для ETSI и FCC. Обратитесь к документам ETSI и FCC для подробного описания теста и для индикации ограничений теста.

13.1.1. ETSI

Стандарты EN 300 220 описывают 4 тестовых сигнала, которые EUT (Equipment Under Test) должно быть в состоянии передать для сертификации CE. Эти тестовые сигналы перечислены в таблице ниже, с соответствующими рабочими режимами для LR1121.

Таблица 13-1. Тестовые сигналы ETSI.

Тест сигнал Описание Операция LR1121
D-M1 Немодулированная несущая TX CW mode (команда SetTxCw(...))
D-M2 Непрерывно модулированный сигнал с наибольшим занятием полосы радиочастот Непрерывная модуляция (команда SetTxInfinitePreamble (...))
D-M2a Тоже самое, что и сигнал D-M2, но не с непрерывной модуляцией Передача пакетов RF: LoRa SF12, BW500, 50% скважность
D-M3 Нормальный рабочий режим EUT в приложении Работа как в приложении

Пользователь должен быть способен изменить параметры рабочей частоты, выходной мощности и модуляции для проведения тестов ETSI. Пользователь также должен быть способен принять приходящие RF пакеты для любой конфигурации (частота, параметры модуляции), и определить индикацию PER (Packet Error Rate) качества приема.

Все это может быть реализовано обычными командами LR1121 radio.

13.1.2. FCC

FCC part 15.247 применяется к системам, использующим скачки по перестройке частоты (frequency hopping) и цифровую модуляцию. Для этих тестов требуется только немодулированная несущая (TX CW) и обычная передача пакета.

Пользователь должен быть способен изменить параметры рабочей частоты, выходной мощности и модуляции для проведения тестов FCC. Это может быть реализовано обычными командами LR1121 radio.

13.2. Команды

13.2.1. SetTxCw

Команда SetTxCw (...) установит устройство в режим передачи непрерывной несущей (TX continuous wave, немодулированная несущая).

Таблица 13-2. Команда SetTxCw.

Байт 0 1
От хоста 0x02 0x19
К хосту Stat1 Stat2

Эта команда немедленно переведет устройство в режим TX CW. Таким образом, команды рабочей частоты и конфигурации PA (включая выходную мощность RF) должны быть вызваны перед этой командой.

13.2.2. SetTxInfinitePreamble

Команда SetTxInfinitePreamble(...) передает бесконечную последовательность преамбулы.

Таблица 13-3. Команда SetTxInfinitePreamble.

Байт 0 1
От хоста 0x02 0x1A
К хосту Stat1 Stat2

Эта команда немедленно запустит передачу бесконечной последовательности преамбулы. Таким образом, команды рабочей частоты и конфигурации PA (включая выходную мощность RF) должны быть вызваны перед этой командой.

[14. Список команд]

Для общего описания команд чтения и записи SPI см. секции "3.2. Команды чтения" и "3.1. Команды записи".

14.1. Операции доступа к регистрам / памяти

Таблица 14-1. Register / Memory Access Operations.

Команда Opcode Параметры Описание
WriteRegMem32 0x0105 Addr(4)
Data(256)
Записывает данные по заданному адресу регистра/памяти. Адрес должен быть 32-разрядным, а длина данных должна быть кратна 4
ReadRegMem32 0x0106 Addr(4)
Len(1)
Считывает данные по заданному адресу регистра/памяти. Адрес должен быть 32-битным, а длина данных < 65
WriteBuffer8 0x0109 Data(255) Записывает данные в буфер radio TX (до 255 байт)
ReadBuffer8 0x010A Offset(1)
Len(1)
Читает данные из буфера radio RX
ClearRxBuffer 0x010B ... Очищает все данные из буфера radio RX
WriteRegMemMask32 0x010C Addr(4)
Mask(4)
Data(4)
Операция чтение-модификация-запись данных по заданному адресу регистра/памяти. Адрес должен быть 32-разрядным

14.2. Операции конфигурации системы и получения информации её состояния

Таблица 14-2. System Configuration / Status Operations.

Команда Opcode Параметры Описание
GetStatus 0x0100 - Возвратит статус устройства
GetVersion 0x0101 - Возвратит версию firmware
GetErrors 0x010D - Возвратит статус ошибки устройства
ClearErrors 0x010E - Очистит биты ошибки в статусе ошибки
Calibrate 0x010F CalibParams(1) Калибрует запрошенные блоки в соответствии с параметром
SetRegMode 0x0110 RegMode(1) Устанавливает если DC-DC может быть разрешен для режима XOSC, FS, RX или TX, 0: LDO, 1: DC-DC
CalibImage 0x0111 Freq1(1)
Freq2(1)
Запускает калибровку образа: Freq1, Freq2 шагами 4MHz
SetDioAsRfSwitch 0x0112 RfswEnable(1)
RfswStbyCfg(1)
RfswRxCfg(1)
RfswTxCfg(1)
RfswTxHPCfg(1)
RfSwTxHfCfg(1)
RFU(2)
Настраивает выходные конфигурации RFSWx для каждого режима радио
SetDioIrqParams 0x0113 Irq1ToEn(4)
Irq2ToEn2(4)
Конфигурирует прерывания IRQ для вывода на ножки IRQ
ClearIrq 0x0114 IrqToClear(4) Очищает ожидающие обработки прерывания IRQ
ConfigLfClock 0x0116 LfClockSetup(1) Конфигурирует используемые такты LF
SetTcxoMode 0x0117 RegTcxoTune(1)
Delay(3)
Конфигурирует устройство для подключенного TCXO
Reboot 0x0118 StayInBootloader(1) Перезагружает (программный сброс) устройство
GetVbat 0x0119 - Измеряет напряжение VBAT
GetTemp 0x011A - Измеряет температуру
SetSleep 0x011B SleepConfig(1)
SleepTime(4)
Установит чип в режим сна (SLEEP mode)
SetStandby 0x011C StdbyConfig(1) 0: RC, 1: XOSC установит чип в режим RC или XOSC
SetFs 0x011D - Установит чип в режим FS
GetRandomNumber 0x0120 - Генерирует 32-битное случайное число
EraseInfoPage 0x0121 InfoPage(1) Очистит данные Info Page
WriteInfoPage 0x0122 InfoPage(1)
IndoWordAddr(2)
dataN(4)
Запишет 32-битный блок Info Page
ReadInfoPage 0x0123 dataN(1) Читает 32-битный блок Info Page
GetChipEui 0x0125 - Возвратит 8-байтный заводской DeviceEui
GetSemtechJoinEui 0x0126 - Возвратит 8-байтный заводской JoinEui
DeriveRootKeysAndGet 0x0127 - Возвратит 4-байтный PIN, который может использоваться для регистрации устройства с сервисами LoRa Cloud
EnableSpiCrc 0x0128 Enable(1)
CRC(1)
Разрешает / запрещает 8-битную CRC на интерфейсе SPI
DriveDiosInSleepMode 0x012A Enable(1) Разрешает / запрещает pull-up/down на сконфигурированном ключе RF и выводы IRQ DIO для режимов сна

14.3. Операции конфигурирования радиотракта и получения информации его состояния

Таблица 14-3. Radio Configuration / Status Operations.

Команда Opcode Параметры Описание
ResetStats 0x0200 - Сбрасывает статистику RX
GetStats 0x0201 - Извлекает статистику RX
GetPacketType 0x0202 - Извлекает текущий протокол радио
GetRxBufferStatus 0x0203 - Извлекает статус буфера RS
GetPacketStatus 0x0204 - Извлекает статус пакета RX
GetRssiInst 0x0205 - Извлекает мгновенный RSSI
SetGfskSyncWord 0x0206 Syncword(8) Устанавливает 64-битное синхрослово (G)FSK
SetLoRaPublicNetwork 0x0208 PublicNetwork(1) Изменяет синхрослово LoRa для приватной или публичной сети
SetRx 0x0209 RxTimeout(3) Установит чип в режим RX
SetTx 0x020A TxTimeout(3) Установит чип в режим TX
SetRfFrequency 0x020B RfFreq(4) Установит частоту PLL
AutoTxRx 0x020C Delay(3)
IntermediaryMode(1)
Timeout2(3)
Активирует или деактивирует режим auto TX auto RX
SetCadParams 0x020D SymbolNum(1)
DetPeak(1)
DetMin(1)
CadExitMode(1)
Timeout(3)
Конфигурирует режим LoRa CAD
SetPacketType 0x020E PacketType(1) Определяет протокол радио
SetModulationParams 0x020F Params(1) Конфигурирует параметры модуляции(1)
SetPacketParams 0x0210 Params(1) Конфигурирует параметры пакета(1)
SetTxParams 0x0211 TxPower(1)
RampTime(1)
Установит мощность TX и время нарастания мощности (ramp time)
SetPacketAdrs 0x0212 NodeAddr(1)
BroadcastAddr(1)
Установит адрес узла (Node) и широковещательный (broadcast) адрес для пакетов (G)FSK
SetRxTxFallbackMode 0x0213 Fall-back mode(1) Определяет, в какой режим чип переходит после завершения TX / RX
SetRxDutyCycle 0x0214 RxPeriod(3)
SleepPeriod(3)
Mode(1)
Установит режим RX Duty Cycle
SetPaConfig 0x0215 PaSel(1)
RegPaSupply(1)
PaDutyCycle(1)
PaHpSel(1)
Конфигурирует настройки PA
StopTimeoutOnPreamble 0x0217 StopOnPreamble(1) Остановит RX таймаут на 0: детектирование синхрослова/заголовка (по умолчанию) или 1: детектирование преамбулы
SetCad 0x0218 - Установит чип в режим RX CAD (LoRa)
SetTxCw 0x0219 - Установит чип в режим TX с бесконечной несущей
SetTxInfinitePreamble 0x021A - Установит чип в режим TX с бесконечной преамбулой
SetLoRaSynchTimeout 0x021B SymbolNum(1) Конфигурирует модем LoRa для выдачи таймаута после точного количества символов SymbolNum
SetGfskCrcParams 0x0224 InitValue(4), Poly(4) Установит параметры для полинома CRC
SetGfskWhitParams 0x0225 Seed(2) Установит параметры для whitening
SetRxBoosted 0x0227 RxBoosted(1) Установит RX в boosted-режим
SetRssiCalibration 0x0229 TuneGxx(4)
TuneG13hpx(3)
TuneGxx(1)
TuneG13hp7(1)
GainOffset(2)
Установит смещение усиления для для встроенного в чип вычислителя мощности
SetLoRaSyncWord 0x022B Syncword(1) Установит синхрослово LoRa
LrFhssBuildFrame 0x022C HeaderCount(1)
CR(1)
ModType(1)
Grid(1)
Hopping(1)
BW(1)
HopSequence(2)
DeviceOffset(1)
Payload(n)
Кодирует кадр LR-FHSS, настраивает hopping-таблицу
LrFhssSetSyncWord 0x022D Syncword(4) Установит синхрослово LR-FHSS
GetLoRaRxHeaderInfos 0x0230 - Извлечет информацию заголовка последнего пакета

Примечание (1): параметры зависят от модема/пакета.

14.4. Операции конфигурации подсистемы шифрования и получения её состояния

Таблица 14-4. CryptoElement Configuration / Status Operations.

Команда Opcode Параметры Описание
CryptoSetKey 0x0502 KeyID(1)
Key(2)
Установит ключ, идентифицируемый по KeyID, в Crypto Engine
CryptoDeriveKey 0x0503 SrcKeyID(1)
DstKeyID(1)
Input(2)
Вычислит и сохранит ключ
CryptoProcessJoinAccept 0x0504 DecKeyID(1)
VerKeyID(1)
LoRaWANVer(1)
Header(1 или 12)
Data(16 или 32)
Обработает сообщение о принятии присоединения: расшифрует полное сообщение (data+header), проверит MIC на сообщении, и если OK, предоставит расшифрованное сообщение.
CryptoComputeAesCmac 0x0505 KeyID(1)
Data(256)
Вычисляет CMAC, возвратит MIC с использованием указанного ключа.
CryptoVerifyAesCmac 0x0506 KeyID(1)
ExpectedMIC(4)
Data(256)
Проверяет вычисленный CMAC (сравнивает вычисленный MIC с ожидаемым MIC)
CryptoAesEncrypt01 0x0507 KeyID(1)
Data(256)
Шифрует данные с использованием указанного ключа
CryptoAesEncrypt 0x0508 KeyID(1)
Data(256)
CryptoAesDecrypt 0x0509 KeyID(1)
Data(256)
Расшифровывает данные с использованием указанного ключа
CryptoStoreToFlash 0x050A - Сохранит все ключи (и параметры) во flash
CryptoRestoreFromFlash 0x050B - Восстановит все ключи (и параметры) из flash
CryptoSetParam 0x050D ParamID(1)
Data(4)
Установит параметр в RAM
CryptoGetParam 0x050E ParamID(1) Извлечет параметр из RAM
CryptoCheckEncryptedFirmwareImage 0x050F Offset(31:0)
Data[1 .. N]
Добавит кусок в образ шифрованного firmware для проверки
CryptoCheckEncryptedFirmwareImageResult 0x0510 - Извлечет результат проверки

14.5. Команды загрузчика

Таблица 14-5. Bootloader Commands(1).

Команда Opcode Параметры Описание
EraseFlash 0x8000 - Сотрет содержимое памяти программ
WriteFlashEncrypted 0x8003 Offset(4)
Data(128)
Запишет новый зашифрованный образ firmware
Reboot 0x8005 StayInBootloader(1) Перезагрузит устройство (программный сброс) из режима загрузчика
GetPIN 0x800B - Прочитает 4-байтный PIN устройства (little endian [5])
GetChipEui 0x800C - Прочитает 8-байтный заводской ChipEui устройства (big endian [5])
GetJoinEui 0x800D - Прочитает 8-байтный заводской JoinEui устройства (big endian [5])

Примечание (1): для использования см. апноут AN1200.57 LR1110 Program Memory Update.

[Ссылки]

1. LR1121 User Manual site:manualslib.com.
2. LR1121: трансивер LoRa.
3. LoRa Basics Modem-E v2 firmware.
4. LFSR: генерация псевдослучайных чисел на регистре сдвига.
5. Порядок следования байт (endianness).

 

Добавить комментарий


Защитный код
Обновить

Top of Page