Битстаффинг
В CAN нет отдельной линии такта, и приёмник подстраивается по фронтам сигнала. Чтобы фронты были всегда, передатчик после пяти одинаковых битов вставляет один противоположный, а приёмник его выбрасывает. Это и есть битстаффинг.
Обновлено Редакция GAW
Битстаффинг (bit stuffing, вставка битов) — правило кодирования шины CAN: после каждых пяти одинаковых битов подряд передатчик вставляет один бит противоположного значения, а приёмник удаляет его, восстанавливая исходные данные.
Зачем это нужно. У CAN нет отдельной линии тактового сигнала: каждый узел подстраивает свой битовый генератор по фронтам на шине — переходам между доминантным и рецессивным уровнями. Длинная серия одинаковых битов фронтов не даёт, и генераторы узлов могли бы разойтись. Вставленный бит гарантирует фронт хотя бы раз в шесть битов, а от этих фронтов отсчитывается и точка выборки.
По спецификации Bosch CAN 2.0 правило действует от начала кадра (SOF) до конца последовательности CRC. Поля фиксированной формы — разделитель CRC, поле ACK и конец кадра EOF — не заполняются; кадры ошибки и перегрузки тоже.
| Что происходит | Результат |
|---|---|
| Пять одинаковых битов в заполняемом поле | передатчик вставляет противоположный бит |
| Шесть одинаковых битов подряд в заполняемом поле | ошибка заполнения (stuff error) |
| Флаг ошибки | шесть доминантных битов — намеренное нарушение правила |
Вставки делает и удаляет сам контроллер CAN — программа их не видит, но они влияют на длину кадра: время передачи зависит от данных. Наглядно посмотреть кадр с вставленными битами можно в конструкторе кадра CAN, протокол целиком — в статье «Шина CAN».
Частые вопросы
Зачем в CAN вставляют лишние биты?
Для синхронизации. Приёмники CAN подстраивают свой битовый генератор по фронтам сигнала, а длинная последовательность одинаковых битов фронтов не даёт. Правило заполнения гарантирует фронт не реже чем раз в шесть битов.
Как битстаффинг влияет на длину кадра?
Увеличивает её в зависимости от данных: каждый вставленный бит занимает время на шине. Поэтому у кадров с одинаковой длиной данных время передачи немного различается, и худший случай считают с максимальным числом вставок. Посчитать кадр по битам с учётом вставок можно в конструкторе кадра CAN.
Что такое ошибка заполнения?
Шесть одинаковых битов подряд в той части кадра, где действует правило заполнения. Узел, обнаруживший её, передаёт флаг ошибки — и сам этот флаг из шести доминантных битов намеренно нарушает правило, чтобы его заметили все.
Источники
- Robert Bosch GmbH. CAN Specification Version 2.0, 1991 — часть B: правило заполнения — после пяти одинаковых битов передатчик вставляет противоположный, от SOF до конца последовательности CRC; разделитель CRC, поле ACK и EOF не заполняются; шесть одинаковых битов в заполняемом поле — ошибка заполнения; флаг ошибки — шесть доминантных битов
- Microchip. MCP2515 Stand-Alone CAN Controller with SPI Interface, DS20001801J — контроллер CAN сам вставляет и удаляет биты заполнения и сообщает об ошибке заполнения в регистре ошибок
Нашли ошибку?
Смотрите также
- CANCAN_H и CAN_L, терминаторы, кадр, арбитраж, ошибки, тайминг, MCP2515
- Конструктор кадра CANCAN и CAN FD по битам: CRC-15, CRC-17 и CRC-21, битстаффинг, длина кадра
- Доминантный и рецессивный уровниДва состояния шины CAN: кто побеждает, уровни, связь с арбитражем
- Точка выборки CANSample point: момент считывания бита и тайминг CAN