Досліджуємо CAN шину авто

Працювати напряму із CAN шиною авто без практичного досвіду трохи небезпечно, тому попробуємо запустити частину блоків “на столі”.

CAN двожильна мережа (вита пара), де кожен модуль може починати говорити. На рівні HW реалізований захист від колізій (із врахуванням пріоритету – чим менший ідентифікатор тим він першим відправиться). Розглянемо першу версію яка працює із 11 бітним ідентифікаторами повідомлення (2048 комбінацій). І стандартною довжиною даних 8 байт.

Важливий біт RTR (Remote Transmition Request): 0 – Data Frame (можна рахувати як повідомлення всім), 1- Remote Frame (запит інформації).

Гарний навчальний канал Eugene Irimia, де детально розказано про CAN.

В авто може бути до десятка різних шин даних. Трансляцією пакетів займається модуль GWM. По Ford основні:

HS-CAN
MS-CAN
I-CAN (MM-CAN)

У авто без GWM адресацією пакетів виступають:

BdyCM є шлюзом між HS-CAN і MS-CAN
IPC є шлюзом між MS-CAN і I-CAN (MM-CAN)

Основні лінії виведені на роз’єм ODB.

В шафці находимо авто модуль для експериментів Front Controls Display Interface Module (FCDIM) DM5T-18B955-AA або як називають “калькулятор” з пакету РП32.

Розібравши екран по роз’єму зразу видно який пін за що відповідає.

Процесор MC9S12XHZ512, трансівер CAN TJA1040, LIN TJA1020, DC-DC V8675-50. Усі SMD компоненти посаджені на клей, перехідні отвори герметизовані.

Підключатися для початку будемо ELM327. Мережа запустилася і без термінаторів на 120 ом. Підключаємося через термінал і даємо команди, ресет модуля:

AT Z

Модуль сидить на MS-CAN, виставляємо протокол 15765-4 CAN 11bit 500 kbit (125 – B):

AT SP 6

Якщо повідомлення 8 байтне, активувати розширений режим:

AT AL

AT CAF0

Включимо відображення заголовків

AT H1

Фільтр по вхідних повідомленнях:

AT CRA 7AD

В документації AsBuilt находимо адресу модуля 7A5, виставляємо заголовок з яким ID будемо стати дані (фільтр пакетів поки що не будемо налаштовувати):

AT SH 7A5

і попробуємо відправити 1 байт x01. При відсутності пакетів у шині даних модуль через 3 секунди глибоко засинає, тому на перший пакет може не бути відповіді, і модуль його ігнорує.

>01
NO DATA
>01
7AD 03 7F 01 11
>

Як бачимо нам прийшла відповідь із ідентифікатором 7AD, довжина даних 03 байти, но бачимо що прийшло 7F що означає помилку, і байт команди яку ми відправили. 11 – сервіс не підтримується (на 10 прийшло 13). Із ISO 14229 отримуємо коли відповідей. Перебором можна найти усі можливі відповіді.

0x11 serviceNotSupported
0x12 subFunctionNotSupported
0x13 incorrectMessageLengthOrInvalidFormat
0x14 responseTooLong

на 1001 приходить 7AD 06 50 01 00 32 01 F4

В інтернеті найдено опис подібного проекту FoDiMoCo – Ford display module (FDIM) controller де описується, щоб екран відображав інформацію потрібно слати пакети із ідентифікаторами 0x50c (10 Hz) і 0x3e8 (1 Hz). Щоб забезпечити таку кількість пекетів потрібний CAN-Hacker.

В групі переслали печатку плату CANable STM32F042x6 (STM32F042C6T6) & MCP2551 & AP2202K. Якщо комусь треба поділюся друкованою платою.

На алі було куплено плати MCP2551 ($1).

Також для зручності комутування купив роз’єм OBD мама із виводом всіх контактів на алі ($3), а також конектор папа на алі ($1.5).

TBD

Застереження: усе що ви робите із своїм авто є Ваша відповідальність. Дуже багато адреналіну дає така ілюмінація на авто:

 

Використання фотографій або текстового контенту на інших ресурсах без клікабельного індексованого посилання заборонено.