Манчестерский код (Manchester)
Чтобы приёмник не потерял такт на длинной серии одинаковых бит, в каждый бит можно встроить переход. Так устроен манчестерский код: единица и ноль различаются направлением перепада в середине битового интервала. Разбираем, как он сделан в радиочипах CC1101 и SX1276 и чем платят за надёжность.
Обновлено Редакция GAW
Манчестерский код (Manchester code) — способ кодирования, при котором каждый бит передаётся двумя половинками противоположного уровня, и в середине битового интервала всегда есть перепад. Направление перепада и несёт значение бита. Соглашений два: по G. E. Thomas единица передаётся как «10», ноль — как «01», и так кодирует SX1276 (разд. 4.2.13.7); в IEEE 802.3 (Ethernet 10 Мбит/с) — наоборот, единица — переход снизу вверх, «01».
Что даёт переход в каждом бите
- Нет постоянной составляющей. В каждом бите половина времени — один уровень, половина — другой, поэтому среднее не зависит от данных. Semtech объясняет, что длинные серии одинаковых бит создают постоянную составляющую и неравномерную мощность в полосе (SX1276, разд. 4.2.13.7).
- Такт восстанавливается из самого сигнала. Перепад есть в каждом бите, и приёмник не теряет синхронизацию даже на длинных сериях нулей.
- Цена — скорость. На каждый бит уходят два символа, и при той же скорости модуляции полезная скорость вдвое меньше: в CC1101 скорость данных в кбит/с равна половине скорости в бодах (с. 8).
В радиочипах
| CC1101 | SX1276 (FSK) | |
|---|---|---|
| Включение | MDMCFG2.MANCHESTER_EN = 1 | DcFree = 01, пакетный режим |
| Что кодируется | поток данных модулятора | данные и CRC; преамбула и синхрослово — без кода |
| Несовместимо с | FEC и перемежением, MSK, 4-FSK | обелением |
| Источник | разд. 16 | разд. 4.2.13.7 |
Для программы код прозрачен: в FIFO записываются и читаются обычные данные. Альтернатива с той же целью, но без потери скорости, — обеление данных. Манчестерский код удобен и при амплитудной манипуляции OOK: несущая включается в каждом бите, и приёмнику проще держать порог (наше пояснение).
Родственные коды
Манчестерский код — один из линейных кодов, которые встраивают такт в данные. Его вариант с переходом на границе каждого бита — BMC, код линии CC в USB Power Delivery. Другие подходы — NRZI с битстаффингом в USB и 4B5B в Fast Ethernet, где переходы обеспечивает таблица кодовых слов, а не удвоение символов. Манчестерский режим есть и у отладочного вывода SWO ядер Cortex-M.
Частые вопросы
Почему скорость в даташите в бодах, а данных вдвое меньше?
Потому что манчестерский код передаёт каждый бит двумя символами. TI так и пишет: при включённом коде скорость данных в кбит/с вдвое ниже скорости в бодах (CC1101, с. 8). В SX1276 скорость чипов одна на весь пакет, а скорость манчестерских бит вдвое меньше (разд. 4.2.13.7). Если модем настроен на 4,8 кБод, полезных данных будет 2,4 кбит/с.
Какой уровень означает единицу: 10 или 01?
Зависит от реализации. Есть два соглашения. По G. E. Thomas единица — «10», ноль — «01»; так кодирует SX1276 (разд. 4.2.13.7). В IEEE 802.3 (Ethernet 10 Мбит/с) наоборот: единица — переход снизу вверх в середине бита, «01». Если приёмник и передатчик от разных производителей, это проверяют по обоим даташитам.
Можно ли включить манчестерский код и обеление сразу?
В SX1276 нет — включается только один из механизмов (разд. 4.2.13.7), и смысла в обоих сразу мало: оба борются с длинными сериями одинаковых бит. В CC1101 манчестерский код несовместим с FEC и перемежением, MSK и 4-FSK (разд. 16).
Источники
- Semtech. SX1276/77/78/79 Datasheet, Rev. 5 (August 2016) — архивная копия официального файла; разд. 4.2.13.7 (с. 78): длинные серии 1 и 0 вносят постоянную составляющую; манчестерский код включается DcFree = 01, только в пакетном режиме; NRZ-данные кодируются: 1 — «10», 0 — «01»; максимальная скорость чипов равна максимальной скорости из спецификации, фактическая скорость бит вдвое меньше; кодируются только данные и CRC, преамбула и синхрослово остаются NRZ, скорость чипов одна на весь пакет (Chip Rate = Bit Rate NRZ = 2 × Bit Rate Manchester); рис. 36; одновременно включается только один из способов — манчестерский код или обеление
- Texas Instruments. CC1101 Low-Power Sub-1 GHz RF Transceiver, SWRS061I (2013) — с. 8: необязательное манчестерское кодирование, скорость данных в кбит/с вдвое ниже скорости в бодах; разд. 16 (с. 42): включается MDMCFG2.MANCHESTER_EN = 1, кодирует модулятор и декодирует демодулятор; примечание: не поддерживается одновременно с FEC и перемежением, а также с MSK и 4-FSK; разд. 16.2 (с. 43): при MSK манчестерский код нужно выключить
Нашли ошибку?
Смотрите также
- Обеление данных (whitening)XOR данных с псевдослучайной PN9 для равномерного спектра и работы приёмника
- Код BMCСамосинхронизирующийся код линии в USB Power Delivery
- NRZIКодирование USB: ноль — смена уровня, единица — без смены
- Код 4B/5BБлочный код линии: 4 бита данных — 5 бит на линии
- CC1101Трансивер ниже 1 ГГц по SPI: выводы, питание, токи, частота канала, FIFO
- OOK и ASKАмплитудная манипуляция: несущая включена — 1, выключена — 0