Перейти к содержанию

Манчестерский код (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).

В радиочипах

CC1101SX1276 (FSK)
ВключениеMDMCFG2.MANCHESTER_EN = 1DcFree = 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).

Источники

  1. 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; одновременно включается только один из способов — манчестерский код или обеление
  2. 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 манчестерский код нужно выключить

Нашли ошибку?