User Tools

Site Tools


de:obd2

OBD-II-Diagnose

Was du über die OBD-II-Buchse des U5 bekommst und was nicht — ermittelt durch Abtasten mit einem billigen USB-CAN-Adapter und Gegenprüfen anhand der Anzeigen der Head-Unit. Kurzfassung: du kannst sehr viel lesen, aber ohne den geheimen Schlüssel des Herstellers nichts schreiben. Siehe CAN-Bus dazu, wie sich dieser Anschluss von den internen Bussen unterscheidet.

Der Anschluss ist ein reines Abfrage-Diagnosegateway

  • OBD-II Pin 6 = CAN-H, Pin 14 = CAN-L (Masse an 4/5, Dauerplus 12 V an 16). Das ist das einzige CAN-Paar am Stecker — kein zweiter Bus, kein Automotive Ethernet / DoIP.
  • Passives Mithören bleibt stumm — bei jeder Bitrate wird hier nichts gesendet.
  • Aktive Anfragen werden beantwortet, und zwar mit 500 kbit/s, 11 Bit (ISO 15765-4). 29 Bit und andere Bitraten bleiben stumm.
  • Der Anschluss hängt an einem eigenen Diagnose-CAN, der am zentralen Gateway endet. Das Gateway verbindet die getrennten internen Busse des Fahrzeugs — Antrieb, Fahrwerk, Karosserie/Komfort, Infotainment, Telematik — und leitet jede Anfrage an das Zielsteuergerät weiter. Du erreichst darüber also jedes Steuergerät, aber am Stecker liegen die laufenden internen Botschaften nie an. Du kannst hier abfragen, nicht mitschneiden. Das ist eine echte Firewall im zentralen Gateway.

Generisches OBD-II — jedes Diagnosegerät

Die genormten Abgasdienste funktionieren, funktional adressiert an 0x7DF (Antworten auf 0x7E8):

  • Mode 09 — VIN (09 02) und Kalibrier-IDs.
  • Mode 03 / 07 / 0A — gespeicherte / sporadische / permanente DTCs.
  • Mode 01 — Live-PIDs. Der primäre Antriebs-Endpunkt (0x7E0) meldet eine PID-Unterstützungsmaske von BF FB FF F7 und — bei einem Elektroauto praktisch — PID 0x5B („hybrid/EV battery remaining charge“, verbleibende Ladung der Antriebsbatterie).
  • Mode 04 — Abgas-DTCs löschen (siehe Fehlercodes löschen weiter unten).

Wie bei jedem Elektroauto gibt generisches OBD wenig her — VIN, generische Fehlercodes, ein paar Werte (im geparkten Zustand meist 0). Alles Interessante — echter SoC, Packspannung, Zelldaten — liegt in der darunterliegenden herstellerspezifischen UDS-Schicht.

Die Steuergeräte-Übersicht (UDS)

Das Gateway leitet UDS-Anfragen an die internen Steuergeräte weiter. Zähle sie behutsam mit einem einzigen funktionalen TesterPresent auf (3E 00 → 0x7DF): das ändert nichts, und trotzdem antwortet jedes erreichbare Steuergerät von seiner eigenen ID. Beim U5 findet man so 24 Steuergeräte. Antwort-ID = Anfrage-ID + 8 (z. B. 0x701 → 0x709).

Anfrage-ID Anmerkungen
0x7E0 Antriebs-Endpunkt für generisches OBD. Antwortet auf Mode 01, weist aber jedes UDS ab (serviceNotSupported).
0x7E1 Batteriemanagementsystem — Packspannung / Strom / SoC / Zelldaten liegen hier (siehe unten).
0x7E2, 0x7E3 Antriebspaar (fortlaufende Teilenummern) — Motor-/Ladeelektronik.
0x700–0x707, 0x710–0x713, 0x720–0x727, 0x730–0x736, 0x7AC Steuergeräte für Karosserie / Fahrwerk / Komfort (BCM, HVAC, ESP, EPS, Airbag, Lenkung, Kombiinstrument, Sitze, Heckklappe, TPMS, …).

