Hier geht es um das Diagnoseinterface für den BMW E31.

Hardware

Hardwareseitig verwendet BMW E31, wie auch viele andere Fahrzeuge aus der Zeit, zwei Leitungen, die sog. L- und K-Line.

  • L-Line: wird zum Wecken des Steuergeräts verwendet. Hier wird sog. 5 Baud Initialisierung verwendet, im 7o1 Format.
  • K-Line: der eigentliche Datenaustausch findet über K-Line statt. Das Format ist 8n1, die Geschwindigkeit ist aber je nach Steuergerät unterschiedlich.

Beide Leitungen haben einen 510Ohm Pullup nach UBat im Diagnoseinterface und werden entsprechend auf Masse gezogen.

Das Wecken des Steuergeräts findet über L-Line statt, meldet sich das Steuergerät mit einer Botschaft zurück, schaltet man auf K-Line um und die L-Line wird nicht mehr verwendet.

Für K-Line kann man spezielle ICs (ISO9141 Chips) verwenden oder die Schaltung aber auch diskret aufbauen, was bei L-Line eh der Fall ist (als low-side Schalter).

Software

Softwareseitig verwendet E31 das KW-71 Protokoll. Da es sich um ein sehr altes Protokoll (aus der vor-Internet Ära), findet man dazu auch sehr sehr wenig Infos. Grundsätzlich ist KW-71 sehr eng mit dem KW-1281 verwandt, bzw. ist dessen Vorgänger.

Die Kommunikation läuft in zwei Schritten ab:

  • Wecken des Steuergeräts
    • Response to wake up Botschaft
  • die eigentliche Kommunikation

Wecken des Steuergeräts

Um das Steuergerät zu wecken wird seine Adresse mit einer Bitzeit von 200ms, also 5Baud, über die L-Line gesendet. Somit wird dem Steuergerät mitgeteilt, dass man mit ihm kommunizieren will.

Aufbau der Kommunikation / Response to wake up Botschaft

Die "response to wake up" Botschaft ist drei Bytes lang und sieht beispielswese so aus: 0x55 0x00 0x81.

KW 71 START

Diese Botschaft wird mit derselben Geschwindigkeit gesendet, mit der später die gesamte Kommunikation stattfindet.

Das erste Byte dieser Botschaft hat eine besondere Bedeutung, es ist das sog. sync byte, hier sind low- und high-Flanken gleich lang, sodass das Diagnoseinterface sich auf die richtige Geschwindigkeit einstellen kann, das sog. "auto baudrate mode".

Das letzte Byte der Botschaft (0x81) wird vom Diagnoseintetrface mit einem 0x7E (Komplement zu 0x81) quittiert. Ab jetzt ist die Kommunikation eingerichtet und es werden Daten ausgetauscht.

Kommunikation

Nun sendet das Steugerät seine Identifikation, wie Bestellnummer, Hardwarerevision, Softwarerevision, ... Der Datenaustausch findet byteweise statt, das heißt das Steuergerät sendet ein Byte, das Interface sendet ein Byte. Dann wird auch die vom Steugerät gesendet Botschaft mit einer ACK-Botschaft quittiert. Dieses Verfahren macht die gesamte Kommunikation sehr langsam und ineffizient.

Die Kommunikation läuft so ab:

KW71

Bytedefinitionen:

  • Byte 0: gibt die Länge der Botschaft an
  • Byte 1: ist der Botschaftzähler, wird bei jeder Botschaft hochgezählt und bei 0xFF wieder auf 0x00 zurückgesetzt
  • Byte 2: Typ der Botschaft:
    • 0x06: Ende der Kommunikation
    • 0x07: Fehler lesen/ausgeben (Diagnoseinterface zum Steuergerät)
    • 0x09: ACK Botschaft
    • 0xF6: ASCII Text
    • 0xFC: Antwort auf 0x07 (Steuergerät zum Diagnoseinterface)
    • weitere Typen noch unbekannt
  • letztes Byte: Ende der Botschaft, ist immer 0x03 und wird auch nicht quittiert

Kommunikationsende

Hier wird einfach eine Botschaft vom Typ 0x06 (Ende der Kommunikation) gesendet, diese wird vom Steuergerät mit ACK-Block bestätigt: