www.blafusel.de

  Home  |   Privat  |   Impressum  |   Bücher  |   Computer  |   Mikrocontroller  |   Misc  |   OBD  |   Forum

zonak

VAG KW 2000 Protokoll

Inhalt

Einführung
Testumgebung
Initialisierung
Start Diagnostic Session
Read ECU Identification

Einführung

Bereits die Ausführungen zu KW 1281, dem herstellerspezifischen Diagnoseprotokoll von VAG stießen auf reges Interesse. In der zweiten Auflage meines Buchs Fahrzeugdiagnose mit OBD wurden diese umfangreich ergänzt. Da bisher Informationen zu dem neueren Diagnoseprotokoll KW 2000 bei VAG fehlten, will ich diese hier ein wenig nachtragen - zumal mir keine einzige sonstige Quelle dazu bekannt ist. Allerdings werde ich auch nicht alles besprechen, denn ich will nicht mein ganzes Buch überflüssig machen und auch für kommende Auflagen noch Ergänzungen zu bieten haben.

Zuerst einmal muß ich mit einigen großen Mißverständnissen aufräumen: Es handelt sich nicht um ein neues Diagnoseprotokoll. Das KW 2000 Protkoll (oder auch KWP2000 für keyword protocol 2000) ist schon älter und in der ISO 14230 normiert. Allerdings nutzt VAG die Möglichkeit, den Data Link Layer und Application Layer (s. ISO/OSI-Modell) zu modifizieren und abweichend von OBD II für die herstellerspezifische Diagnose zu nutzen. Auf dem Physical Layer kommt sowohl K-Leitung, als auch CAN (TP 1.6/2.0 - siehe z. B. ISBN 978-3-8348-0447-1) zum Einsatz, wobei hier nur die K-Leitung betrachtet werden soll.

Weiterhin wird im Allgemeinen behauptet, daß VAG dabei das Protokoll KW 2089 (KWP2089) nutzt. Das stimmt im Grunde nicht! Wie bei der Initialisierung zu sehen sein wird, handelt es sich um das Protokoll KW 2031 (KWP2031). Dadurch wird festgelegt, daß im Formatbyte die Botschaftslänge enthalten sein kann und im Botschaftskopf Ziel- und Quelladresse enthalten sein können. Da aber ein zusätzliches Byte mit dem Hexwert 89H in der Botschaft StartDiagnosticSession übertragen wird, reden alle von KW 2089 - dies ist eine Abänderung des genormten Botschaftsinhalts seitens VAG und kann natürlich als Indikator dafür angesehen werden, daß es sich hierbei nicht um das genormte Protokoll nach ISO handelt. Allerdings wird bei der Verwendung der Bezeichnung "KW 2089" dann das dezimale und sedezimale Zahlensystem zusammengewürfelt, denn der Hex-Wert 89 steht ja für Dezimal 137. Da die 2000 in "KW 2000" eine Dezimalzahl ist, müßte das Protokoll also eigentlich folglich "KW 2137" heißen. Der Einfachheithalber wird im weiteren Verlauf stets nur von KW 2000 die Rede sein.

Testumgebung

Im wesentlichen gelten die Ausführungen, wie bei KW 1281: Am besten eignet sich ein Steuergerät auf dem Schreibtisch. allerdings ist meine eigene Ausstattung bisher auch mehr als mau (s. Forum). Wer weitere Geräte mit KW 2031/2089 kennt, melde sich bitte!

Zwischen Tester und Fahrzeug wird nur ein einfaches KL-Diagnoseinterface benötigt wie z. B. meine serielle- oder USB-Variante.

Initialisierung

Gemäß ISO gibt es bei KW 2000 zwei Arten der Initialisierung der Kommunikation bzw. des aufwecken eines Steuergerätes:
  • 5 Baud Slow Init
  • Fast Init
Exemplarisch wird hier das 5 Baud Slow Init vorgestellt, welches beim KW 1281 auch schon benutzt wird, weshalb dort ggf. weitere Infos nachzulesen sind, die ich hier nicht wiederhole.

  1. Die Pegel auf K- und L-Leitung sind für mind. 300 ms unverändert.
  2. K- und L-Leitung sind für mind. 2 ms High.
  3. Mit 8N1 und 5 Baud wird die Adresse des aufzuweckenden Steuergerätes parallel auf K- und L-Leitung gesendet.
  4. Die L-Leitung verbleibt bis zum Kommunikationsende auf High.
  5. Das Steuergerät sendet das Synchronisationsmuster ("55H") zum festlegen der Baudrate.
  6. Die weiteren Daten werden im Format 7O1 gesendet.
  7. Anschließend sendet das Steuergerät die zwei Keywords zur Protokollkennzeichnung: KB1 und dann KB2.
  8. Der Tester sendet KB2 invertiert zurück.
  9. Das Steuergerät sendet die invertierte Adresse.
  10. Umschalten auf 8N1.
Zu beachten ist, daß eigentlich erst nach der Initialisierung auf 8N1 umgeschaltet wird. Es kann aber auch schon von Anfang an damit gearbeitet werden. Dann muß aber beachtet werden, daß das höchstwertige Bit eigentlich die Parität symbolisiert und entsprechend immer High ist. Bei der Bildung des Komplements, muß dann der Wert von FFH und nicht von 7FH subtrahiert werden.

