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

Рис. 1-1. Блок-схема LR1121.
[2. Системные процессы]
2.1. Режимы системы
Режимы, в которых работает LR1121, и переходы между ними показаны на рис. 2-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.

Рис. 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), сигнализируя о готовности устройства к приему другой команды.

Рис. 3-1. Диаграмма времени команды записи.
3.2. Команды чтения
Специальные команды чтения (Read) получают данные из LR1121, такие как результаты внутреннего статуса.
Хост посылает 16-битный opcode, за которым идут необходимые аргументы.
Сигнал BUSY автоматически установится по спаду уровня сигнала выборки NSS.
Как только LR1121 завершит подготовку запрошенных данных, сигнал BUSY переходит в 0. После этого хост может прочитать данные отправкой байт NOP (0x00) для того, чтобы данные выдвигались через вывод MISO.

Рис. 3-2. Диаграмма времени команды чтения.
3.3. Command Endianness (порядок следования байт команды)
На следующих рисунках приведены примеры транзакции SPI для команды GetVersion(...).

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

Рис. 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 показана на следующем рисунке:

Рис. 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 сбрасывает статистику.

Рис. 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.

Рис. 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 от пика до пика.

Рис. 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.

Рис. 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, и так далее.
Хост в любой момент времени может остановить этот цикл.

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

Рис. 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).

Рис. 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.

Рис. 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 канала связи.

Рис. 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, если фильтрация адреса активирована.

Рис. 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").

Рис. 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.

Рис. 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).

Рис. 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.

Рис. 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.

Рис. 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).

Рис. 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.

Рис. 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.

Рис. 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.

Рис. 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.

Рис. 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.

Рис. 9-8. Зависимость IDDTX от TxPower, Low Power PA, конфигурация DC-DC.
На рис. 9-9 показано влияние напряжения питания на потребление тока для трех вариантов настройки PaDutyCycle (0, 4 и 7) в конфигурации LDO.

Рис. 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.

Рис. 9-10. Зависимость IDDTX от TxPower, High Power PA, конфигурация DC-DC.

Рис. 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.

Рис. 9-12. Зависимость IDDTX от TxPower, High Frequency PA, конфигурация DC-DC.
Рис. 9-13 показывает влияние настройки TxPower на ток потребления для трех напряжений питания в конфигурации LDO.
Напряжение питания не влияет на потребление тока, и так что графики для 1.8V, 3.3V и 3.7V накладываются друг на друга.

Рис. 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(...).

Рис. 9-14. RF Switch, работа двух PA.

Рис. 9-15. RF Switch, работа одного PA (пример High Power PA).
9.4.3. Реализация с прямым подключением
В случае недорогого приложения можно избавиться от RF-ключа, и применить так называемую реализацию прямого подключения (direct-tie).
В такой конфигурации PA и дифференциальные каскады RX соединены, как показано на рисунках ниже. Обратите внимание, что требуются последовательно подключенные конденсаторы между PA и каскадом RX, чтобы избежать повреждения LR1121 из-за протекания тока в каскаде RX.

Рис. 9-16. Реализация Single Tie: используется только один PA (пример High Power PA).

Рис. 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 полностью настраивается пользователем и позволяет получить доступ либо данным для передачи, либо к данным последнего принятого пакета.

Рис. 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:

Рис. 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:

Рис. 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). |