Раздел 6.1 спецификации CAN :
ОШИБКА БИТА: Устройство, отправляющее бит по шине, также контролирует шину. ОШИБКА БИТА должна быть обнаружена в то битовое время, когда отслеживаемое битовое значение отличается от передаваемого битового значения. Исключением является отправка «рецессивного» бита во время заполненного битового потока поля ARBITRATION FIELD или во время ACK SLOT.
Таким образом, узел, который сначала передает «1», когда другой передает «0», заметит битовую ошибку, а затем сообщит об ошибке как обычно - передавая флаг ошибки (см. Раздел 3.1.3), как описано формально в разделе 6.2.
Неофициально, если этот узел активен по ошибкам (что должно быть обычным случаем), он передаст флаг ошибки из 6 доминирующих битов, который также будут обнаружены всеми другими узлами (как ошибка заполнения). Это приводит к полному уничтожению этого сообщения:
- никто не получит это
- Ни один из передатчиков не будет думать, что они успешно что-либо передали.
Затем каждый передатчик будет пытаться повторить передачу - в зависимости от точного времени повторных передач, один из них может запуститься в достаточной степени, прежде чем другой начнет регулировать усиление шины. В противном случае та же последовательность может повториться. (Или другое сообщение с более высоким приоритетом может на некоторое время отключить их обоих!)
Расширенный ответ, вдохновленный ответом @ clabbacchio ниже.
Вы упомянули «неприятные узлы», и clabbacchio делает правильное замечание, что если два узла передают в разное время, каждый получатель должен решить, что делать с его множественными приемами.
Это было продемонстрировано взломом в прошлом году . В этом разделе в разделе «Особенности PSCM» обсуждается, как злоумышленник может синхронизироваться с обычными сообщениями на шине и воспроизводить свое злое сообщение непосредственно перед тем, которое собирается отправить «хороший» ECU. Принимающий ECU принимает более раннее сообщение, обновляет свой счетчик сообщений и затем отбрасывает «хорошие» сообщения как ошибочные, потому что его счетчик сообщений не увеличился.