Ú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:

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