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:
Diagnostic Session Control: Wechsel in die Programming Session
Request Download: Information des Steuergerätes über bevorstehenden Flashvorgang
Transfer Data: Teilen der Flash-Daten in separate Blöcke zur sequenziellen Übertragung an das Steuergerät
Request Transfer Exit: Abschluss des Flash-Vorgangs
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)
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)¶
Ziehe den Job RequestDownload aus dem Job-Reiter in dein Package
Befülle die Parameter wie folgt:
DataFormatIdentifier mit dem Identifier für das Datenformat
MemoryAddress mit der Speicheradresse
MemorySize mit der Speichergröße
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
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
Dieser Job schließt den Flash-Vorgang ab. Anschließend kann es nötig sein, das Steuergerät mit dem Job ECUReset neuzustarten.