Anhand der zwei Keywords wird das genaue Protokoll ermittelt. Bei Empfang mit 8N1 werden die beiden Bytes zuerst in 7 Bit konvertiert, in dem das höchstwertige Bit gelöscht wird (bspw. durch eine UND-Verknüpfung mit 7FH). Anschließend wird gerechnet: KB2 x 128 + KB1. Wie man dann feststellt, sendet bspw. das VAG Steuergerät 022 906 032 GK die zwei Keywords KB1=6FH bzw. 111D und KB2=0FH bzw. 15D in 7O1 aus denen sich dann 15 x 128 + 111 = 2031 ergibt. Die Kommunikation findet also gemäß ISO 14230-2 nach dem Keyword Protokoll 2031 statt.

Die Initialisierung ist nun abgeschlossen und der Tester fährt fort mit ...

Hinweis: Die hier gezeigte Initialisiserung ist nur eine von mehreren bei KW2000 bei VAG und funktioniert in der Form auch nur beim 1. Motorsteuergerät so.

Start Diagnostic Session

Im Gegensatz zu KW1281 muß der Tester nach dem Aufwecken die Diagnosesitzung zuerst einmal noch per Befehl starten. Dazu sendet er den Service Identifier (SID) StartDiagnosticSession. Grundsätzlich werden alle Botschaften durch einen Service Identifier eingeleitet. Die Botschaft ist folgendermaßen aufgebaut:

vom Tester
(Hex)
Beschreibung
82 Botschaftsheader
Der Header besteht aus dem Wert 80H zu dem die Länge der Botschaft (Anzahl der Nutzdaten) addiert wird. Diese Anzahl entspricht der Anzahl an Bytes zwischen der Angaben der Quelladresse und der Prüfsumme. In diesem Fall 2
10 Zieladresse
Dies ist die physikalische Adresse des angesprochenen Steuergerätes. In diesem Fall das Motorsteuergerät (MSG/ECU)
F1 Quelladresse
Physikalische Adresse des Testers. Gemäß ISO 15031-5 immer F1H
10 Request StartDiagnosticSession
Anforderungs Service Identifier nach ISO 14230-3 zum Aufbau einer Diagnoseverbindung.
89 Parameter
Aufgrund dieses Bytes wird das eigentliche Protokoll nach KW 2031 von vielen als "KW 2089" bezeichnet. Ein derartiges Nutzdatenbyte ist in der ISO bei der StartDiagnosticSession nicht vorgesehen. Das (nicht repräsentative) Dokument SSF 14230-3 bezeichnet diesen Wert als vehicleManufacturerSpecificSession
1C CRC
Die Prüfsumme wird durch Addition aller vorherigen Bytes ermittelt (021CH). Der berechnete Wert wird dann mit FFH UND-Verknüpft, um eine 1 Byte große Zahl zu erhalten.

Abweichend von KW1281 wird also nicht jedes Byte mehr von der Gegenstelle bestätigt. Wie auch bei KW 1281 schon beschrieben, bekommt man (aufgrund der bidirektionalen Nutzung der K-Leitung sowohl für das Senden, als auch für das Empfangen) bei jedem gesendeten Byte ein pseudo-Echobyte wie vom Steuergerät gesendet zurück.

Auf jeden Request durch den Tester sendet das Steuergerät eine Response (Antwort).
VAG nutzt für den Fehlerfall, also die Abweisung eines Requests durch das Steuergerät, einen Code aus dem für Hersteller reservierten Bereich: 7FH bedeutet eine generelle Ablehnung (z. B. weil die Funktion (derzeit) nicht unterstützt wird). Diesem Byte folgen zwei weitere Bytes mit der ID für den abgewiesenen Service und den Grund der Ablehnung
Für eine positive Response wird zum Anforderungs Service Identifier der Wert 40H addiert bzw. mit 40H ODER-Verknüpft, um den Response Code zu bestimmen. Für den Request StartDiagnosticSession 10H lautet der positive Responsecode also 10H + 40H = 50H und die gesamte Botschaft sieht so aus:

vom Steuergerät
(Hex)
Beschreibung
82 Botschaftsheader
2 Nutzdaten
F1 Zieladresse
zum Tester
10 Quelladresse
vom MSG
50 Positive Response StartDiagnosticSession
89 Parameter
"KW 2089"
5C CRC

Jede Botschaft (Request und Response) folgt bei KW 2000 diesem Aufbau.

Read ECU Identification

Nach dem die Diagnoseverbindung steht (und auch später jederzeit) können die Gerätekenndaten des Steuergerätes ausgelesen werden. Dies geschieht mit dem Request ReadECUIdentification (SID 1AH). Ein zusätzlicher Parameter gibt an, welche Art von Daten abgefragt werden sollen. Bei VAG lautet der Wert 9BH:

vom Tester
(Hex)
Beschreibung
82 Botschaftsheader
10 Zieladresse
F1 Quelladresse
1A Request ReadECUIdentification
9B Parameter
Nach SSF 14230-3 wird hiermit das Datum geliefert, wann das Steuergerät kalibriert wurde (calibrationDate). Bei VAG wird aber die gesamte Gerätekennung geliefert.
38 CRC

Die Antwort enthält dann die Daten des Steuergerätes:

vom Steuergerät
(Hex)
Beschreibung
80 + n Botschaftsheader
F1 Zieladresse
10 Quelladresse
5A Positive Response ReadECUIdentification
9B Parameter
?? Gerätekenndaten
... ...
?? CRC

Die Anzahl der Gerätekenndaten kann anhand des Botschaftsheader bestimmt werden. Das VAG Steuergerät 022 906 032 GK sendet bspw. diese Gerätekenndatenbytes:

ASCII 022906032GK 6243\x\0\0¬\0\0\0\0\x#MOTRONIC ME7.1.*G   
Hex 303232393036303332474B2036323433030000AC0000000019234D4F54524F4E4943204D45372E312E2A47202020