Úvod do diagnostiky CAN
V tomto článku se zaměřím na úvod do diagnostiky jednotlivých řídících jednotek použitých v automobilech po sběrnici CAN.
"OnBoard" diagnostika - OBD
OBD byl primárně vytvořen pro monitorování parametrů motoru se zaměřením na diagnostiku emisí osobních automobilů. Tedy základ je v komunikaci s řídící jednotkou motoru (Engine ECU). Ke komunikaci s ECU jsou automobily vybavené konektorem OBD-II, který na jednotlivých pinech umožňuje se připojit k různým sběrnicím (v závislosti na typu auta a druhu použité sběrnice/protokolu).
Standardní konektor pro diagnostiku OBD-II
Pro připojení ke konektoru OBD-II můžeme využít tyto protokoly pro CAN:
- ISO 15765-4, High speed HS-CAN 500 kbaud, pin 6 CAN-High, pin 14 CAN-Low
- ISO 15765-4, Medium speed MS-CAN 250 kbaud, pin 3 CAN-High, pin 11 CAN-Low
OnBoard diagnostika - Parametry PIDs
Pro vyčítání jednotlivých parametrů s řídící jednotky byl definován standard SAE J1979, který definuje jednotlivé servisy SID/parametry PID k přístupu k ECU datům. Seznam jednotlivých servisů SID a parametrů PIDs je zde.
Vybrané servis ID - SID:
- $01 - zobraz aktuální data
- $03 - zobraz uložené DTCs (Diagnostic Trouble Codes)
- $04 - smaž DTCs a uložené hodnoty
- $07 - zobraz aktuální DTCs
- $09 - informace o automobilu (Parametr PID $02 VIN, Parametr PID $0A jméno ECU, ...)
- $0A - stále DTC (permanentní)
Zde je ukázka jak adresovat ECU jednotku, příklad čtení VIN:
ID DATA
7DF 02 09 02 //Request ECU: $02 = data size, $09 = SID - Service 09 , $02 = PID code 02 - VIN (Vehicle Id. Number)
7E8 10 14 49 02 01 33 46 41 //Response ECU: $10 ISO-TP First frame, $14 = data size, $62 = SID, $02 = PID, data[0..2]
7E0 30 02 14 00 00 00 00 00 //Request ECU: $30 ISO-TP Flow control frame, $02 = block size, $14 = ST (separation time 0-127ms, $0-$7F)
7E8 21 44 50 34 46 4A 32 42 //Response ECU: $21 ISO-TP Consecutive frame 1, data[3..9]
7E8 22 4D 31 31 33 39 31 33 //Response ECU: $22 ISO-TP Consecutive frame 2, data[10..16]
"OffBoard" diagnostika
Zatím co OnBoard diagnostika je přímo určená na vyčítání dat z řídící jednotky pomocí standardního konektoru OBD umístěného v automobilu, je OffBoard diagnostika zaměřená na komunikaci/diagnostiku ostatních komponent automobilu obsahujících ECU (jako např. světlomety, AC panely, Airbag systém ...) buď přímo umístěných v autě nebo mimo (třeba jako testovaní komponent v laboratoři nebo testování funkčnosti při výrobě - EndOfLine testry).
UDS je diagnostický protokol pro ECU jednotky. Stejně jako v případe OnBoard diagnostiky jsou definované jednotlivé servisy - SIDs.
Vybrané servis ID - SID:
- $10 - vstup do diagnostického módu
- $27 - bezpečnostní přístup - tzv. Key<>Seed, na základě klíče je vygenerováno "heslo" pro odemčení požadovaných kritických servisů (např. řízení SID $2F)
- $7E - tester přítomen, zpráva pro udržování diagnostického módu (zasílané periodicky)
- $22 / $2E - Read Data By Identifier / Write Data By Identifier
- $14 / $19 - smazání DTC (Diagnostic Trouble Codes) / čtení DTC
- $2F- řízení vstupů/výstupů
Jednoduchý příklad vyčtení dat servisu "Read Data By Identifier":
ID DATA
733 03 22 F1 80 //Request ECU: $03 = data size, $22 = SID ReadDataByIdentifier, $F180 = parameters
73B 10 13 62 F1 80 30 31 32 //Response ECU: $10 ISO-TP First frame, $13 = data size, $62 = SID, $F180 = parameters, data[0..2]
733 30 02 14 00 00 00 00 00 //Request ECU: $30 ISO-TP Flow control frame, $02 = block size, $14 = ST (separation time 0-127ms, $0-$7F)
73B 21 33 34 35 36 37 38 39 //Response ECU: $21 ISO-TP Consecutive frame 1, data[3..9]
73B 22 30 31 32 33 34 35 //Response ECU: $22 ISO-TP Consecutive frame 2, data[10..15]
Vyčítání zpráv (pro OnBoard a OffBoard diagnostiku)
Pro řízení zpráv (požadavek <> odpověď) jsou definovány standardy:
- ISO-TP (ISO Transport Protocol, ISO 15765-2)
- VW TP 2.0 (Volkswagen Transport Protocol 2.0)
1. ISO-TP (ISO Transport Protocol, ISO 15765-2)
ISO-TP definuje pro první byte hlavičky:
- $0x - Single frame (základní odpověď v jedné zprávě)
- $1x - First frame (první zpráva složené odpovědi)
- $2x - Consecutive frame (následující zprávy odpovědi)
- $3x - Flow control frame (žádost pro následující zprávy odpovědi)
Ukázky takového toku požadavku a odpovědí jsou uvedené v předchozích dvou příkladech.
2. VW TP 2.0 (Volkswagen Transport Protocol 2.0)
Příklad použití je zde:
ID DATA
200 01 C0 00 10 00 03 01 //Request ECU: Channel Setup Id 0x300
201 00 D0 00 03 40 07 01 //Response ECU: Channel Setup Id 0x740
740 A0 0F 8A FF 32 FF //Request ECU: Channel parametrization
300 A1 0F 8A FF 4A FF //Response ECU: Channel parametrization
740 10 00 02 10 89 //Request ECU: $10 = last packet
//$02 = data size, $10 = request StartDiagnosticSession, $89 = parameter
300 B1 //Response ECU: ACK
300 10 00 02 50 89 //Response ECU: $10 = last packet
//$02 = data size, $50 = response StartDiagnosticSession, $89 = parameter
740 B1 //Request ECU: ACK
740 11 00 02 21 01 //Request ECU: $11 = last packet
//$02 = data size, $21 = request ReadDataByIdentifier, $01 = parameter
300 B2 //Response ECU: ACK
300 21 00 1A 61 01 01 00 00 //Response ECU: $21 = packet to follow
//$1A = data size, $61 = response ReadDataByIdentifier, $01 = parameter, data[0..1]
300 22 27 00 00 22 00 80 1A //Response ECU: $22 = packet to follow
//data[2..8]
300 23 32 4B 25 02 7A 25 00 //Response ECU: $23 = packet to follow
//data[9..15]
300 14 00 25 00 00 25 00 00 //Response ECU: $14 = last packet
//data[16..22]
740 B5 //Request ECU: ACK
740 A8 //Response ECU: Channel parametrization, disconnect
Užitečné odkazy a publikace
- Wikipedia.org On-board diagnostics
- Wikipedia.org Unified Diagnostic Services
- VW&AUDI Data Exchange On The CAN Bus I - Volkspage a zde lokální pdf verze
- VW&AUDI Data Exchange On The CAN Bus II - Volkspage a zde lokální pdf verze
- AUDI Data bus technologies a zde lokální pdf verze
- THE CAR HACKER’S HANDBOOK a zde lokální pdf verze