Zum Inhalt springen
AutoST by Zyberum GmbH
Menü
GlossarUDS

WriteDataByIdentifier (0x2E)

UDS WriteDataByIdentifier (0x2E) schreibt einen Data Identifier (DID) in ein Steuergerät. Die Request- und Response-Bytes, welche Session nötig ist und was zu prüfen ist.

Aktualisiert Diese Seite als Markdown

Kurz gesagt

WriteDataByIdentifier (0x2E) schreibt einen Datensatz in ein Steuergerät über seinen zwei Byte langen Data Identifier (DID). Der Request 2E F1 98 gefolgt von den Daten schreibt DID 0xF198, die positive Antwort 6E F1 98 spiegelt den Identifier. Schreiben ändert den Zustand, also brauchen die meisten schreibbaren DIDs die Extended Session und SecurityAccess. Welche Identifier in welcher Session schreibbar sind, ist ein zentraler Prüfpunkt.

Was ist WriteDataByIdentifier (0x2E)?

WriteDataByIdentifier schreibt einen benannten Datensatz in ein Steuergerät. Die zwei Bytes nach der Service-ID sind der Data Identifier (DID), der Rest des Requests sind die neuen Daten. Die positive Antwort spiegelt nur den Identifier, ohne Daten.

Ein normaler Ablauf:

RichtungBytesBedeutung
Request2E F1 98 01 02 03 04DID 0xF198 mit vier Bytes schreiben
Positive Antwort6E F1 98Schreiben akzeptiert
Negative Antwort7F 2E 33securityAccessDenied

Weitere typische negative Antworten sind 7F 2E 31 (requestOutOfRange, DID nicht schreibbar), 7F 2E 13 (incorrectMessageLengthOrInvalidFormat, Datenlänge falsch für den DID), 7F 2E 22 (conditionsNotCorrect) und 7F 2E 7F (serviceNotSupportedInActiveSession).

Wo ist es definiert?

ISO 14229-1:2020 definiert WriteDataByIdentifier (0x2E) im Data transmission functional unit. Die Norm beschreibt den Request als SID, zwei Byte Identifier und Datensatz, die positive Antwort als SID plus 0x40 und Identifier und die feste Datenlänge pro Identifier. Die Zugriffsregeln und die Identifier-Liste kommen aus der OEM-Diagnosebeschreibung. Auf CAN ist der Transport ISO 15765-2.

Was es in der Praxis bedeutet

Ein Schreibzugriff auf einen DID ändert den Zustand, deshalb ist es der Service, den ein sorgfältiger Test zuletzt anfasst. Welche Identifier in welcher Session und auf welchem Security-Level schreibbar sind, legt die Spezifikation fest. Bei der Validierung wird geprüft:

  • jeder schreibbare DID ist nur in der vorgesehenen Session und nach dem vorgesehenen Unlock schreibbar;
  • ein Schreibzugriff auf einen nur lesbaren DID gibt NRC 0x31, keinen stillen Erfolg;
  • die Datenlänge wird erzwungen: ein zu kurzer oder zu langer Datensatz gibt NRC 0x13 und keinen Teilschreibzugriff;
  • der Wert liest sich mit 0x22 exakt so zurück, wie er geschrieben wurde;
  • Bedingungen wie ein laufender Motor erzeugen korrekt conditionsNotCorrect.

Wir sehen regelmäßig schreibbare Identifikations-DIDs, darunter Seriennummern und Fingerprints, die einen Schreibzugriff in der Extended Session ohne SecurityAccess akzeptieren, wodurch sich ein Datensatz überschreiben lässt, der fest sein sollte.

Wie AutoST es testet

Weil Schreiben destruktiv ist, lässt AutoST das Schreibtesten (0x2E) im Default aus und fragt vor dem Start ausdrücklich nach. Aktiviert prüft es DID-Schreibzugriffe mit Falschlängen- und Rückleseprüfungen gegen die Identifier aus deiner importierten ODX-, PDX- oder CDD-Datei, hält fest, ob das Steuergerät die korrekte Länge erzwingt und welche Session und welches Security-Level jeder Schreibzugriff braucht, und brute-forct keine unbekannten Identifier.

FAQ

Häufig gestellte Fragen

Wie unterscheidet sich 0x2E von 0x22?

ReadDataByIdentifier (0x22) liefert den aktuellen Wert eines DID; WriteDataByIdentifier (0x2E) ersetzt ihn. 0x2E trägt die neuen Daten im Request und ändert den Zustand, deshalb braucht es fast immer eine höhere Session und SecurityAccess als der passende Lesezugriff.

Kann ein Request mehrere DIDs schreiben?

Nein. Anders als 0x22 schreibt WriteDataByIdentifier genau einen Identifier pro Request: die SID, die zwei Identifier-Bytes, dann den Datensatz. Das Steuergerät muss die feste Länge dieses DID kennen, um den Request zu prüfen.

Was passiert bei falscher Länge?

Passen die Daten nicht zur Länge, die das Steuergerät für diesen DID erwartet, antwortet es mit NRC 0x13 (incorrectMessageLengthOrInvalidFormat) und schreibt nicht. Eine korrekte Implementierung schreibt nie einen Teildatensatz.

Quellen

Passende Seiten

Sieh es auf deinem ECU

Ein Begriff, der für dein Steuergerät zählt?

In 15 Minuten sagen wir dir, wie AutoST ihn testet, wie ein Finding aussieht und was er für deinen ISO/SAE-21434-Nachweis bedeutet.

  • Direkte Antwort von einem ECU-Security-Engineer
  • Welcher Test den Begriff abdeckt
  • Kostenlos und unverbindlich
Tom Zaubermann

Deine Demo ist mitTom ZaubermannGründer von Zyberum, früher Leiter des VW InCar Security Testing Lab

Bereits im Einsatz bei Tier-1-, Tier-2-Zulieferern und OEMs. Referenzen auf Anfrage.

Ruf uns an: +49 176 439 17074automotive@zyberum.com

Oder schreib uns eine Nachricht

Wir antworten innerhalb eines Werktags.

Ruf uns anAutoST-Team fragen

Wähle einen Termin, der dir passt

In neuem Tab öffnen