Доминантный и рецессивный уровни
У шины CAN два логических состояния — доминантное и рецессивное. Если один узел передаёт доминантный бит, а другой рецессивный, на шине будет доминантный. Это свойство позволяет узлам делить шину без ведущего и без столкновений.
Обновлено Редакция GAW
Доминантный и рецессивный — два логических состояния шины CAN. По спецификации Bosch CAN 2.0 шина принимает одно из двух дополняющих значений, и если несколько узлов одновременно передают доминантный и рецессивный биты, на шине оказывается доминантный. Рецессивный бит — это, по сути, отсутствие активной передачи: его может перебить любой узел.
| Состояние | Логический уровень | TXD трансивера | CAN_H − CAN_L |
|---|---|---|---|
| Доминантное | 0 | ноль | 1,5–3 В у SN65HVD230 |
| Рецессивное | 1 | единица | около нуля |
Это свойство — основа арбитража: узлы начинают передачу одновременно и одновременно читают шину. Узел, который передал рецессивный бит, а увидел доминантный, понимает, что проиграл, и замолкает, а победитель продолжает без потери времени. Поскольку доминантный — ноль, побеждает сообщение с меньшим идентификатором.
Физически доминантное состояние создаёт передатчик трансивера, разводя линии CAN_H и CAN_L, а рецессивное — терминаторы, которые стягивают линии к одному уровню, — это дифференциальная передача с «пассивной» единицей. Опасность такой схемы — узел, застрявший в доминантном состоянии: он блокирует всю шину. Поэтому трансиверы вроде MCP2551 отключают передатчик, если TXD остаётся в нуле дольше 1,25 мс; выводы и режимы трансиверов — в карточке SN65HVD230 и MCP2551, протокол — в статье «Шина CAN».
Частые вопросы
Какой бит в CAN доминантный — ноль или единица?
Логический ноль. У трансиверов TI SN65HVD230 и Microchip MCP2551 ноль на входе TXD выдаёт на шину доминантное состояние, единица — рецессивное. Поэтому при арбитраже побеждает сообщение с меньшим идентификатором: в нём раньше встречается ноль.
Какое напряжение на шине CAN в доминантном и рецессивном состоянии?
В рецессивном обе линии CAN_H и CAN_L примерно на половине питания, и разность между ними около нуля. В доминантном передатчик разводит линии: у SN65HVD230 по TI дифференциальное напряжение — от 1,5 до 3 В.
Почему зависший узел может остановить всю шину CAN?
Если узел держит доминантный уровень постоянно, все остальные видят на шине доминантный и не могут передавать. Поэтому трансиверы вроде MCP2551 отключают передатчик, если TXD остаётся в нуле дольше 1,25 мс.
Источники
- Robert Bosch GmbH. CAN Specification Version 2.0, 1991 — шина имеет два дополняющих логических значения — доминантное и рецессивное; при одновременной передаче доминантного и рецессивного бита на шине будет доминантный; на этом основан арбитраж
- Texas Instruments. SN65HVD23x 3.3-V CAN Bus Transceivers (SLOS346O, revised April 2018) — ноль на входе D — доминантное состояние, единица — рецессивное; в доминантном дифференциальное напряжение 1,5–3 В, в рецессивном около нуля
- Microchip. MCP2551 High-Speed CAN Transceiver (DS20001667G, 2016) — TXD в нуле — доминантный уровень, в единице или без питания — рецессивный; отключение передатчика при TXD в нуле дольше 1,25 мс
Нашли ошибку?