Вопрос
Какова связь между идентификатором CAN и ЭБУ в стандарте OBD-II
Сценарий
При получении наборов данных об автомобилях, собранных путем регистрации трафика CAN через порт OBD-II в реальном автомобиле, для обнаружения вторжений я получил несколько кадров CAN с 11-битным идентификатором CAN, например 0x00a0
.
Вопрос
Все мы знаем, что идентификатор CAN определяет приоритет и значение сообщения, но какова связь между идентификатором CAN и ЭБУ? Есть ли у каждого ЭБУ свой уникальный идентификатор CAN, или разные ЭБУ (например, ЭБУ, управляющий подушкой безопасности, и другие) могут при определенных обстоятельствах отправлять кадр CAN с одним и тем же идентификатором CAN?
Перевод вопроса с Mechanics Stack Exchange
Лицензия: CC BY-SA (2.5–4.0)
Оригинальный вопрос: https://mechanics.stackexchange.com/questions/59738/whats-the-relationship-between-can-identifier-and-ecu-in-obd-ii-standard
1
Между адресом CAN и модулем на шине нет сильной связи. Чем меньше значение идентификатора, тем выше приоритет на шине. Насколько я помню, это работает на аппаратном уровне, поскольку меньшее число занижает приоритет шины и подавляет идентификатор с более высоким значением.
По шине CAN можно передавать различные сообщения, используя их уникальный идентификатор и следующие за ним 8 байт для передачи сигнальных данных.
Например, у модуля ABS, скорее всего, будет низкий идентификатор для отправки сообщения всем подключённым узлам о том, что в автомобиле активирован противооткатный режим. Сообщение с низким приоритетом (более высокий идентификатор CAN), например, от модуля топливного бака будет сообщать комбинации приборов об уровне топлива в баке.
Протокол OBD работает аналогичным образом: сканер подключается к шине как узел с адресом, например, 0x7DF, и отправляет запрос на получение данных, используя 8 байт данных, следующих за идентификатором. Любой узел на шине (например, ECU) может ответить соответствующими данными, которые запрашивает инструмент сканирования, он делает это, используя адрес в диапазоне 0x7E8-> 0x7EF (диапазон позволяет отвечать нескольким узлам, 0x7E8 является довольно типичным - страница wiki объясняет протокол здесь https://en.wikipedia.org/wiki/OBD-II_PIDs