Die so erreichbaren internen Steuergeräte sind der übliche EV-Satz: BMS, VCU, Motorsteuergerät, Bordladegerät, Fahrstufenwahl (Antrieb); BCM, Klimamodul, PTC/Kompressor, Sitzheizungen, Heckklappe, Warnklang für niedrige Geschwindigkeit (Karosserie); ESP, EPS, iBooster, Airbag, Lenkwinkelsensor, Kameras/Radare (Fahrwerk); Head-Unit, Kombiinstrument (Infotainment); T-Box (Telematik). Die genaue Zuordnung Adresse↔Modul ist nur für 0x7E0/0x7E1 bestätigt; der Rest ist aus den Daten und dem Adressblock erschlossen.

Daten lesen (zerstörungsfrei)

In der Standardsitzung (ohne Sitzungswechsel) geht üblicherweise:

  • 0x19 ReadDTCInformation — gespeicherte Fehlercodes, dekodiert (19 02 FF = Abfrage nach Statusmaske).
  • 0x22 ReadDataByIdentifier — Daten über eine 16-Bit-DID lesen.

Der Identifikationsblock (DIDs 0xF180–0xF1FF) liefert bei den meisten Steuergeräten: eine Teilenummer im Schema 8619xxxxx, einen Lieferantencode (CS-000xxx), ein Programmierdatum und die VIN (0xF190). Beispiel von einem Steuergerät: Teil 861923101B, Lieferant CS-000029, programmiert 2021-11-10. Wenn du das über alle 24 Steuergeräte durchziehst, entsteht eine komplette Teilenummern- und Build-Karte des Fahrzeugs — eine öffentliche Aiways-Steuergeräteliste gibt es sonst nicht.

Das BMS (0x7E1) führt einen Live-Messblock rund um die DIDs 0x8800–0x887F — grob 120 aggregierte Batteriewerte: Packspannung, Strom, Zellspannungen, SoC, Temperaturen und Statuswörter. Hier sollten die Zahlen liegen, die die Head-Unit nicht zeigt (Zelle min/max, Temperaturen, Alterungszustand).

⚠ Das Fahrzeug nicht stören, während es benutzt wird

Ein breit angelegter Scan — viele Steuergeräteadressen durchfahren und dabei eine erweiterte Sitzung erzwingen (10 03) — bringt Steuergeräte dazu, ihre normalen CAN-Botschaften einzustellen. Das Kombiinstrument markiert die „fehlenden“ Module dann mit Warnsymbolen, und eine nachgelagerte Anzeige kann auf einem Ersatzwert einfrieren (wir haben gesehen, wie die Außentemperaturanzeige hängenblieb). Es ist nur lesend und geht von selbst zurück, sobald das Abtasten aufhört, aber:

  • Führe niemals einen breiten/aggressiven Scan während der Fahrt aus — ein Steuergerät, das mitten in der Fahrt vom Bus fällt, ist unsicher.
  • Nimm besser die behutsame Methode: funktionale Erkennung + nur Lesezugriffe in der Standardsitzung (0x19 / 0x22), keine Sitzungssteuerung. Ein einzelner Lesezugriff auf ein Steuergerät in der Standardsitzung stört das Kombiinstrument nicht.

Die Fehlercodes, die du sehen wirst

Die letzten zwei Hex-Stellen eines DTC sind das genormte Fehlertyp-Byte: …88 = CAN Bus Off, …87 = fehlende Botschaft / Zeitüberschreitung, …82/83 = Aktivitätszähler / Prüfsumme. Ein `U…87`- / `U…88`-Code bedeutet also „Kommunikationsverlust“, kein echtes Hardware-Ereignis.

Eine Folge davon: jede Bus- oder Spannungsunterbrechung — auch ein aggressiver Scan — lässt viele Module gleichzeitig „Kommunikationsverlust“ gegeneinander eintragen. Nach einem heftigen Scan ist mit einer langen Liste von U-Codes zu rechnen (und mit zusammenhängenden B-/C-Code-Bereichen); das sind Artefakte, die sich über saubere Fahrzyklen selbst löschen. Beachtung verdienen die Antriebs-P-Codes, die auf echte Sensor- / HV-Fehler zeigen. Lies erst alle mit 0x19 aus, dann urteile.

