BCM Firmware Reverse-Engineering (HW-Erkennung)

  • Neue Erkenntnis: Die Firmware des BCM erkennt an einem Word (2 Byte) im Flash an Adresse 0xFFFF_FC08 um welchen Funktionsumfang es sich handelt. Abhängig davon werden bestimmte Funktionen mit Dummy-Werten gefüttert, also anstelle z.B. den echten Feedback-Wert des A/D-Wanlder einer angetriggerten Antenne zurück zu liefern um deren Funktion zu überwachen, wird einfach ein 0-Wert zurück geliefert der der aufrufenden Routine mitteilt "Antenne kaputt, DTC auslösen". D.H. die Software selbst funktioniert überall gleich, nur das eben einmal echte Werte (sofern halt auch die Hardware vorhanden ist und diese liefert) und einmal Fake-Werte zurück kommen.


    Bei einem BCM mit TPMS steht an o.g. Adresse der Wert 0xDDDD in meinem BCM vom 2.2er Diesel ohne TPMS (aber dafür mit Xenon und BLIS) steht dort 0xCCCC und bei einem BCM aus einem Benziner ohne alles steht da 0x5555.


    Da ich also mein altes BCM 1:1 auf das neue gecloned habe kann dieses trotz vorhandener Hardware die Antennen nicht ansteuern. Ich muss erst diesen Wert ändern/patchen. Das möchte ich durch ein Aufspielen der Software via UCDS-Update, einfach die Version hochladen die für ein X-BCM gedacht ist. Das dürfte die Schlüsselcodes nicht korrumpieren und zum gewünschten Ergebnis führen.


    Ist wäre eine Überlegung wert einen Patch zu entwickeln der der Firmware bei nicht vorhandener TPMS-Hardware im BCM einfach gültige Werte vorgaukelt und somit die Erzeugung von DTCs bei aktiviertem TPMS aber ohne Antennen, verhindert. Damit könnte man dann das ganze auch ohne Tacho-Patch nutzen.


    Zum setzen der IDs gibt es auch Neuigkeiten. Eine Untersuchung des TPMS-Tools und der Firmware hat ergeben das es UDS-Kommandos gibt um die Werte der IDs ins BCM zu bringen. Wie schonmal erwähnt ist das BCM dasjenige welches sich um die IDs kümmert, der Tacho speichert da garnichts, der zeigt nur an. Somit bestünde auch ohne Nutzung des TPMS-Tools die Möglichkeit die Sensor-IDs den richtigen Positionen zuzuordnen.


    Es bleibt aktuell immer noch die Frage offen ob, warum und wo es eine Sensor-ID Filterung ungleich "0*" gibt. Möglicherweise sitzt diese im RFA-Empfänger? Das würde einen gewissen Sinn machen das BCM nicht mit allem Funkschrott den er so aufschnappt zu belästigen... D.H. man müsste hier mal den LIN-Bus zwischen RFA und BCM mitschneiden wenn man einmal einen gültigen und einen ungültigen Sensor zum funken bekommt.


    Apropos funken: Auch hier gibt es eine UDS-Funktion um jede einzelne Antenne beliebig an und aus zuschalten. Dadurch kann man dann das ausgesandte Protokoll nochmal überprüfen um damit ggf. einen separaten Handsender zu programmieren. So fing meine "Reise ins BCM" ja an... ;)


    Es bleibt spannend!

    "Lernen ist Erfahrung. Alles andere ist einfach nur Information."

    Albert Einstein

  • Ausgehend von der Signatur welche die HW-Funktionen der Firmware mitteilen findet man folgende Funktion an Adresse 0xFFF8_98D5 die diese behandelt:


    Schön zu erkennen, selbst ohne jegliche Assembler-Kenntnisse, wie die verschiedenen Signaturen abgeprüft werden. Offensichtlich gibt es diese Varianten:

    • 0xDDDD => Diesel BCM mit Xenon, BLIS, TPMS
    • 0xEEEE => (vermutlich) Diesel BCM mit Xenon
    • 0xCCCC => Diesel BCM mit Xenon, BLIS
    • 0x2222 => (vermutlich) Diesel BCM ohne alles

    In der Firmware für Benziner BCMs sind natürlich andere Signaturen hinterlegt (z.B. 0x5555 bei einem Benziner ohne alles).


    Die oben gezeigte Routine vergleicht die Signatur im Flash mit verschiedenen Werten und liefert dem Aufrufer eine 1 zurück wenn es sich um eine dieser Signaturen handelt, andernfalls eine 0. Da die hier abgefragten Signaturen nur Diesel-BCM Signaturen sind könnte das eine einfache Kondition sein sich bei einem Diesel so und bei einem Benziner anders zu verhalten. Aufgerufen wird sie nur an einer Stelle im Code (0xFFFF8_9982):

    Ist das Ergebnis 0, wird der linke Teil ausgeführt ansonsten der rechte.

    "Lernen ist Erfahrung. Alles andere ist einfach nur Information."

    Albert Einstein

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!