Вопрос

Как расшифровать данные BMW CAN (через OBDII)

Я использую устройство типа ELM327.
Я пытаюсь опрашивать и расшифровывать данные на своём BMW i3. В качестве справочных материалов я использую следующие ресурсы:



  1. В этом посте рассказывается о том, что мне нужно сделать для инициализации.

  2. В этом посте показаны некоторые типы запросов

  3. Этот ответ объясняет некоторые аспекты декодирования.


Однако без какого-либо «разбора фрейма» я не могу понять, как расшифровать эти ответы. Я попытался применить что-то подобное этому со страницы вики CAN, но, похоже, мне не удаётся сопоставить ответы с данными, как описано в пункте 3.


Моя цель — понять формат фрейма ответа, чтобы я мог реализовать собственный декодер в своём инструменте, который я пишу. Для этого было бы полезно иметь возможность декодировать фреймы в сообщении, указанном в пункте 3. "607F1100762DD69FFFF 607F121FE44FFFFFFFF".


Чтобы было понятно, я понимаю, что в «полезной нагрузке» разных кадров содержатся разные типы данных. Я не спрашиваю об этом. Как только я пойму, как декодировать кадры и «выделить» полезную нагрузку, я смогу интерпретировать данные из других задокументированных источников.



Перевод вопроса с Mechanics Stack Exchange
Лицензия: CC BY-SA (2.5–4.0)
Оригинальный вопрос: https://mechanics.stackexchange.com/questions/83122/how-do-i-decode-bmw-can-data-over-obdii

4 Комментария

  1. Мне удалось получить действительно ценную информацию от легенд /r/CarHacking.


    В той ветке я задал примерно тот же вопрос.
    Cyrix2k ответил:



    Это UDS, производная от KWP2000



    Это была очень хорошая отправная точка, поскольку я понятия не имел, что поверх CAN существуют транспортные протоколы.


    Затем CitizenItza ответил, подробно разобрав рассматриваемые пакеты. Вот оно:



    BMW добавляет дополнительный уровень для адресации ЭБУ, что может привести к путанице. Приведённый вами пример представляет собой ответ ЭБУ (адрес 0x07), состоящий из «первого кадра» и «последующего кадра». Значение кадров/байтов:

    607 — Идентификация по стандарту CAN

    F1 — целевой адрес, обычно F1 является целевым адресом диагностического инструмента
    10 — индикатор того, что это «первый кадр» (подробнее об этом: ISO 15765-2)

    07 — количество отправленных полезных байтов (за исключением этого, жирным выделены те, которые включены)

    62 — Сервис (0x22 + 0x40 = 0x62)

    Старший байт DD - PID

    69 — младший байт PID (таким образом, PID равен 0xDD69)

    FF - Данные 0

    FF - Данные 1


    607 — Идентификация по стандарту CAN

    F1 — снова целевой адрес

    21 — индикатор того, что это «последовательный кадр» (старший бит указывает на тип кадра, младший бит — это счётчик кадров от 1 до F)

    FE - Данные 2

    44 — Данные 3

    FF - Заполняющий байт

    FF - Заполняющий байт

    FF - Заполняющий байт

    FF - Заполняющий байт


    Вы можете найти более старые, но полные версии этих стандартов в Интернете, однако представление данных является запатентованным. UDS



    Используя приведённую выше информацию, я смог создать собственный базовый парсер пакетов для своего инструмента.


  1. Да, в ходе этого проекта я узнал больше о формате CAN Ex. CitizenItza очень помогла мне, в частности, упомянув ISO 15765-2 в описании своего пакета! Спасибо за информацию!
  1. Обратите внимание, что дополнительный уровень адресации не является особенностью BMW, а представляет собой расширенную адресацию CAN в соответствии со стандартом ISO 15765-2 и другими стандартами. Однако на самом деле очень немногие производители используют эту функцию.
  1. Добро пожаловать в компанию по техническому обслуживанию и ремонту автомобилей!
Вы уже ответили на этот вопрос