Синхрослово (sync word)
Модули на одной частоте и с одной скоростью почему-то не слышат друг друга — а другие модули «ловят» чужие пакеты. Обе ситуации обычно объясняются синхрословом: кодовой меткой, которая отмечает начало данных и одновременно работает как номер сети.
Обновлено Редакция GAW
Синхрослово (sync word) — заранее известная обеим сторонам последовательность бит, которую передатчик отправляет сразу после преамбулы. Приёмник непрерывно сравнивает поток бит с этим образцом; совпадение означает, что начался пакет, и задаёт границы байтов. Второе назначение — фильтр: пакеты с другим синхрословом приёмник отбрасывает, поэтому синхрослово часто служит номером сети.
Синхрослово в популярных чипах
| Чип | Длина | По умолчанию | Источник |
|---|---|---|---|
| CC1101 | 16 бит, повтор до 32 бит | 0xD391 | разд. 14.3, 15.2; SYNC1/SYNC0 |
| SX1276, FSK | 1–8 байт | задаёт пользователь | разд. 4.2.10.1 |
| SX1276, LoRa | 1 байт | 0x12; 0x34 — для LoRaWAN | регистр RegSyncWord |
| nRF24L01+ | роль играет адрес 3–5 байт | — | разд. 7.3.2 |
В CC1101 порог совпадения настраивается: 15 из 16, 16 из 16 или 30 из 32 бит; обнаружение можно дополнительно связать с качеством преамбулы и превышением уровня несущей (разд. 14.3, регистр MDMCFG2). Однобайтовое синхрослово CC1101 эмулирует, если записать в SYNC1 образец преамбулы (разд. 15.2).
У nRF24L01+ отдельного синхрослова нет: после однобайтовой преамбулы идёт адрес, и по нему приёмник распознаёт свой пакет. Это же поле разделяет каналы приёма (pipe) одного приёмника.
Ложные срабатывания
Чем короче синхрослово, тем чаще шум случайно совпадает с ним. Поэтому TI рекомендует 4 байта синхрослова (разд. 15), а Nordic предупреждает, что адреса с одной сменой уровня, например 000FFFFFFF, или похожие на продолжение преамбулы обнаруживаются в шуме и повышают долю ошибочных пакетов (разд. 7.3.2). Semtech запрещает байты 0x00 в синхрослове FSK (разд. 4.2.10.1).
Синхрослово передаётся как есть: в CC1101 обеление данных не затрагивает преамбулу и синхрослово (разд. 15.1), в SX1276 обеление и манчестерский код применяются только к данным и CRC (разд. 4.2.13.7). Для LoRa синхрослово — одно из условий совместимости вместе с частотой, SF и полосой; подробнее о параметрах — в статье «LoRa».
Частые вопросы
Почему мои LoRa-модули не принимают пакеты друг друга?
Одна из частых причин — разное синхрослово. В SX1276 оно задаётся регистром RegSyncWord (0x39), по умолчанию 0x12, а значение 0x34 Semtech резервирует для сетей LoRaWAN (табл. регистров, с. 115). Если одна библиотека пишет 0x12, а другая 0x34, приёмник будет пропускать пакеты при совпадающих частоте, SF и полосе.
Можно ли использовать синхрослово как адрес сети?
Да, для этого оно и нужно помимо синхронизации: CC1101 принимает только пакеты с заранее заданным синхрословом, и TI прямо называет его идентификатором системы (разд. 14.3). Для адресации отдельных узлов внутри сети у CC1101 и SX1276 есть ещё байт адреса, который проверяется после синхрослова.
Какое синхрослово выбрать?
Длинное и с частыми переходами. TI рекомендует 32 бита (повтор 16-битного слова, разд. 15); Semtech запрещает байты 0x00 в синхрослове FSK (разд. 4.2.10.1); Nordic предупреждает, что адреса вроде 000FFFFFFF или похожие на преамбулу ловятся в шуме и повышают долю ошибочных пакетов (разд. 7.3.2).
Источники
- Texas Instruments. CC1101 Low-Power Sub-1 GHz RF Transceiver, SWRS061I (2013) — разд. 14.3 (с. 36): синхронизация байтов непрерывным поиском синхрослова, 16 бит (можно повторить до 32), старший бит первым, служит идентификатором системы; порог совпадения 15/16, 16/16 или 30/32 бит, дополнительно PQI и carrier sense; задаётся регистрами SYNC1 и SYNC0; разд. 15.2 (с. 38): однобайтовое синхрослово эмулируют, записав в SYNC1 образец преамбулы, 32 бита — SYNC_MODE 3 или 7; разд. 15 (с. 37): рекомендуются 4 байта синхрослова; с. 73: сброс SYNC1 = 0xD3, SYNC0 = 0x91; регистр MDMCFG2 (с. 77): SYNC_MODE 0–7
- Semtech. SX1276/77/78/79 Datasheet, Rev. 5 (August 2016) — архивная копия официального файла; разд. 4.2.10.1 (с. 67): FSK — распознавание синхрослова, сравнение с первым принятым битом по старшему биту RegSyncValue1, размер 1–8 байт (SyncSize), значение SyncValue(63:0), байты 0x00 запрещены; разд. 4.2.13.6 (с. 76–77): пакеты без своего синхрослова отбрасываются, адресная фильтрация — уровень выше синхрослова; табл. регистров LoRa (с. 115): RegSyncWord (0x39), сброс 0x12, значение 0x34 зарезервировано для сетей LoRaWAN
- Nordic Semiconductor. nRF24L01+ Product Specification v1.0 (September 2008) — архивная копия официального файла; разд. 7.3.2 (с. 28): адрес 3, 4 или 5 байт обеспечивает приём нужным приёмником; адреса с одной сменой уровня (000FFFFFFF) и продолжающие преамбулу (чередование) обнаруживаются в шуме и повышают долю ошибочных пакетов
Нашли ошибку?
Смотрите также
- Преамбула пакетаНачальная последовательность 1010… для синхронизации приёмника
- CC1101Трансивер ниже 1 ГГц по SPI: выводы, питание, токи, частота канала, FIFO
- SX1276, SX1278LoRa-трансиверы: версии, выводы, PA_BOOST и +20 дБм, токи, сброс, SPI, DIO
- nRF24L01+Радио 2,4 ГГц по SPI: питание, уровни, токи, каналы, ShockBurst, тайминги
- LoRaSF, BW, CR, чувствительность SX1276, структура пакета, формула времени в эфире, пример
- Data pipe (MultiCeiver)Логический канал приёма nRF24L01+ со своим адресом