Кадр классического CAN — это цепочка битов без пауз: начало кадра, идентификатор, служебные биты, до 8 байт данных, 15-битная CRC и хвост фиксированной формы. На шине к ним добавляются вставленные биты, поэтому два кадра с одинаковым числом байтов могут различаться по длине. Конструктор собирает кадр так, как его выдаёт контроллер, и показывает каждый бит: к какому полю он относится и не вставлен ли он передатчиком.
Коротко
- Стандартный кадр: SOF, идентификатор 11 бит, RTR, IDE, r0, DLC, 0–8 байт данных, CRC 15 бит, разделитель, ACK, разделитель, EOF 7 бит — 44 + 8n бит без вставок.
- Расширенный кадр: после 11 бит базового идентификатора идут SRR и IDE, 18 бит расширения, RTR, r1 и r0 — 64 + 8n бит без вставок.
- Битстаффинг: после пяти одинаковых битов подряд передатчик вставляет противоположный; правило действует от SOF до последнего бита CRC, вставленный бит входит в следующую серию.
- CRC-15: полином 0x4599, начальное значение ноль; считается по битам от SOF до конца данных без вставленных битов.
- Худший случай: стандартный кадр с 8 байтами — до 132 бит, расширенный — до 157; между кадрами ещё 3 рецессивных бита.
- CAN FD: до 64 байт данных, CRC-17 или CRC-21 со вставленными битами, счётчик вставок в начале поля CRC и фиксированные вставленные биты; с BRS биты от ESI до разделителя CRC идут на скорости фазы данных.
Как пользоваться конструктором
Выберите формат кадра, введите идентификатор в шестнадцатеричном виде и байты данных — от нуля до восьми. DLC подставится сам: в кадре данных он равен числу байтов. Для удалённого кадра данных нет, и DLC выбирается отдельно. Скорость шины нужна только для длительности: на биты она не влияет.
Под панелью расчёта — лента битов в порядке передачи. Поля окрашены так же, как на схеме кадра в статье о шине CAN, вставленные биты выделены и помечены треугольником, под каждым полем подписано значение. Линия над битами повторяет сигнал на выводе RXD или TXD трансивера: вверху рецессивный уровень, внизу доминантный. Ниже та же информация таблицей — её удобнее читать с телефона.
Переключатель «Слот ACK» задаёт, как кадр выглядит на шине. Передатчик выдаёт в этом слоте рецессивный бит, а приёмники заменяют его доминантным, поэтому на работающей шине там ноль. Вариант «Нет ответа» показывает кадр без подтверждения — таким он виден на выводе TXD передатчика или на шине с единственным узлом.
Переключатель «Протокол» собирает кадр CAN FD в формате ISO 11898-1:2015. Данных — от 0 до 64 байт; если их число не совпадает с длиной, которую можно записать в DLC, кадр дополняется байтом-заполнителем до ближайшей допустимой. Две скорости — номинальная и фазы данных — нужны для длительности кадра; без переключения скорости (BRS = 0) весь кадр идёт на номинальной.
Режим «Разобрать биты» работает в обратную сторону: принимает строку из нулей и единиц классического кадра CAN и раскладывает её по полям. Все параметры хранятся в адресе страницы, так что ссылкой на собранный кадр можно поделиться.
Поля кадра CAN
| Поле | Бит | Стандартный | Расширенный | Что передаётся |
|---|---|---|---|---|
| SOF | 1 | да | да | доминантный бит начала кадра |
| ID (ID-A) | 11 | ID10–ID0 | ID28–ID18 | идентификатор или его базовая часть, старшим битом вперёд |
| RTR | 1 | да | после ID-B | 0 — кадр данных, 1 — удалённый кадр |
| SRR | 1 | — | да | рецессивный бит на месте RTR стандартного кадра |
| IDE | 1 | 0 | 1 | признак формата: доминантный — стандартный, рецессивный — расширенный |
| ID-B | 18 | — | ID17–ID0 | расширение идентификатора |
| r1 | 1 | — | да | резервный бит, передаётся доминантным |
| r0 | 1 | да | да | резервный бит, передаётся доминантным |
| DLC | 4 | да | да | число байтов данных, 0–8 |
| DATA | 8n | да | да | данные, каждый байт старшим битом вперёд; в удалённом кадре поля нет |
| CRC | 15 | да | да | контрольная последовательность |
| DEL | 1 | да | да | разделитель CRC, рецессивный |
| ACK | 1 | да | да | слот подтверждения: передатчик выдаёт рецессивный бит, приёмники — доминантный |
| DEL | 1 | да | да | разделитель ACK, рецессивный |
| EOF | 7 | да | да | конец кадра, семь рецессивных битов |
За кадром следует межкадровый интервал (intermission) — три рецессивных бита. В кадр он не входит, но при подсчёте загрузки шины его прибавляют к каждому кадру: следующий кадр может начаться только после него.
Порядок полей в расширенном кадре выбран не случайно. SRR и IDE стоят там, где у стандартного кадра RTR и IDE, и оба рецессивные. Поэтому при одинаковых первых 11 битах идентификатора стандартный кадр выигрывает арбитраж у расширенного. Полный идентификатор расширенного кадра складывается из двух частей: базовая даёт старшие 11 бит, расширение — младшие 18.
Резервные биты передатчик обязан выдавать доминантными, а приёмник по спецификации Bosch принимает их в любом сочетании. В CAN FD на месте r0 стандартного кадра и r1 расширенного стоит рецессивный бит — признак нового формата. Такие кадры конструктор собирает в режиме CAN FD, а разбор строки битов работает только с классическим CAN.
Спецификация Bosch CAN 2.0 запрещает идентификаторы, у которых семь старших битов рецессивные: в стандартном кадре это 0x7F0–0x7FF. Конструктор соберёт и такой кадр, но предупредит об этом.
Битстаффинг: когда вставляется бит
Приёмники CAN подстраивают свой отсчёт битов по перепадам сигнала, а длинная серия одинаковых битов перепадов не даёт. Поэтому передатчик следит за потоком: после пяти одинаковых битов подряд он вставляет один бит противоположного уровня. Приёмник делает обратное — после пяти одинаковых битов выбрасывает следующий. Если шестой бит оказался таким же, это ошибка заполнения (stuff error).
Три правила, на которых чаще всего ошибаются при ручном разборе:
- Вставленный бит участвует в счёте. Он первый в следующей серии: после вставленной единицы достаточно ещё четырёх единиц, чтобы появилась новая вставка.
- Граница действия — последний бит CRC. Правило работает от SOF до конца последовательности CRC. Разделитель CRC, слот ACK, разделитель ACK и EOF имеют фиксированную форму, вставок в них нет.
- Вставка возможна и после CRC. Если пятый одинаковый бит подряд — последний бит CRC, вставленный бит передаётся сразу за ним, перед разделителем. В записи сети NMEA 2000 из набора тестов sigrok так заканчиваются кадры с CRC 0x0120 и 0x00A0: за пятью нулями идёт вставленная единица и только потом разделитель.
В расчёт CRC вставленные биты не входят: передатчик считает CRC до вставки, приёмник — после удаления.
Как считается CRC-15
CRC кадра CAN — остаток от деления последовательности битов на полином x15 + x14 + x10 + x8 + x7 + x4 + x3 + 1. В шестнадцатеричной записи без старшего члена это 0x4599. В последовательность входят SOF, поле арбитража, поле управления и данные — в том порядке, в каком они передаются, и без вставленных битов.
Спецификация Bosch описывает расчёт как сдвиговый регистр из 15 бит. Перед кадром он обнуляется, а для каждого очередного бита выполняются три действия:
- Сложить по модулю 2 очередной бит и старший бит регистра.
- Сдвинуть регистр на один бит влево, в младший бит записать ноль.
- Если на первом шаге получилась единица, сложить регистр по модулю 2 с 0x4599.
После последнего бита данных в регистре лежит CRC. Она передаётся старшим битом вперёд, все 15 бит. Приёмник выполняет тот же расчёт по принятым битам и сравнивает результат с принятой последовательностью.
В каталоге алгоритмов этот вариант называется CRC-15/CAN: полином 0x4599, начальное значение 0, без отражения и финального XOR. Он есть в калькуляторе CRC, но тот работает с байтами, а в кадре до поля CRC 19 + 8n бит. Выручает нулевое начальное значение: нули перед сообщением результат не меняют. Допишите спереди пять нулевых битов, и заголовок стандартного кадра займёт ровно три байта — число ID · 128 + DLC, для удалённого кадра ещё плюс 64. Байты данных идут за ним без сдвига. У расширенного кадра до CRC 39 + 8n бит, там хватает одного нулевого бита.
Пример: кадр 0x110 с данными 00 11
Соберём вручную стандартный кадр данных с идентификатором 0x110 и двумя байтами 00 11 — он же открыт в конструкторе по умолчанию.
Шаг 1. Поля до CRC. Всего 19 + 16 = 35 бит:
| Поле | Биты | Значение |
|---|---|---|
| SOF | 0 | — |
| ID | 001 0001 0000 | 0x110 |
| RTR, IDE, r0 | 0 0 0 | кадр данных, стандартный формат |
| DLC | 0010 | 2 байта |
| DATA | 0000 0000 0001 0001 | 00 11 |
Шаг 2. CRC. Первые три бита — нули, регистр остаётся нулевым. Четвёртый бит — единица: после сдвига регистр складывается с полиномом и становится равным 0x4599. Пятый бит — ноль, но старший бит регистра уже единица, поэтому после сдвига снова выполняется сложение: 0x0B32 ⊕ 0x4599 = 0x4EAB. Дальше так же, бит за битом:
| Обработано | Бит | Регистр |
|---|---|---|
| SOF и идентификатор | 12 | 0x69B1 |
| RTR, IDE, r0 и DLC | 19 | 0x0F5E |
| первый байт данных | 27 | 0x11F4 |
| второй байт данных | 35 | 0x4C12 |
CRC равна 0x4C12, в двоичном виде — 100 1100 0001 0010. Проверка байтовым калькулятором: пять нулей и 35 бит кадра складываются в байты 00 88 02 00 11, и CRC-15/CAN от них — те же 0x4C12.
Шаг 3. Вставленные биты. Под правило попадают 50 бит: 35 бит до CRC и 15 бит CRC. Серий из пяти одинаковых битов четыре:
- четыре младших бита идентификатора и RTR — пять нулей, вставка сразу после RTR, на границе полей;
- DLC0 и четыре старших бита первого байта данных — вставка в середине байта;
- оставшиеся четыре нуля первого байта и старший бит второго — вставка после первого бита второго байта;
- пять нулей внутри CRC — вставка после десятого бита CRC.
Между первой и второй вставками стоят четыре нуля подряд — IDE, r0 и два старших бита DLC. Вставки там нет: серию обрывает единица в DLC.
Шаг 4. Хвост. Рецессивный разделитель CRC, слот ACK — на шине он доминантный, — рецессивный разделитель ACK и семь рецессивных битов EOF.
Кадр целиком, вставленные биты — в скобках:
0001000100000[1]0000100000[1]00000[1]00100011001100000[1]100101011111111
Получилось 64 бита. На скорости 500 кбит/с бит длится 2 мкс, кадр — 128 мкс, вместе с межкадровым интервалом — 134 мкс. Такой кадр — не учебная абстракция: именно эта последовательность записана на выводе RX контроллера MCP2515 отладочной платы Microchip MCP2515DM-BM и опубликована побитово в тестах декодера sigrok. Тесты конструктора сверяют с этими записями семь кадров, стандартных и расширенных, включая два кадра со вставкой после последнего бита CRC.
Расширенный кадр по битам
Идентификатор 0x14611234 разбит на базовую часть 0x518 и расширение 0x11234; между ними — рецессивные SRR и IDE. В этом кадре вставленный бит снова попал на границу полей: пять нулей заканчиваются на r0, и вставка стоит перед DLC. Из-за нулевых байтов данных вставок восемь, а две последние приходятся на CRC, где подряд идут единицы.
Кадр CAN FD по битам
В кадре CAN FD те же начало и конец, что в классическом, но середина устроена иначе. В базовом формате за 11 битами идентификатора идут:
| Поле | Бит | Значение |
|---|---|---|
| RRS | 1 | доминантный: удалённых кадров в CAN FD нет |
| IDE | 1 | доминантный — базовый формат, рецессивный — расширенный |
| FDF | 1 | рецессивный — признак кадра CAN FD |
| res | 1 | резервный, доминантный |
| BRS | 1 | рецессивный — дальше скорость фазы данных |
| ESI | 1 | доминантный — у передатчика активное состояние ошибок, рецессивный — пассивное |
| DLC | 4 | 0–8 — столько же байтов, 9–15 — 12, 16, 20, 24, 32, 48 и 64 байта |
В расширенном формате, как и в классическом, после базового идентификатора стоят рецессивные SRR и IDE и 18 бит расширения, а за ними RRS, FDF, res, BRS, ESI и DLC. Правило пяти одинаковых битов работает от SOF до последнего бита данных. Дальше начинается поле CRC с фиксированными вставленными битами: один перед полем и по одному после каждых четырёх битов, каждый — инверсия предыдущего бита. Если данные закончились пятью одинаковыми битами, обычная вставка не делается: по ISO 11898-1:2015 там стоит только фиксированный бит, и двух вставленных подряд не бывает.
Поле CRC начинается со счётчика: число вставленных битов от SOF до конца данных по модулю 8 в коде Грея и бит чётности. Затем CRC-17, если данных до 16 байт, или CRC-21 для более длинных. Регистр CRC начинает с единицы в старшем разряде, а в расчёт входят все биты от SOF до конца данных вместе со вставленными и четыре бита счётчика; фиксированные вставленные биты в расчёт не входят. Подробнее о том, зачем понадобились счётчик и новое начальное значение, — в статье о CAN FD.
Пример. Кадр с идентификатором 0x42 и байтами 00 01 … 07 с переключением скорости — тот же, что записан на шине в тестах sigrok:
- до конца данных вставлено 10 битов, счётчик — 10 mod 8 = 2, в коде Грея 011, чётность 0; поле счётчика на шине — 0 011 0 1 вместе с фиксированными битами;
- CRC-17 равна 0x1B77F; фиксированных вставленных битов в поле CRC шесть;
- всего 133 бита: 27 на номинальной скорости и 106 — от ESI до разделителя CRC — на скорости фазы данных. При 500 кбит/с и 2 Мбит/с кадр длится 54 + 53 = 107 мкс.
Тот же идентификатор с 64 байтами данных 00 … 3F — 602 бита, CRC-21 0x155D3B, 341,5 мкс на тех же скоростях. Восемь классических кадров по 8 байт с такими данными заняли бы на 500 кбит/с около 2 мс. Тесты конструктора сверяют бит в бит все восемь кадров CAN FD из набора sigrok, а структуру поля CRC — с примерами из технического документа CiA.
Длина и длительность кадра
Без вставленных битов длина кадра от SOF до последнего бита EOF зависит только от формата и числа байтов данных n:
Число вставленных битов S зависит от содержимого. Оценка сверху следует из правила: первая вставка возможна после пяти бит, каждая следующая — ещё через четыре. Если под правило попадает g + 8n бит, то
Здесь g — число битов от SOF до конца CRC без данных. Вместе с тремя битами межкадрового интервала самый длинный стандартный кадр занимает 55 + 10n бит, расширенный — 80 + 10n; в таком виде формулу приводят Дэвис, Бернс, Брил и Люккин в работе о расчёте времени отклика сообщений CAN.
| Байтов данных | Стандартный, бит | Расширенный, бит |
|---|---|---|
| 0 | 44–52 | 64–77 |
| 1 | 52–62 | 72–87 |
| 2 | 60–72 | 80–97 |
| 4 | 76–92 | 96–117 |
| 8 | 108–132 | 128–157 |
Диапазон — от кадра без единой вставки до оценки сверху; три бита межкадрового интервала в таблицу не входят. Оценка не всегда достижима: часть битов кадра задана жёстко, а CRC нельзя выбрать. Перебор всех стандартных кадров без данных даёт не больше 6 вставок при оценке 8. Для расчёта времени доставки сообщений берут именно оценку сверху — запас здесь полезен.
Длительность кадра и наибольшая частота следования кадров при скорости шины fбит:
Для стандартного кадра с 8 байтами на 500 кбит/с это от 216 до 264 мкс на кадр и от 3700 до 4500 кадров в секунду. Спецификация Bosch при этом советует не загружать шину на все 100 %.
Разбор строки битов
В режиме «Разобрать биты» вставьте последовательность, считанную с логического анализатора или осциллографа: 0 — доминантный уровень, 1 — рецессивный. Рецессивные биты перед SOF пропускаются, пробелы и переносы строк не мешают. Инструмент убирает вставленные биты, раскладывает кадр по полям и проверяет то же, что проверяет приёмник:
| Проверка | Что считается нарушением |
|---|---|
| Заполнение | шестой одинаковый бит подряд между SOF и концом CRC |
| CRC | принятая последовательность не совпала с расчётом по принятым битам |
| Форма | доминантный бит в разделителе CRC, разделителе ACK или в EOF |
| Подтверждение | рецессивный слот ACK — кадр не подтвердил ни один узел |
| Длина | строка закончилась раньше, чем кадр |
Отдельно отмечаются вещи, которые ошибкой протокола не являются, но заслуживают внимания: DLC больше 8, рецессивные резервные биты, доминантный SRR. DLC от 9 до 15 в CAN 2.0 использовать нельзя; если такой кадр всё же встретился, контроллеры классического CAN читают его как кадр с 8 байтами — так же поступает и разбор.
Место ошибки обведено на ленте, а в сообщении назван номер бита. При ошибке заполнения разбор останавливается: настоящий узел в этот момент тоже бросает приём и передаёт флаг ошибки. Шесть доминантных битов подряд посреди кадра — как раз активный флаг ошибки, выставленный каким-то узлом.
Типичные ошибки при чтении кадра с осциллографа
Перепутана полярность. На выводах RXD и TXD трансивера доминантный бит — логический ноль. На линии CAN_H тот же бит выглядит как импульс вверх, примерно с 2,5 до 3,5 В, на CAN_L — вниз, до 1,5 В. Если разбирать осциллограмму CAN_H как логический сигнал, все биты окажутся инвертированными: кадр «начнётся» с единицы, а в конце вместо семи единиц EOF будут нули. Подробнее об уровнях — в статье о шине CAN.
Вставленные биты приняты за данные. Каждая пропущенная вставка сдвигает все следующие поля на бит: начало кадра читается верно, а всё, что правее, — уже нет. Идите по сигналу слева направо и после пяти одинаковых битов вычёркивайте шестой.
Счёт серии начат заново после вставки. Вставленный бит — первый бит следующей серии. Если после вставленного нуля идут ещё четыре нуля, следующий бит тоже вставленный.
Длинная серия единиц в конце принята за сбой. Разделитель ACK, семь битов EOF и три бита межкадрового интервала — это одиннадцать рецессивных битов подряд, и вставок в них нет. Ошибка заполнения возможна только до конца CRC.
Слот ACK смотрят на выводе TXD. Там он рецессивный всегда: подтверждение ставят другие узлы. Чтобы увидеть подтверждение, смотрите шину или вывод RXD.
Мало выборок на бит. В тестах sigrok шина 125 кбит/с записана с частотой 4 МГц — 32 выборки на бит, и кадры разбираются без ошибок. Сеть 250 кбит/с там же записана с частотой 500 кГц — всего две выборки на бит. В описании тестов эта частота названа низковатой, и в записи действительно есть кадр, который не сходится по CRC.
CRC считают по 16 битам или вместе с вставками. В кадре 15 бит CRC и рецессивный разделитель за ними. Расчёт идёт по битам без вставок и заканчивается на последнем бите данных — у удалённого кадра и кадра без данных на последнем бите DLC.
В удалённом кадре ищут данные. Если RTR рецессивный, за DLC сразу следует CRC, какое бы число ни стояло в DLC.
Декодер CAN в логическом анализаторе делает всё это сам, но ему нужна правильная скорость и уровень, снятый с RXD или TXD, а не с линии. Когда декодер показывает ошибку, строка битов и конструктор помогают понять, в каком именно поле она возникла. Как настроить скорость и точку выборки самого контроллера, рассказано в разделе о битовом тайминге статьи о шине CAN.
Частые вопросы
Сколько бит в кадре CAN?
Стандартный кадр данных от SOF до конца EOF занимает 44 + 8n бит, расширенный — 64 + 8n, где n — число байтов данных от 0 до 8. К этому добавляются вставленные биты: в стандартном кадре с 8 байтами их может быть до 24, в расширенном — до 29. Итого стандартный кадр с 8 байтами — от 108 до 132 бит, расширенный — от 128 до 157. Между кадрами шина ещё три бита остаётся рецессивной.
Чем кадр CAN FD отличается от классического по битам?
На месте RTR стоит доминантный RRS, за IDE идут рецессивный FDF — признак CAN FD, резервный res, BRS — переключение на скорость фазы данных — и ESI. DLC 9–15 означает 12, 16, 20, 24, 32, 48 и 64 байта. Правило пяти одинаковых битов действует только до конца данных, а в поле CRC вставленные биты стоят на фиксированных местах: перед счётчиком вставок и после каждых четырёх битов. CRC — 17 или 21 бит, и в её расчёт входят вставленные биты.
Как посчитать CRC кадра CAN?
CRC-15 считается по битам от SOF до последнего бита данных без вставленных битов: полином 0x4599, начальное значение регистра ноль, биты идут в том порядке, в каком передаются. Проверить можно и байтовым калькулятором CRC: к битам стандартного кадра спереди дописывают пять нулей, тогда заголовок занимает ровно три байта, а байты данных идут следом. Для кадра 0x110 с данными 00 11 это байты 00 88 02 00 11, CRC-15/CAN от них — 0x4C12.
Где в кадре CAN не бывает вставленных битов?
В разделителе CRC, слоте ACK, разделителе ACK и поле EOF: у них фиксированная форма. Правило пяти одинаковых битов действует от SOF до последнего бита CRC включительно. Поэтому в конце каждого кадра законно идут подряд восемь рецессивных битов — разделитель ACK и семь битов EOF, а с межкадровым интервалом — одиннадцать. Если же CRC заканчивается пятью одинаковыми битами, вставленный бит стоит прямо перед разделителем CRC.
Почему осциллограф показывает ноль в слоте ACK, хотя передатчик отправляет единицу?
Передатчик выдаёт в слоте ACK рецессивный бит, а каждый приёмник, у которого сошлась CRC, в этот момент выставляет доминантный. На шине и на выводе RXD любого узла виден доминантный бит — ноль. На выводе TXD передатчика в этом месте остаётся единица. Если единица в слоте ACK видна и на шине, кадр никто не принял — например, на линии нет второго узла в рабочем режиме.
Сколько кадров в секунду проходит по шине CAN?
Скорость шины делят на длину кадра вместе с тремя битами межкадрового интервала. Стандартный кадр с 8 байтами занимает от 111 до 135 бит, поэтому на 500 кбит/с это примерно от 3700 до 4500 кадров в секунду, на 125 кбит/с — от 925 до 1125. Точное число зависит от того, сколько битов вставлено в конкретный кадр; калькулятор считает его для введённых данных и для худшего случая.
Чем удалённый кадр отличается от кадра данных?
В удалённом кадре бит RTR рецессивный и нет поля данных: за DLC сразу идёт CRC. При этом DLC не обязан быть нулём — в него записывают длину кадра данных, который запрашивается. Стандартный удалённый кадр без вставленных битов всегда занимает 44 бита, расширенный — 64. Если кадр данных и удалённый кадр с одним идентификатором начаты одновременно, арбитраж выигрывает кадр данных: его RTR доминантный.
Источники
- Robert Bosch GmbH. CAN Specification Version 2.0, 1991 — часть B: разд. 3.2.1 — поля кадра данных и алгоритм CRC, 3.2.2 — удалённый кадр, 3.2.5 — межкадровый интервал, 5 — когда кадр считается принятым, 6 — битстаффинг, 7 — типы ошибок и флаг ошибки
- R. I. Davis, A. Burns, R. J. Bril, J. J. Lukkien. Controller Area Network (CAN) schedulability analysis: Refuted, revisited and revised. Real-Time Systems, vol. 35, 2007 — разд. 2.1.3, формулы (1)–(3): наибольшая длина кадра с вставленными битами и межкадровым интервалом
- Linux kernel. include/linux/can/length.h — число битов в полях кадра, худший случай битстаффинга, DLC больше 8 в классическом CAN
- sigrok project. sigrok-test: decoder/test/can — побитовые расшифровки кадров, записанных на шине: отладочная плата Microchip MCP2515DM-BM и сеть NMEA 2000, а также восемь кадров CAN FD с идентификатором 0x42 (базовый и расширенный формат, 8 и 64 байта, с переключением скорости и без); по ним проверен конструктор
- Robert Bosch GmbH. CAN with Flexible Data-Rate, Specification Version 1.0, 17 April 2012 — форматы кадров CAN FD и порядок битов, коды DLC, полиномы CRC-17 и CRC-21, переключение скорости в точках выборки BRS и разделителя CRC
- A. Mutter (Robert Bosch GmbH). Summary of the discussion regarding the CAN FD CRC issue, CiA white paper, 21.12.2014 — разд. 6.2 — счётчик вставленных битов: по модулю 8, код Грея, бит чётности; 6.4 — начальное значение CRC «10…0»; 6.5 — порядок битов кадра ISO CAN FD; 6.6 — примеры поля CRC с фиксированными вставленными битами
- V. Mailhol. [PATCH v5 1/3] can: length: fix bitstuffing count. Linux kernel mailing list, 2023 — цитаты ISO 11898-1:2015, разд. 10.4.2.6 и 10.5: счётчик вставленных битов в начале поля CRC, фиксированный бит перед ним — единственный, даже если данные закончились пятью одинаковыми битами
- Renesas. Introduction to CAN: application note REJ05B0804-0100, Rev. 1.00, 2006 — табл. 3 — уровни CAN_H и CAN_L, разд. 6.2 и 6.3 — поля кадров и диапазон расчёта CRC, разд. 6.8 — действия передатчика и приёмника при битстаффинге
- Microchip. AN713: Controller Area Network (CAN) Basics, DS00713A, 1999 — ошибки CRC, формы, заполнения и подтверждения; синхронизация приёмников по перепадам
Где пригодится
Встроить калькулятор на свой сайт
Скопируйте код и вставьте его в HTML страницы, статьи или вики. Виджет бесплатный, без рекламы, счётчиков и cookie. Условие одно — ссылка на GAW под рамкой остаётся на месте. Подробнее о виджетах
<iframe src="https://gaw.ru/embed/can-frame/" title="Конструктор кадра CAN и CAN FD" width="100%" height="640" style="border:1px solid #e3e5e9;border-radius:8px" loading="lazy" allow="clipboard-write"></iframe>
<p style="margin:6px 0 0;font-size:14px">Калькулятор: <a href="https://gaw.ru/tools/can-frame/">Конструктор кадра CAN и CAN FD</a> — GAW.ru</p>Автоподстройка высоты рамки
Если сайт разрешает скрипты, добавьте этот код один раз в любом месте страницы: рамка будет менять высоту вместе с результатом расчёта.
<script>window.addEventListener("message",function(e){if(e.origin!=="https://gaw.ru"||!e.data||e.data.type!=="gaw:embed-height")return;var f=document.querySelectorAll('iframe[src^="https://gaw.ru/embed/"]');for(var i=0;i<f.length;i++)if(f[i].contentWindow===e.source)f[i].style.height=e.data.height+"px"})</script>Обновлено .
Нашли ошибку в расчёте?