Fehlercodes des Batteriemanagements

Die herstellerspezifischen Codes (zweites Zeichen `1`, z. B. P110C00) sind, wie sich zeigt, ordentlich dokumentiert und tatsächlich EV-relevant — Spannungsprüfungen der HV-Schütze, Fehler der BMS-Stromsensoren, Zeitüberschreitungen von Gateway-Botschaften, Crash-/Airbag-Signalisierung. Keiner davon ist ein Überrest aus der Verbrennerwelt. Die folgenden Codes des Batteriemanagements sind identifiziert und bestätigt:

Code Bedeutung
P112868 Fehler des CAN-Kollisions-(Crash-)Signals
U11FA87 Zeitüberschreitung der Botschaft 0x2BB des Gateways
U11FB87 Zeitüberschreitung der Botschaft 0x2DF des Gateways
U11FC87 Zeitüberschreitung der Botschaft 0x3AA des Gateways
U11FD87 Zeitüberschreitung der Botschaft 0x050 des Gateways
U11FE87 Zeitüberschreitung der Botschaft 0x2F1 des Gateways
U11FF87 Zeitüberschreitung der Botschaft 0x195 des Gateways
U120087 Zeitüberschreitung der Botschaft 0x37F des Gateways
U120187 Zeitüberschreitung der Botschaft 0x28C des Gateways
U120287 Zeitüberschreitung der Botschaft 0x17D des Gateways
U002888 CAN-Bus deaktiviert (Bus-Off ≥3 s im geweckten Zustand)
U00BA88 CAN-Bus für Gleichstrom-Schnellladen deaktiviert
U10BA87 Zeitüberschreitung der Botschaft Gleichstrom-Schnellladen (Ladesteuergerät)
U112182 Fehler im Zähler der Crash-Botschaft des Airbag-Steuergeräts
U112183 Prüfsummenfehler der Crash-Botschaft des Airbag-Steuergeräts
U011187 Kommunikationsverlust mit dem BMS (Botschaft 0x2C7 fehlt 10 s)
P110364 Plausibilitätsfehler der Spannung hinter dem Hauptrelais
P110386 Spannung am Hauptrelais ungültig
P11021C Batteriespannung außerhalb des zulässigen Bereichs
P11081C Versorgungsspannung des internen Stromsensors (CAB) fehlerhaft
P110A1C Versorgungsspannung des internen Stromsensors (LEM) fehlerhaft
P110C00 12-V-Versorgung schaltet sich unerwartet ab
P11011D Shunt-Strom außerhalb des zulässigen Bereichs
P110162 Plausibilitätsprüfung des Shunt-Stromsignals fehlgeschlagen
P110164 Selbstlernfehler des Shunt-Stromsensors
P110167 Fehler des Shunt-Stromsensors
P110192 Strommessfehler in zwei Schaltkreisen
P110711 Interner Stromsensor (Iem) — Kurzschluss nach Masse
P110712 Interner Stromsensor (Iem) — Kurzschluss nach Plus
P110264 Plausibilitätsprüfung des Batteriesignals fehlgeschlagen
P110286 Batteriespannungssignal ungültig
P110464 Plausibilitätsfehler der Spannung hinter dem Relais für Gleichstrom-Schnellladen
P110486 Gleichstrom-Ladespannung ungültig
P11B467 Spannungsfehler beim Gleichstrom-Schnellladen
P11051D Messwert des Hall-Stromsensors außerhalb des Bereichs
P110562 Plausibilitätsprüfung des Hall-Stromsignals fehlgeschlagen
P110564 Selbstlernfehler des Hall-Stromsensors
P110567 Hall-Stromsensor defekt
P110592 Abweichung des von verschiedenen Sensoren gemessenen Sammelschienenstroms zu groß
P110609 Fehler des internen Stromsensors (CAB)
P11061C Versorgungsspannung des internen Stromsensors (CAB) fehlerhaft
P110692 Fehler des internen Stromsensors (CAB) nach dem BMS-Selbsttest
P115B92 Gleichzeitiger Ausfall der Sensoren zweier Strom-Schaltkreise
U11F487 Zeitüberschreitung der Botschaft des internen Stromsensors (CAB)

