Kommunikation mit dem ELM327¶
Der ELM327 ist ein Übersetzer zwischen einer seriellen Textschnittstelle und den
OBD-II-Bussen des Fahrzeugs. obd-diag schickt ihm Textbefehle und liest seine Antworten
bis zum Prompt >. Grundlage ist das Datenblatt ELM327DSJ (Firmware v2.1,
Quellen).
Leitung¶
Seriell, 8 Datenbits, keine Parität, 1 Stoppbit; 38400 oder 115200 Baud.
Jeder Befehl ist ASCII in Großbuchstaben ohne Leerzeichen und endet mit genau einem CR (
\r). Ein einzelnes CR würde den letzten Befehl wiederholen und ist daher verboten (Datenblatt S. 9, Befehlsreferenz).Der Adapter antwortet mit Zeilen, getrennt durch CR, und schließt mit
>ab.Vor jedem Schreiben leert
SerialTransportden Eingangspuffer, damit keine alte Antwort für die neue gehalten wird.
Ablauf einer Sitzung¶
sequenceDiagram
participant T as obd-diag
participant E as ELM327
participant F as Fahrzeug
T->>E: ATZ
E-->>T: ELM327 v1.5 >
T->>E: ATE0, ATL0, ATS0, ATH0, ATSP0
E-->>T: OK > (je Befehl)
T->>E: 0100 (bis 30 s)
E->>F: Protokollsuche, dann 01 00
F-->>E: 41 00 …
E-->>T: SEARCHING... 4100BE3FA813 >
T->>E: ATDPN, ATDP
E-->>T: A6 > / AUTO, ISO 15765-4 (CAN 11/500) >
T->>E: ATRV
E-->>T: 12.4V >
T->>E: 03, 07, 0A, 0101, 020200, 0902 …
Schritt |
Befehl |
Zweck |
|---|---|---|
Zurücksetzen |
|
Adapter wie nach dem Einschalten; die letzte Antwortzeile ist die Kennung |
Echo aus |
|
der Adapter wiederholt den Befehl nicht mehr |
Zeilenvorschub aus |
|
nur CR als Zeilenende |
Leerzeichen aus |
|
|
Header aus |
|
nur die Daten, ohne CAN-ID |
Protokoll automatisch |
|
Suche startet mit der ersten OBD-Anfrage; schreibt nicht ins EEPROM |
Protokoll aushandeln |
|
unterstützte PIDs; beantwortet jedes OBD-II-Fahrzeug |
Protokoll melden |
|
Nummer ( |
Bordspannung |
|
Spannung an der OBD-Buchse |
Alle Befehle mit Datenblatt-Seite und Zitat stehen in der Befehlsreferenz.
Wartezeiten¶
Fall |
Wartezeit |
Begründung |
|---|---|---|
jeder Befehl |
10 s |
Meldet ein Steuergerät |
erstes |
30 s |
die Protokollsuche probiert mehrere Protokolle; bei K-Line dauert schon ein Verbindungsaufbau 2 bis 3 s (S. 33, 36) |
Fehlercodes nach |
bis 5 s weiterlesen |
ohne erneut zu senden |
Löschen nach |
bis 10 s weiterlesen |
Mode 04 wird nie wiederholt |
Protokoll erkennen¶
Ob das Fahrzeug CAN spricht, entscheidet, wie Fehlercode-Antworten zu lesen sind
(Antwortformate). obd-diag fragt ATDPN:
6bisC(auch mit vorangestelltemAfür „automatisch gefunden“) ist CAN,1bis5sind ältere Protokolle (J1850, ISO 9141-2, KWP2000).Meldet der Adapter
0,?oder Unsinn, wird0100bei fehlender Antwort einmal wiederholt undATDPNerneut gefragt.Bleibt die Nummer unklar, wird
0100einmal mit Headern (ATH1) gesendet und an deren Form erkannt, ob CAN 11 Bit, CAN 29 Bit oder ein älteres Protokoll vorliegt. Die Protokollangabe trägt dann den Zusatz „laut Headern …“.
Antworten bereinigen¶
Elm327.command entfernt vor dem Auswerten:
das Echo des Befehls, auch in anderer Schreibweise (
at dpnfürATDPN), aber nur vor der eigentlichen Antwort;Statuszeilen
SEARCHING...undBUS INIT: ...OK;Leerzeilen, Nullbytes und Zeilen aus reinem Zeichenmüll (manche Klone senden nach
ATZz. B. ein ByteFC).
Danach gilt:
Antwort |
Ergebnis |
|---|---|
|
kein Steuergerät hat geantwortet; |
|
Adapter kennt den Befehl nicht ( |
|
|
|
|
Hex-Daten |
weiter an Antwortformate |
Ein abgezogener Adapter (Ein-/Ausgabefehler) wird zu TransportError („Verbindung zu …
unterbrochen“), ausbleibende Antworten zu TransportTimeout. Beides bricht den Ablauf
ab; danach wird nichts mehr gesendet.