Возможно это неисправность протокола j1939 в CAN-шине коммерческого транспорта. Проведём реверс-инжиниринг логов Вичай и Ючай. Что это системный сбой, банальный глюк, ошибка в прошивке, а может это эхо?
На периферии двух гигантов инженеры Weichai vs Yuchai. Интересно кто умней? Ответ на этот вопрос я не знаю. Но когда разбираем логи j1939 ты понимаешь, перед тобой две школы китайской инженерии.
Запуск ДВС Ючай:
С пол оборота. При включении зажигания можно сразу, без паузы, крутить ключ на старт - мотор идёт на запуск.
Запуск ДВС Вичай:
Плюс минус на третьей прокрутке стартера. Если при включении зажигания сразу попытаться запустить мотор, стартер часто не срабатывает. ЭБУ нужна пауза несколько секунд, и только потом происходит запуск. Блок явно чем-то занят перед стартом ДВС.
Но самое интересное под капотом CAN-шины
Инструменты >> для анализа трафика j1939 использую две свои утилиты на С.
Карта ( map_id_j1939_nosemi ) >> даёт общую картину сети.
Микроскоп ( viz_j1939 ) >> раскладывает фрейм по битам и байтам.
ОС и Железо >> Linux / CANable
Анализ Yuchai << Картой >>

Анализ Weichai << Картой >>

Анализ Weichai << Микроскопом >>
Пишем фильтр viz_j1939.c
byte1 = (id >> 16) & 0xFF; byte2 = (id >> 8) & 0xFF; byte3 = id & 0xFF; if (byte1 < 240 && (byte2 == 0 && byte3 == 0))
![Смотрим поле ID байты читаем слева на право от нуля. Байт 1 - 157 [0x9D] фрейм адресный. Байт 3 адрес источника. Байт 2 адрес назначения. С блока ДВС на блок ДВС. Смотрим поле ID байты читаем слева на право от нуля. Байт 1 - 157 [0x9D] фрейм адресный. Байт 3 адрес источника. Байт 2 адрес назначения. С блока ДВС на блок ДВС.](https://habrastorage.org/r/w1560/getpro/habr/upload_files/8b8/fb6/0c8/8b8fb60c8d8f83827f2cb81d33ab7404.png)
Просмотрел все сообщения поле данных не изменилось ни на один бит.
Гипотеза 1:
Ошибка утилиты. Но на Ючай ничего подобного я ни когда не вытягивал.
Гипотеза 2:
Я сначала подключился CANable запустил candump на запись, потом включил зажигание. При подаче питания система активируется. Просыпаются блоки ABS, EBS, ECAS и так далее. Возможно переходной процесс.
Беру данные после включения зажигания.

Гипотеза 3:
Эхолокация, запрос, мониторинг, цифровая обратная связь. ЭБУ ДВС отправляет сообщение в сеть. Этот фрейм возвращается и блок анализирует, по идее, поле данных. Даже не знаю что сказать!?
Вот такая загадка инженеров Weichai.
Низкоуровневая работа с сырыми Hex-данными через самописный софт позволяет увидеть реальные инженерные решения, которые скрыты от глаз диагностов за красивой обёрткой сканера.
При этом сам процесс разделяется на две стадии: ты можешь собрать сырые логи в полевых условиях с помощью Linux и CANable, а вот анализировать их и изучать CAN-шину - уже дома, комфортно лёжа на диване в Termux на обычном планшете. Всё, что нужно для реверса - это данные.
Листая Хабр, я поймал себя на мысли, что со своим чистым Си и консольными утилитами для CAN-шины я смотрюсь там как "здравствуй, среди ночи". Вокруг сплошной веб и модные фреймворки. Ребята, неужели Си и низкоуровневое программирование сейчас не востребованы? Или все спецы просто в тени?
На данный момент я ищу работу или стажировку в сфере низкоуровневого программирования. Мечтаю полностью перейти в эту индустрию, чтобы развивать свои навыки программирования на С. Открыт для предложений.
Исходники доступны на GitHub [ https://github.com/Data7Viz/data7-can]
Канал для связи [ https://vk.ru/j1939]