Jeder Code hier löscht sich automatisch, wenn er 40 Fahrzyklen lang nicht auftritt — oder per Diagnosegerät. Die übliche Eskalation bei der Reparatur ist: Codes anderer Module gegenprüfen → Kabelbaum/Steckverbinder prüfen → Isolationswiderstand des HV-Kabelbaums prüfen (Zielwert >1,5 MΩ, ≥120 MΩ für die PTC-Heizung, bei 500 V DC) → Antriebsbatterie komplett als Baugruppe ersetzen — einen Reparaturweg auf Bauteilebene für die BMS-Platine gibt es nicht.

Die generischen/SAE-Codes dagegen (zweites Zeichen `0`, z. B. die oben bei Live-Scans gesehenen P02C1/P01C1) liegen in Bereichen, die die Norm für Verbrenner-Teilsysteme definiert — P02xx heißt nominell „fuel injector circuit“ (Einspritzventil-Schaltkreis) und ist an diesem Auto bedeutungslos. Das Steuergerät, das sie meldet, identifiziert sich über Mode 09 selbst als HPCM-HybridPtCtrl („Hybrid Powertrain Control Module“) — ein echter Hinweis darauf, dass seine Diagnosesoftware von einer Hybrid-/Verbrennerplattform stammt und einige alte generische Prüfungen für die reine EV-Variante nie ganz herausgenommen wurden. Behandle unerklärte Codes im generischen P0-Bereich mit Misstrauen; verlässlich ist der herstellerspezifische P1xx-Bereich.

Auch Codes des Ladesystems sind aufgetaucht, bisher aber nur als nackte Kennungen (noch keine Definitionen gefunden): P120019, P120119, P122000, P122100, P128A19, P128B98, P12A500. Wenn jemand herausfindet, was die bedeuten, bitte hier ergänzen.

Hinweis zur Abdeckung: eine systematische Suche hat Fehlercode-Dokumentation nur für die obigen Codes des Batteriemanagements und für diese nackte Liste des Ladesystems gefunden — noch nichts für ESP, Parkbremse, Bremskraftverstärker, Lenkung, HVAC oder Karosserieelektrik. Wenn dein Auto einen Code aus einem dieser Bereiche wirft, ist er in diesem Wiki nicht dokumentiert — bitte ergänze, was du findest.

Die Rohwerte dekodieren

Für die herstellerspezifischen DIDs gibt es keine öffentliche Skalierung, also werden Rohwerte über Korrelation dekodiert — lies eine DID, während du den wahren Wert aus einer anderen Quelle kennst (die dekodierte Anzeige der Head-Unit ist ideal), und suche das Feld plus den Faktor, die passen. Einem Feld ist erst zu trauen, wenn du es bewegen kannst: schalte eine große HV-Last (Klimakompressor) ein und aus und schau, welche Felder mitgehen.

So am BMS (0x7E1) bestätigt:

  • Packspannung = DID 0x8871 (Rohwert = Volt; gelesen 407 gegen 406,9 V in der Head-Unit).
  • Packstrom = DID 0x887b (steigt mit der Last; über den Klima-Ein/Aus-Test identifiziert).

Für Ladezustand und die Spannung des 12-V-Systems gibt es plausible Kandidaten, sie sind aber noch nicht festgenagelt — nahezu konstante Signale brauchen das Fahrzeug in verschiedenen Zuständen (eine Fahrt, ein Ladevorgang), bevor Feld und Skalierung bestätigt werden können. Die dekodierten Zahlen sind gegen die bekannten Packdaten plausibel (Bereich ≈268–417 V, 24 Module, Zelle 2,8–4,35 V), also ist z. B. ein 0x882d-Messwert von ≈4,01 V eine echte Zellspannung. Ein Logger, der Referenzwerte und DIDs gemeinsam über normale Fahrten mitschreibt, ist der saubere Weg, die Karte fertigzustellen.

Fehlercodes löschen

