Tutorial Diagnose

Info

Um die folgenden Features vollumfänglich nutzen zu können, muss die Add-on ecu.test diagnostics Lizenz aktiviert sein.

In den folgenden Tutorials sind Workflows rund um das Add-on ecu.test diagnostics zusammengestellt.

Flashen

Eine der wichtigsten Funktionen der Fahrzeugdiagnose ist das Flashen des Steuergeräts. Während dieses Prozesses wird die Steuergeräte-Software, oder Teile davon, durch einen neuen Stand ersetzt. Der UDS Standard (ISO-14229) legt fest, welche Services ausgeführt werden müssen, um einen Flash-Vorgang durchzuführen.

Warnung

Permanente Schädigung des Steuergerätes durch falsches Flashen

Das Flashen kann bei Fehlbedienung oder fehlerhaften Softwareständen zu Fehlern oder permanenten Schäden des Steuergeräts führen.

Stelle vor jedem Flash-Vorgang sicher, dass du die richtigen Einstellungen getroffen hast.

ecu.test unterstützt die UDS-Services, prüft jedoch nicht die Korrektheit der Daten und getätigten Einstellungen. tracetronic übernimmt keine Haftung bei der Verwendung.

Flash-Workflow

Das Flashen des Steuergerätes umfasst vier Arbeitsschritte, die aufeinander aufbauen:

  1. Diagnostic Session Control: Wechsel in die Programming Session

  2. Request Download: Information des Steuergerätes über bevorstehenden Flashvorgang

  3. Transfer Data: Teilen der Flash-Daten in separate Blöcke zur sequenziellen Übertragung an das Steuergerät

  4. Request Transfer Exit: Abschluss des Flash-Vorgangs

../_images/FlashProcess.png

Benötigte Daten

Die für das Flashen benötigten Daten sind herstellerspezifisch. Es existiert keine einheitliche Quelle.

Flash-Daten

Die Flash-Daten sind Binärdaten, die auf das Steuergerät übertragen werden sollen. Meistens liegen diese als Datei vor.

Da die Flash-Daten in ecu.test als ByteStream angegeben werden, muss aus der Binär-Datei ein Bytestream erzeugt werden.

Der folgende Code-Block enthält dazu ein Beispiel:

def func(pathToFlashContainer):
    with open(pathToFlashContainer, mode="rb") as flashContainer:
        return ByteStream.FromRawString(flashContainer.read())

Speicheradresse (memory address)

Die Speicheradresse ist die Startadresse im Speicher des Steuergeräts, an die die Flash-Daten geschrieben werden.

Speichergröße (memory size)

Die Speichergröße ist die Länge der zu übertragenden Daten. Das Steuergerät überprüft anhand dieses Werts, ob die übertragenen Daten vollständig sind. Ob sich die Speichergröße auf die gepackten oder ungepackten Daten bezieht, ist herstellerspezifisch.

Info

Flash-Daten können gepackte Daten enthalten, weshalb die Länge der Flash-Daten nicht der Speichergröße entsprechen muss.

Identifier für das Datenformat (data format identifier)

Der Identifier beschreibt die verwendete Kompressions- beziehungsweise die Verschlüsselungs-Methode.

Ist der Wert 0, wird keine der beiden Methoden angewendet. Alle anderen Werte sind herstellerspezifisch.

Schritt 1: Wechsel in die programming session (Service 0x10)

  • Ziehe den Job DiagnosticSessionControl aus dem Job-Reiter in dein Package

  • Befülle den Parameter SessionType mit dem Wert 2 (Programming Session)

../_images/FlashJobs.png

Das Steuergerät wird durch diesen Job in die Programming Session gesetzt. Nur in dieser Session kann ein Steuergerät geflasht werden.

Info

Es kann nötig sein, dass noch weitere Diagnoseservices ausgeführt werden müssen um das Steuergerät flashen zu können (beispielsweise Authenticate oder RoutineControl).

Schritt 2: Request Download (Service 0x34)

../_images/FlashRequestDownload.png

Das Steuergerät wird durch diesen Job über den bevorstehenden Flashvorgang informiert.

Im Positivfall liefert der Job als Rückgabewert ein RequestDownloadResult object, das für Schritt 3 benötigt wird.

Schritt 3: Transfer Data (Service 0x36)

  • Ziehe den Job TransferData aus dem Job-Reiter in dein Package

  • Befülle die Parameter wie folgt:

    • BlockLength mit der maximalen Blocklänge, die das Steuergerät unterstützt. Diese wird durch das RequestDownloadResult object über die Methode GetMaxNumberOfBlockLengthAsInt bereitgestellt.

    • FlashData mit den Flash-Daten

../_images/FlashTransferData.png

Der Job teilt während der Ausführung die Flash-Daten in separate Blöcke (transferRequestParameterRecord) und überträgt diese sequenziell an das Steuergerät. Dieser Vorgang kann abhängig von der Gesamtgröße der Flash-Daten und des gewählten Netzwerkprotokolls mehrere Minuten dauern.

Als Rückgabewert liefert der Job ein TransferDataResult object. Dieses enthält für jeden übertragenen Block ein separates TransferDataBlockResult object.

Schritt 4: Request Transfer Exit (Service 0x37)

  • Ziehe den Job RequestTransferExit aus dem Job-Reiter in dein Package

../_images/FlashReport.png

Dieser Job schließt den Flash-Vorgang ab. Anschließend kann es nötig sein, das Steuergerät mit dem Job ECUReset neuzustarten.