UDS Allgemeine Fahrzeugdiagnose
Definiert ist UDS (Unified Diagnostic Services) in den Normen ISO 14229 (enthält den bussystemunabhängige Teil) und in ISO 15765-3 (beschreibt die CAN-spezifische Implementierung). Im Gegensatz zu OBD schreibt die UDS-Norm für die allgemeine Fahrzeugdiagnose keine CAN-Identifier und keine CAN-Baudraten vor. Hier ist also jeder Fahrzeughersteller in der Lage frei zu entscheiden. Der Standard definiert allerdings, wie die SIDs und PIDs (heißen bei UDS Sub-Level-Parameter) bezeichnet werden. Im Unterschied zu OBD ist der Inhalt der Botschaften bei UDS praktisch nicht definiert. Das heißt, hier kann jeder Fahrzeughersteller festlegen, wie er Messdaten definiert, unter welchen Parametern er sie überträgt, wie er sie kodiert etc.
Der Botschaftsaufbau der UDS-Diagnosedienste entspricht dem Aufbau von OBD: Das erste Byte ist die SID. Dann folgt eine Detaillierung des Dienstes über den so genannten Sub-Level-Identifier (entspricht im Wesentlichen dem PID bei OBD).
Bei UDS gibt es die Möglichkeit auf positive Antwortbotschaften zu verzichten. Dazu muss der Diagnosetester in der Anfrage das oberste Bit des Sub-Level-Identifiers auf 1 setzen. Negative Antworten dagegen müssen immer gesendet werden. Dieser Verzicht auf positive Antwortbotschaften ist sinnvoll, um die Buslast beispielsweise beim Flashen zu reduzieren.
Es gibt in UDS eine große Anzahl von Diagnosediensten. Die folgenden beiden Tabellen zeigen hier einen Auszug davon. In den Tabellen sind zum Vergleich auch die jeweiligen Dienste für den Vorgänger von UDS, KWP 2000 dargestellt.
Auszug der Diagnosedienste von UDS und KWP 2000 |
In der ersten Spalte finden Sie die sogenannte Funktionsgruppe. Sie fasst die Diagnosedienste nach funktionalen Gesichtspunkten zusammen. In der zweiten Spalte steht die SID für UDS und KWP 2000. In vielen Fällen sind die UDS-Diagnosedienste und die KWP 2000-Diagnosedienste zumindest bei den SIDs identisch. In einigen Fällen gibt es aber auch Unterschiede. Dann sehen Sie in der nächsten Spalte „Default-Session“ eine Angabe, ob der Dienst in der Default-Diagnosesitzung zur Verfügung steht oder nicht. Sie erinnern sich, die Default-Session ist der Standard-Zustand im Sicherheitskonzept der Fahrzeugdiagnose, siehe Abschnitt vorn. Dann ist die Bezeichnung der Dienste aufgeführt. Auch hier hat sich zwischen KWP 2000 und UDS einiges verändert und ganz am Ende noch eine Spalte, die die Diagnosedienste etwas näher beschreibt.
Fangen wir oben an mit der Funktionsgruppe „Diagnostics and Communication Management“. Also der Funktionsgruppe, die die Diagnosesitzungen steuert und die Kommunikation während der Diagnosesitzung beeinflusst. Es beginnt mit dem Diagnosedienst Diagnostic-Session-Control. Er hat den Identifier 0x10 und ist natürlich in der Default-Session bereits verfügbar. Nur mit diesem Dienst gelangt man von der Default-Session in irgendeine andere Diagnosesitzung, beziehungsweise am Ende einer speziellen Diagnosesitzung auch wieder zurück in die Default-Session. Sie sehen bei KWP 2000 waren dies noch zwei verschiedene Dienste. Bei UDS wurde das zu einem Dienst zusammengefasst und über die Sub-Level-ID wird gesteuert, ob die Diagnosesitzung gestartet oder gestoppt werden soll.
Dann gibt es den Dienst TesterPresent. Er dient während einer Non-Default-Session dazu, die Session aufrecht zu erhalten. Weiterhin Security-Access, den wir im Zusammenhang mit den Diagnosesitzungen bereits kennengelernt haben. Es folgen der Dienst ECU-Reset, um Steuergeräte zurückzusetzen und einen Dienst Communication-Control, um die Kommunikation zu steuern. Dies ist typischerweise der Fall, um während einer Diagnosesitzung die Kommunikation einzuschränken, wie zum Beispiel bei der Flash-Programmierung. Dort benötigt man möglichst viel Busbandbreite. Das erreicht man am einfachsten, wenn man den anderen Steuergeräten die Kommunikation über diesen Dienst verbietet.
Dann gibt es den Dienst ControlDTCSetting, welcher das Speichern der Fehlerkodes steuert. Hier kann beispielsweise innerhalb der Werkstatt bei Reparaturarbeiten die Fehlerspeicherung abgeschaltet werden. Die zweite Funktionsgruppe Data-Transmission wird im Wesentlichen benötigt, um Messdaten zu lesen oder zu schreiben. Dort unterscheidet man wir im Wesentlichen Dienste, die mit einem Parameter-Identifier arbeiten oder Dienste, die direkt den Speicher adressieren. Das sind ReadDataByIdentifier bzw. WriteDataByIdentifier und ReadMemoryByAdress bzw. WriteMemoryByAdress. Über dem vom Fahrzeughersteller vordefinierten Identifier kann dann entschieden werden, welche Daten gelesen oder geschrieben werden. Über den direkten Speicherzugriff kann man praktisch alles ändern, vorausgesetzt, man kennt die richtige Speicheradresse für die aktuelle Softwarevariante.
Dann haben wir eine Gruppe von Diensten, die in der UDS-Norm als Stored-Data-Transmission Funktionsgruppe bezeichnet wird. Eigentlich handelt es sich um Diagnosedienste für den Zugriff auf den Fehlerspeicher. Das entspricht im Wesentlichen dem, was OBD zur Verfügung stellt. Es gibt hier hauptsächlich zwei Dienste: ReadDTDInformation und ClearDiagnosticInformation. Mit ReadDTDInformation kann man die Fehlerkodes und Freeze-Frame Daten auslesen und mit ClearDiagnosticInformation kann man den Fehlerspeicher löschen. KWP 2000 hatte hier viel mehr Dienste. Diese sind bei UDS nicht verschwunden, sondern lediglich in einem Dienst zusammengefasst. Wobei die Unterscheidung über den Sub-Level-Parameter erfolgt.
Dann hatten wir bei OBD bereits Dienste, die bestimmte Testfunktionen, zum Beispiel den Tankentlüftungstest aktivieren können. Das haben wir ebenfalls in erweiterter Form bei UDS. Dies ist die Funktionsgruppe Input-Output-Control. In eine ganz ähnliche Richtung gehen auch die Diagnosedienste der Funktionsgruppe Remote-Activation-Of-Routine. Mit dem Dienst RoutineControl kann man im Prinzip eine beliebige, von der Steuergeräteentwicklung im Steuergerät vorprogrammierte Funktion, von außen aktivieren. Das kann ein Testablauf, eine Routine zur Flashprogrammierung oder etwas anderes sein. Zuletzt finden wir noch die Funktionsgruppe Upload-Download. Hier sind Dienste zusammengefasst, mit denen man den Steuergerätespeicher in großen Blöcken lesen oder schreiben kann. Sie werden meist für das Auslesen von Betriebsparametern oder zur Flash-Programmierung verwendet. Die vorgestellte Liste der Diagnosedienste ist keineswegs vollständig. Wir haben eine Reihe von selten genutzten exotischen Funktionen weggelassen, wollen aber auf einige Spezialitäten doch noch etwas genauer eingehen.
Spezialitäten von UDS
Dies betrifft zum einen die Kommunikationsparameter. CAN arbeitet typischerweise mit einer festen Bitrate. Beim Umschalten auf eine andere Diagnosesitzung ist es aber durchaus möglich, die Parameter des Bussystems oder des Transportprotokolls umzustellen. Die Möglichkeit zur Umstellung der Bitrate stammt noch aus Zeiten der K-Line. Bei CAN werden im Wesentlichen nur die Parameter des Transportprotokolls, also die Time-Outs zwischen Request und Response oder zwischen Consecutive-Frames umgestellt. Das macht man hauptsächlich bei der Flash-Programmierung, um die Bandbreite des Bussystems, die für die Programmierdaten nutzbar ist, zu vergrößern. Außerdem sperrt man hier meist die Kommunikation der anderen Steuergeräte und schaltet die Fehlerspeicherung aus.
Zu den zusätzlichen speziellen Möglichkeiten von UDS gehört die Datenaufzeichnung, wie man sie bei Prüfständen oder bei der Fahrerprobung benötigt: Normalerweise werden Messwerte aus dem Steuergerät durch Polling abgefragt. Das heißt, der Diagnosetester sendet eine Request-Anfrage an das Steuergerät und das Steuergerät antwortet mit genau einer Antwortbotschaft. Für periodisch auftretende Messwerte müsste der Tester also periodisch Requests senden. Zur Reduzierung der Buslast und der Vereinfachung der Kommunikation ist es jedoch bei UDS möglich, über den Diagnosedienst ReadDataByPeriodicIdentifier mit nur einen Request periodisch Responses zu empfangen. Die Responses enthalten dann entsprechend des Identifiers die jeweiligen Messwerte. Beendet wird dieser Dienst, sobald der Tester einen weiteren Request sendet.
Eine weitere spezielle Möglichkeit in UDS ist der Diagnosedienst ResponseOnEventService. Hier sendet das Steuergerät von sich aus, abhängig von bestimmten internen Ereignissen, ein oder mehrere Antworten an den Tester. Typische Ereignisse, die eine derartige Botschaft auslösen können sind Zeitgeberinterrupts, Fehlerspeichereinträge oder das Über- oder Unterschreiten bestimmter Schwellwerte.
Zusammenfassend kann man sagen, dass UDS ein relativ komplexer Standard ist, dass es eine Reihe optionaler oder redundanter Funktionen gibt und dass man daher in der Praxis selten eine 100 prozentige UDS Implementierung finden wird. Jeder Hersteller wird sich typischerweise für eine bestimmte Teilmenge entscheiden. Dazu kommt, dass die Norm zwar sehr viele Dienste standardisiert, dass aber die Inhalte der Dienste, wie beispielsweise Fehlerkodes, PIDs, Messdaten, Wertebereiche etc., in der Regel herstellerspezifisch sind.
Beispiel: Flashprogrammierung I
Als praktisches Beispiel für die UDS-Diagnosedienste wollen wir den typischen Ablauf einer Flash-Programmierung betrachten, siehe Abbildung. Der Diagnosetester sendet als erstes eine ReadDataByIdentifier. Mit dieser Anfrage liest er die Hardwarekennung und die Softwarekennung des Steuergerätes aus, um zu erfahren welches Gerät er genau vor sich hat. Dann schaltet der Diagnosetester das Steuergerät in eine spezielle Diagnosesitzung. Noch nicht die eigentliche Diagnosesitzung für das Programmieren, sondern eine Sitzung, in der eine Reihe von erweiterten Diensten zur Verfügung stehen. Dies erfolgt mit dem Diagnosedienst DiagnosticSessionControl. In dieser erweiterten Diagnosesitzung fragt der Diagnosetester das Steuergerät ab, ob die Vorbedingungen für die Flashprogrammierung erfüllt sind. Dazu gehört typischerweise, dass die Programmierung nur bei stehendem Fahrzeug vorgenommen werden kann, dass der Motor aus sein muss usw.
Prinzipieller Ablauf einer Flashprogrammierung |
Dann wird der Diagnosetester normalerweise mit dem Service CommunicationControl die Fehlerspeicherung und die Buskommunikation in anderen Steuergeräten abschalten. Damit hat die erweiterte Diagnosesitzung ihren Zweck erfüllt. Nun schaltet der Diagnosetester über den Diagnosedienst DiagnosticSessionControl in die Programmiersitzung um. Spätestens jetzt ist auch ein SecurityAccess notwendig. Danach sendet der Diagnosetester in der Regel den so genannten Fingerprint an das Steuergerät. Dies ist eine Information, die im Steuergerätespeicher permanent abgelegt wird, um diesen Programmiervorgang zu kennzeichnen. Dabei wird typischerweise eine Werkstattkennung in den Speicher des Steuergerätes geschrieben, damit hinterher nachvollzogen werden kann, wer das Steuergerät umprogrammiert hat.
Bevor der Flashspeicher neu programmiert werden kann, muss er gelöscht werden. Das wird durch den Aufruf einer Routine im Steuergerätespeicher über den Diagnosedienst RoutineControl erledigt. Danach wird über den Dienst RequestDownload der eigentliche Programmiervorgang eingeleitet. Über diesen Dienst wird dem Steuergerät auch mitgeteilt, in welchen Speicherbereich die Daten geladen werden und wie viele Daten zu erwarten sind. Jetzt beginnt der eigentliche Download der Daten in einer Schleife mit dem Dienst TransferData. Der Speicherbereich wird hier blockweise übertragen. Zum Abschluss sagt der Diagnosetester dem Steuergerät über TransferExit dass nun alle Daten übertragen wurden. Nach einer Prüfung der übertragenen Daten im Steuergerät findet nun der eigentliche Flashvorgang statt. Typischerweise wird der Programmiervorgang einige Zeit dauern. In dieser Zeit ist das Steuergerät nicht in der Lage, Anfragen vom Tester zu verarbeiten. Daher wird Das Steuergerät den Dienst TransferExit meist mit einer negativen Antwort und dem Fehlerkode ResponsePending antworten. Erst wenn der Programmiervorgang abgeschlossen ist, sendet das Steuergerät die positive Bestätigung auf TransferExit.
Danach prüft der Diagnosetester, ob die Programmierung erfolgreich war, indem er über RoutineControl eine Routine im Steuergerät aktiviert, die den Speicher überprüft. Danach werden über einen weiteren Aufruf von RoutineControl verschiedene n Abhängigkeiten der Flashprogrammierung überprüft, beispielsweise ob zur Software noch der entsprechende Datensatz programmiert werden muss. Ist der Programmiervorgang des Steuergeräts vollständig abgeschlossen, wird das Steuergerät normalerweise über ECUReset zurückgesetzt. Das Steuergerät wird neu gestartet und geht in den normalen Betrieb, also zurück in die Default-Diagnosesitzung.
Um bei den anderen Steuergeräten im Fahrzeug ebenfalls den Normalzustand wiederherzustellen, wird über CommunicationControl auch die normale Buskommunikation wieder aufgenommen und die Fehlerspeicherung in den anderen Steuergeräten wird wieder eingeschaltet. Damit ist der Programmiervorgang abgeschlossen
Im folgenden Abschnitt wollen wir noch auf KWP 2000, den Vorläufer von UDS eingehen.
Siehe auch