Das Löschen von DTCs ist der eine „Schreibzugriff“, der normalerweise ohne Security Access (Sicherheitszugriff) erlaubt ist — er wird für Reparaturen gebraucht:

  • Generisch — Mode 04 (ClearDiagnosticInformation): 04 an 0x7DF / 0x7E0 senden. Löscht Abgas-DTCs und Freeze Frames.
  • Herstellerspezifisch — UDS-Dienst 0x14: 14 FF FF FF („alle Gruppen löschen“) an ein bestimmtes Steuergerät senden (z. B. 0x7E1). Löscht die gespeicherten DTCs dieses Moduls, üblicherweise in der Standardsitzung.

Anmerkungen: Löschen verdeckt echte Fehler (gute und schlechte gleichermaßen) — lies die Codes vorher aus. Permanente DTCs kann kein Werkzeug löschen; das Steuergerät löscht sie selbst, nachdem seine Readiness-Monitore durchgelaufen sind. Das Abklemmen der 12-V-Batterie setzt flüchtige Anzeigezustände zurück, löscht aber keine gespeicherten DTCs (nichtflüchtig) — dafür brauchst du einen Löschbefehl.

Das Fahrzeug aufwecken

Diagnoseanfragen an diesem Anschluss wecken das Gateway und die adressierten Steuergeräte für die Diagnose (so arbeitet ein Diagnosegerät an einem geparkten Auto). Das ist aber nur ein Diagnose-Weckruf — es fährt das HV-System nicht hoch, schließt die Hauptschütze nicht und startet die Klimatisierung nicht. Das sind Aktuator-Funktionen hinter Security Access.

Was gesperrt ist — und die eine interessante Ausnahme

Alles, was verändert oder ansteuert — Konfiguration schreiben (0x2E), Aktuatortests (0x2F), Routinen (0x31), Steuergerät-Reset (0x11), Flashen (0x34/0x36/0x37) — liegt hinter Security Access (0x27). Das Gateway antwortet auf eine Seed-Anfrage, aber der Schlüsselalgorithmus ist ein OEM-Geheimnis, das für dieses Auto nicht öffentlich ist. In der Praxis ist OBD-II hier also nur lesend: Fehlercodes und Daten ja, Steuern nein.

Die interessante Ausnahme: ein Werkstatt-Diagnosegerät aktiviert Funktionen wie HV-Hochfahren oder Vorklimatisierung über eine sicherheitsgeschützte Routine (0x31) über denselben Diagnose-CAN. Der Diagnoseanschluss ist für die Steuerung also architektonisch keine Sackgasse — mit dem richtigen Security-Access-Schlüssel ließe sich die Vorklimatisierung im Prinzip direkt über OBD-II befehlen, ohne Anzapfen eines internen Busses. Der Schlüssel ist das fehlende Stück (siehe Roadmap).

Alles Standard

Darunter steckt schlichtes UDS (ISO 14229) über ISO-TP (ISO 15765-2) auf 500 k / 11 Bit CAN — auf Protokollebene nichts Proprietäres. Das heißt, gängige offene Werkzeuge funktionieren: ein kleiner ISO-TP- + UDS-Client in Python oder Diagnosewerkzeuge von der Stange sprechen mit diesem Auto. Nicht offen sind das Datenwörterbuch (welche DID was bedeutet, mit welcher Skalierung) und der Security-Access-Schlüssel — beide stecken in der Diagnosedatenbank des Herstellers.

Verkabelung & Werkzeug

Ein USB-CAN-Adapter der CANable-Klasse (gs_usb) auf 500 k / 11 Bit, aus Python angesteuert (Rohframes + eine kleine ISO-TP-Schicht für mehrteilige UDS-Botschaften).

  • CAN-H → OBD-Pin 6, CAN-L → OBD-Pin 14 verdrahten, Masse an Pin 4/5. Wenn du das falsch machst, sieht es genau wie ein toter Bus aus.
  • DIP-Schalter des Adapters: Boot OFF (Betrieb), R120 OFF (der OBD-II-Bus ist schon mit 2×120 Ω terminiert). Eine DIP-Änderung wirkt erst nach komplettem Aus- und Wiedereinstecken.
  • Prüfe die Verdrahtung, indem du beim aktiven Abtasten die TX- und RX-LEDs des Adapters blinken siehst.
de/obd2.txt · Last modified: by 127.0.0.1