Передача различных сообщений с одним и тем же идентификатором на шине CAN


12

CAN-арбитраж осуществляется с помощью идентификаторов, и любой узел на шине может передавать с любым идентификатором (в идеале это не должно быть, но неприятный узел может).

Что если два разных узла, подключенных к одной и той же шине CAN, передают сообщения с одинаковыми идентификаторами, но разными байтами данных?

Мое мышление: оно будет генерировать мусор в автобусе. Тот, кто имеет доминирующие биты, будет передан только им.


1
Я не уверен, почему они сделали это так. Я бы подумал, что для арбитража было бы больше смысла применять ко всему сообщению.
Ракетный магнит

Ответы:


12

Раздел 6.1 спецификации CAN :

ОШИБКА БИТА: Устройство, отправляющее бит по шине, также контролирует шину. ОШИБКА БИТА должна быть обнаружена в то битовое время, когда отслеживаемое битовое значение отличается от передаваемого битового значения. Исключением является отправка «рецессивного» бита во время заполненного битового потока поля ARBITRATION FIELD или во время ACK SLOT.

Таким образом, узел, который сначала передает «1», когда другой передает «0», заметит битовую ошибку, а затем сообщит об ошибке как обычно - передавая флаг ошибки (см. Раздел 3.1.3), как описано формально в разделе 6.2.

Неофициально, если этот узел активен по ошибкам (что должно быть обычным случаем), он передаст флаг ошибки из 6 доминирующих битов, который также будут обнаружены всеми другими узлами (как ошибка заполнения). Это приводит к полному уничтожению этого сообщения:

  • никто не получит это
  • Ни один из передатчиков не будет думать, что они успешно что-либо передали.

Затем каждый передатчик будет пытаться повторить передачу - в зависимости от точного времени повторных передач, один из них может запуститься в достаточной степени, прежде чем другой начнет регулировать усиление шины. В противном случае та же последовательность может повториться. (Или другое сообщение с более высоким приоритетом может на некоторое время отключить их обоих!)


Расширенный ответ, вдохновленный ответом @ clabbacchio ниже.

Вы упомянули «неприятные узлы», и clabbacchio делает правильное замечание, что если два узла передают в разное время, каждый получатель должен решить, что делать с его множественными приемами.

Это было продемонстрировано взломом в прошлом году . В этом разделе в разделе «Особенности PSCM» обсуждается, как злоумышленник может синхронизироваться с обычными сообщениями на шине и воспроизводить свое злое сообщение непосредственно перед тем, которое собирается отправить «хороший» ECU. Принимающий ECU принимает более раннее сообщение, обновляет свой счетчик сообщений и затем отбрасывает «хорошие» сообщения как ошибочные, потому что его счетчик сообщений не увеличился.


1

В своем вопросе вы выдвигаете эту гипотезу:

Тот, кто имеет доминирующие биты, будет передан только им.

Это предполагает, что два сообщения передаются в одно и то же время, что является частным случаем более общей проблемы. Действительный ответ Мартина покрывает эту конкретную проблему, но игнорирует (более общий) случай, когда два узла осуществляют передачу в разное время.

В этом случае на шине будут циркулировать два сообщения с одним и тем же идентификатором, но разной полезной нагрузкой, и получатели должны различать эти два сообщения и решать, нужен ли им контент. Если им не удается различить два сообщения, они могут неверно истолковать данные и вызвать более серьезные проблемы, чем просто кадры ошибок.

Например, скажем, что одно сообщение содержит показание датчика температуры, а другое содержит целевое положение привода в одном и том же байте (ДОЛЖНО БЫТЬ НИКОГДА НЕ ПРОИЗОЙДЕТ В РЕАЛЬНОЙ ЖИЗНИ), вы можете получить привод в качестве цели, даже не зная об этом.


Да, должна быть реализована логика, чтобы различать два сообщения. Но мой вопрос был, если арбитраж проводится на основе идентификатора, то что произойдет, если идентификатор сообщения один и тот же, а данные разные.
Swanand

@ То есть, только по гипотезе одновременной передачи? Просто обратите внимание, что это угловой случай, скорее
наоборот

0

Если поле данных сообщений отличается, вы (надеюсь!) Получите на шине сообщение об ошибке из-за неправильного CRC.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.