Skip to main content

CAN FD: ISO11898-1:2015 против Robert Bosh GmbH

Введение

Как многим известно, не все контроллеры с поддержкой CAN-FD одинаково полезны, поскольку существует  2 реализации:

  • Первая версия протокола CAN FD, описанная в документа от Роберта Боша в 2012г (эта версия также известна как non-ISO CAN FD)
  • Вторая версия протокола CAN FD, стандартизованная как обновленный ISO11898-1 в 2015г (эта версия встречается под рекоммендованом CiA термином ISO CAN FD)

Версии  CAN FD

Часто сложно понять какая же версия CAN FD реализована (особенно если речь идёт о первой версии — производители не очень красноречивы), но есть косвенные признаки:

  • упоминание в спецификации SBC (или Staff bit counter)
  • упоминание в программной модели бита переключения режимов FD: ISO/nonISO

При отсутствии этих признаков Вы, скорее всего, имеете дело с nonISO CAN FD. Важно отметить, что эти версии несовместимы между собой, однако на рынке до сих пор находится некоторое количество оборудования, поддерживающего только nonISO CAN FD (само собой в режиме передачи кадров традиционного CAN 2.0 совместимость присутствует). Для всех новых разработок настоятельно рекомендуется использование именно ISO CAN FD реализации. С точки зрения ПО и взаимодействия с регистровой моделью отличия версий никак не проявляются (различия протоколов никак не видны пользователю).

Отличия реализаций CAN FD

Для контроля целостности данных в пакетах традиционного CAN применяют CRC-кодирование  15-битным полиномом с хемминговым расстоянием равным 6-ти (означающим способность обнаружить любые 5 ошибок, случаным образом внесённые в пакет, либо до 15-ти подряд идущих ошибок битов). В реализации CAN FD это CRC был улучшен полиномом большей длины, поскольку хемминогово расстояние уменьшается с ростом длины пакеда данных. Это позволило сохранить ту же вероятность детектирования ошибок что и в традиционном CAN (несмотря на то, что CRC традиционного CAN попрежнему обеспечивал для кадров CAN FD обнаружение одной ошибки и весьма низкую вероятность необнаружения нескольких ошибок).

CAN FD использует 17-битный CRC с полиномом [x17 + x16 + x14 + x13 + x11 + x6 + x4 + x1 + x0] для пакетов длиной до 16 байт включительно, и 21-битный CRC с полиномом [x21 + x20 + x13 + x11 + x7 + x4 + x3 + x0] для пакетов большей длины, оба с хемминоговым расстоянием равным 6-ти для соответствующих длин пакетов.

Также в поле CRC стандарта CAN FD изменено правило бит-стаффинга: введено понятие т.н. FSB (Fixed stuff-bits) — независимых стаффинг-битов, всегда вставляемых через каждые 4 бита поля CRC и имеющих всегда инверсное по отношению к предшествующему биту значение.

Выше было описано то, что присутствует в обеих реализациях CAN FD. Дополнительно к вышеуказанному реализация ISO CAN FD предполагает наличие т.н. SBC (Stuff bit counter) — трёхбитного счётчика стаффинг-битов (сам счётчик считает в коде Грея по модулю 8) с защитой контролем чётности, который используется для раннего детектирования любой одиночной ошибки (сам счётчик считает в коде Грея по модулю 8). FSB-бит, следующий после бита чётности SBC, часто называют вторым битом чётности, поскольку он всегда имеет инверсное к биту чётности значение.

В итоге такое маленькое, но принципиальное отличие сделало несовместимым между собой ранюю и ISO-стандартизованную реализации CAN FD.

 

PS: если заметка помогла Вам, поделитесь ей с друзьями или коллегами: