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

Битстаффинг

В CAN нет отдельной линии такта, и приёмник подстраивается по фронтам сигнала. Чтобы фронты были всегда, передатчик после пяти одинаковых битов вставляет один противоположный, а приёмник его выбрасывает. Это и есть битстаффинг.

Обновлено Редакция GAW

Битстаффинг (bit stuffing, вставка битов) — правило кодирования шины CAN: после каждых пяти одинаковых битов подряд передатчик вставляет один бит противоположного значения, а приёмник удаляет его, восстанавливая исходные данные.

Зачем это нужно. У CAN нет отдельной линии тактового сигнала: каждый узел подстраивает свой битовый генератор по фронтам на шине — переходам между доминантным и рецессивным уровнями. Длинная серия одинаковых битов фронтов не даёт, и генераторы узлов могли бы разойтись. Вставленный бит гарантирует фронт хотя бы раз в шесть битов, а от этих фронтов отсчитывается и точка выборки.

По спецификации Bosch CAN 2.0 правило действует от начала кадра (SOF) до конца последовательности CRC. Поля фиксированной формы — разделитель CRC, поле ACK и конец кадра EOF — не заполняются; кадры ошибки и перегрузки тоже.

Что происходитРезультат
Пять одинаковых битов в заполняемом полепередатчик вставляет противоположный бит
Шесть одинаковых битов подряд в заполняемом полеошибка заполнения (stuff error)
Флаг ошибкишесть доминантных битов — намеренное нарушение правила

Вставки делает и удаляет сам контроллер CAN — программа их не видит, но они влияют на длину кадра: время передачи зависит от данных. Наглядно посмотреть кадр с вставленными битами можно в конструкторе кадра CAN, протокол целиком — в статье «Шина CAN».

Частые вопросы

Зачем в CAN вставляют лишние биты?

Для синхронизации. Приёмники CAN подстраивают свой битовый генератор по фронтам сигнала, а длинная последовательность одинаковых битов фронтов не даёт. Правило заполнения гарантирует фронт не реже чем раз в шесть битов.

Как битстаффинг влияет на длину кадра?

Увеличивает её в зависимости от данных: каждый вставленный бит занимает время на шине. Поэтому у кадров с одинаковой длиной данных время передачи немного различается, и худший случай считают с максимальным числом вставок. Посчитать кадр по битам с учётом вставок можно в конструкторе кадра CAN.

Что такое ошибка заполнения?

Шесть одинаковых битов подряд в той части кадра, где действует правило заполнения. Узел, обнаруживший её, передаёт флаг ошибки — и сам этот флаг из шести доминантных битов намеренно нарушает правило, чтобы его заметили все.

Источники

  1. Robert Bosch GmbH. CAN Specification Version 2.0, 1991 — часть B: правило заполнения — после пяти одинаковых битов передатчик вставляет противоположный, от SOF до конца последовательности CRC; разделитель CRC, поле ACK и EOF не заполняются; шесть одинаковых битов в заполняемом поле — ошибка заполнения; флаг ошибки — шесть доминантных битов
  2. Microchip. MCP2515 Stand-Alone CAN Controller with SPI Interface, DS20001801J — контроллер CAN сам вставляет и удаляет биты заполнения и сообщает об ошибке заполнения в регистре ошибок

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