BMC — двухфазный код с меткой
Сообщения USB Power Delivery идут по одной линии CC без отдельного такта. Чтобы приёмник восстановил такт из самого сигнала и чтобы на линии не копилась постоянная составляющая, биты передают кодом BMC.
Обновлено Редакция GAW
BMC (Biphase Mark Code, двухфазный код с меткой) — способ кодирования битов на линии, при котором в начале каждого битового интервала уровень меняется всегда, а в середине интервала — только при передаче единицы. Ноль, таким образом, — один переход за бит, единица — два. Спецификация USB Power Delivery называет BMC разновидностью манчестерского кода и ссылается на стандарт IEC 60958-1 (USB PD, разд. 2.3, 5.3.3). В USB PD это код физического уровня: им передаются все сообщения по каналу конфигурации CC.
Почему именно BMC
- Такт внутри сигнала. Переход в начале каждого бита позволяет приёмнику восстановить такт без отдельной линии.
- Нет постоянной составляющей. Каждая единица сбалансирована сама по себе, два нуля подряд — тоже, поэтому разбаланс за пакет не превышает одного бита (разд. 5.3.3). Для линии CC это важно: на ней одновременно лежит постоянное напряжение от резисторов Rp и Rd, по которому определяется подключение и ток.
- Полярность не важна. Значение бита определяется наличием перехода в середине, а не его направлением.
Как устроен пакет USB PD
Пакет начинается с преамбулы — 64 бит чередующихся нулей и единиц, закодированных только BMC. Затем идут стартовая последовательность SOP* (по ней отличают сообщения для потребителя и для вилки кабеля), заголовок и данные, контрольная сумма CRC и конец пакета. Всё, кроме преамбулы, предварительно перекодируется кодом 4b5b и лишь потом передаётся BMC (разд. 5.3.1). Номинальная скорость — 300 кбит/с, допустимо от 270 до 330 кбит/с (табл. 5.9). Как эти сообщения складываются в договорённость о напряжении, рассказано в статье «USB Type-C и Power Delivery».
Не путать
С кодом NRZI, которым передаются данные USB 2.0 по линиям D+ и D−: в NRZI переход означает ноль, а единица — отсутствие перехода, и такт приходится поддерживать вставкой битов. В BMC переход в начале бита есть всегда.
Частые вопросы
Чем BMC отличается от манчестерского кода?
В классическом манчестерском коде значение бита задаёт направление перехода в середине интервала. В BMC важно не направление, а наличие перехода: в начале каждого бита уровень меняется всегда, а в середине — только у единицы. Поэтому BMC не боится перепутанной полярности линии.
Какова скорость BMC в USB PD?
Номинально 300 кбит/с с допуском от 270 до 330 кбит/с, то есть битовый интервал от 3,03 до 3,70 мкс (USB PD, табл. 5.9). Такая скорость передаётся по тому же проводу CC, где лежит постоянное напряжение от резисторов Rp и Rd.
Зачем перед данными 64 бита преамбулы?
Преамбула — чередующиеся нули и единицы — будит приёмник и даёт ему подстроиться под скорость передатчика. По её последним 32 битам приёмник вычисляет опорную скорость пакета, а сама преамбула в отличие от данных не перекодируется 4b5b (USB PD, разд. 5.3.1).
Источники
- USB-IF. Universal Serial Bus Power Delivery Specification, Release 3.2, Version 1.2, August 19, 2026 — разд. 2.3 (термины) — BMC: модификация манчестерского кода, у нуля один переход, у единицы два, ссылка на IEC 60958-1; разд. 5.3.1 — пакет: преамбула 64 бита из чередующихся 0 и 1 (кодируется только BMC, без 4b5b), затем SOP*, заголовок и данные в коде 4b5b, CRC; разд. 5.3.3 — переход в начале каждого битового интервала и второй в середине при передаче единицы, код практически не имеет постоянной составляющей; табл. 5.9 — fBitRate 270–300–330 кбит/с, tUnitInterval 3,03–3,70 мкс
- USB-IF. USB Type-C Cable and Connector Specification, Release 2.5, March 2026 — разд. 4.5 — сообщения USB PD передаются по проводу CC поверх напряжения, заданного Rp и Rd
Нашли ошибку?
Смотрите также
- USB Type-C и Power DeliveryCC, Rp и Rd, сообщения PD, PDO и RDO, PPS, EPR, кабели, контроллеры
- Канал конфигурации CCВыводы CC1 и CC2: подключение, ориентация, ток, обмен PD
- Код 4B/5BБлочный код линии: 4 бита данных — 5 бит на линии
- NRZIКодирование USB: ноль — смена уровня, единица — без смены
- CRCЦиклический избыточный код для обнаружения ошибок