Reverse Engineering des Batterie-Sensors

  • Mein Mondeo 2,0 Duratec 9/12 hat einen ohne Start/Stop

  • So langam frage ich mich ob Ford das würfelt?

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

    Albert Einstein

  • Könnte schon sein. Habens doch damals beim Airbag (2 Klammern/3Klammern) auch gemacht. BTW: unser 2011er 2.2er FL hatte auch kein Start/Stop, aber dafür den Batt. Sensor.

    Gruß Franky
    _____________
    Immernoch.....unterwegs mit 239KW/471Nm........und loift :D

  • So langam frage ich mich ob Ford das würfelt?

    Nö, noch einfacher. Die haben eingebaut was gerade am Band in greifbarer Nähe herumlag.^^

    Gruß aus Erfurt

    Schon der dritte vierte Ford und der Fahrer wird nicht schlau draus!

  • April 2014 produktion Datum hier,1.6 TDCI Buisniespaket, Titanium Serie 60,Belgien Import,hat Batterie sensor.

    Ich könnte den Sniffer die Tage schnuppern lasen Oliver

  • Go4IT wie setze ich das BMS zurück..hab die Batterie getauscht.

    Alles was ich zum zurücksetzen gefunden hab , funktioniert aber nicht.

  • Hab die falsche Taste gedrückt , Nebelscheinwerfer statt Nebelschlussleuchte🙈🙈 Hat funktioniert Danke

  • Passiert,bei so viel Knöpfen in Mondeo:-)

    Steht auch in wiki

    https://mk4-wiki.denkdose.de/artikel/autoba…ie_sensor_reset

  • Nachdem ich nun auch einen Batteriesensor im Fahrzeug habe, gebe ich mich mal ans Decoding der Nachrichten die dieser mit dem BCM so austauscht. Mein erster Test war einfach mal ein Oszi dran hängen (kleiner Tipp: mit einem "Ossi" klappt es leider nicht!) und siehe da: nach dem einschalten der Zündung habe ich dort heftigen Grenzverkehr ;)

    Dann werde ich mir jetzt mal einen kleinen LIN-Bus Sniffer zusammenbauen und mal schauen was ich dort so finde. LIN ist ja im Grunde nichts anderes als ein Serieller-Port mit ein paar Spezialitäten (BREAK). Ich wollte mir immer mal einen LIN-Bus Adapter für PC kaufen, stattdessen habe ich mir immer was zusammengelötet... naja.

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

    Albert Einstein

  • ..., gehe ich mich mal ans Decoding der Nachrichten die dieser mit dem BCM so austauscht.

    Wenn das BCM bereits mit dem Sensor kommuniziert, könnte man auch mal mit ForScan aus dem BCM alle Batterie-bezogenen Daten auslesen.

    Die Werte für Batterie-Strom, -SOC, -Temperatur und cumulative Charge/Discharge dürfte es ja nur mittels des Batteriesensors geben:

    Mondeo Turnier 2.0 FFV Titanium, Thunder, ACC, IVDC, Bi-Xenon, KeyFree+PowerStart, Alarmanlage, Solarreflect, PDC vorn u. hinten, TPMS, Sitzklima, Luftqualitätsmesser+kühlbares Handschuhfach, Sony-6CD, Bluetooth-FSE incl. S&C, Außenspiegel anklappbar, silberfarbene Dachreling, Notrad incl. Wagenheber

    Selbsteinbau: Rückfahr- u. Front-Kamera mit 9" TFT-Monitor in der Sonnenblende, Ambiente-Beleuchtung in den Türgriffmulden, Rückstrahler an allen 4 Türen beleuchtet

    Baumonat 10/2008

  • Ich habe jetzt dem Signal erstmal zur Bestimmung der Baudrate mittels einem Logic-Analyzer auf den Zahn gefühlt. Hier habe ich nach dem LIN-Transceiver (ich habe einen TJA1020 verwendet, den "Klassiker"):

    Mit 2M/s aufgezeichnet ergibt sich eine Bit-Zeit von 104,5 µs, was nach der Formel Baudrate = 1 / Bit-Zeit in s eine Baudrate von 9.600 ergibt. Das ist schon etwas ungewöhnlich, da LIN standardmäßig 19.200 Baud benutzt, gut das ich nachgemessen habe! LIN nutzt 8N1, also 8 Daten-Bits (das LSB zuerst), kein Parity-Bit und 1 Stopp-Bit. Nie mit angegeben aber immer enthalten ist auch ein Start-Bit. Ein LIN-Frame, die kleinste Informationseinheit also, besteht aus insgesamt 10 Bits.

    So habe ich den Protocol-Interpreter vom Logic-Analyzer eingestellt und sehe damit dann auch diese Frame-Daten in Form von Bytes.

    Wie schon erwähnt gibt es auf einem LIN-Bus einen Master und mehrere (bis zu 63) Slaves. Auf unserem Batteriesensor-Bus zum glück nur diesen einen Slave. Die senden nur wenn sie vom Master dazu aufgefordert werden. Die Kommunikation läuft immer so ab das der Master einen Request (Header) auf den Bus legt. Dieser besteht aus einem BREAK, einem SYNC und einem PID.

    Das BREAK ist (mind.) 13 Bits lang und besteht als 0-Bits (Leitung wird auf LOW gezogen). Im gemessenen Signal ist es 1,352 ms lang (13 * 104 µs):

    Das BREAK gibt den Slaves auf dem Bus Zeit aufzuwachen, falls diese sich im Tiefschlaf befinden. Dann folgt das SYNC, welches aus einer Folge von 0 und 1 im Wechsel besteht (daraus resultiert der Hex Bytewert 0x55). Dies verwenden die Slaves um sich auf die Baudrate und Phase des Masters einstellen zu können.

    Als letztes überträgt der Master das PID, quasi die Adresse des Slaves der angesprochen wird. Die eigentliche ID ist dabei 6 Bit lang, wodurch sich eine maximale Anzahl von 63 Nodes ergibt. Weil die ID wichtig ist wird sie mit zwei Paritäts-Bits gesichert (die höchstwertigen Bits). Der Wert des Partitäts-Bits P0 ergibt sich aus einem XOR von ID0 ^ ID1, sowie einem ID2 ^ ID4 und einem XOR beider Ergebnisse. Das Parity Bit P1 verwendet ID1, ID3, ID4 und ID5 zur Berechnung. Im obigen Datagramm ist 0x20 die LIN-Bus Adresse. Bei dieser Adresse sind beide Paritäts-Bits "0" wodurch sich keine Werteänderung ergibt. Die Adresse ist auch gleichzeitig sowas wie ein Befehl. Ein LIN-Slave kann auf mehreren Adressen reagieren um damit unterschiedliche Daten zu senden.

    Im Anschluß an dieses Anforderungs-Signal vom Master sendet der sich angesprochene Slave dann seine Daten. Das ist aus dem obigen Beispiel:

    0x84 0x80 0x00 0x00

    Wieviele Bytes das sind, bestimmt allein der Slave, es dürfen aber maximal 8 sein. Dem folgt dann ein CHECKSUM Byte (ob im Beispiel 0xFA).

    So sieht dann eine solche Datensalve aus:

    Als nächstes versuche ich dann mittels meines Selbstbau LIN-Sniffers, bestehend aus dem TJA1020 und einem ESP32 die reinen Nutzdaten zu extrahieren und daraus schlau zu werden.

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

    Albert Einstein

  • Die Werte für Batterie-Strom, -SOC, -Temperatur und cumulative Charge/Discharge dürfte es ja nur mittels des Batteriesensors geben:

    Davon habe ich aktuell nur einige wenige, die CUM_* finde ich garnicht.

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

    Albert Einstein

  • Davon habe ich aktuell nur einige wenige, die CUM_* finde ich garnicht.

    Der Screenshot ist vom Mondeo Mk5, evtl. gibt's diese beim Mk4 nicht (habe beim Mk4 noch kein ForScan am Smartphone benutzt).

    Mondeo Turnier 2.0 FFV Titanium, Thunder, ACC, IVDC, Bi-Xenon, KeyFree+PowerStart, Alarmanlage, Solarreflect, PDC vorn u. hinten, TPMS, Sitzklima, Luftqualitätsmesser+kühlbares Handschuhfach, Sony-6CD, Bluetooth-FSE incl. S&C, Außenspiegel anklappbar, silberfarbene Dachreling, Notrad incl. Wagenheber

    Selbsteinbau: Rückfahr- u. Front-Kamera mit 9" TFT-Monitor in der Sonnenblende, Ambiente-Beleuchtung in den Türgriffmulden, Rückstrahler an allen 4 Türen beleuchtet

    Baumonat 10/2008

  • Habe heute nochmal nachgeschaut, Batteriesensor ist bei mir vorhanden (ohne Start/Stop). Wenn ich die damaligen Tests/Presseaussendungen richtig in Erinnerung habe, wurde der Sensor (zusammen mit dem "Grill-Shutter"-Kühlergrill) bei allen FL mit Euro 5 verbaut.

  • bei allen FL mit Euro 5 verbaut.

    Nö! Das hatte ich schon geschrieben - mein FL 2,0 Saug-Benziner von 09/2010 hatte Euro 5 und eben keinen Sensor am Akku.

    Gruß aus Erfurt

    Schon der dritte vierte Ford und der Fahrer wird nicht schlau draus!

  • Evtl. nur bei den Euro5 Diesel wurde ja schon spekuliert, aber egal. Also muss der Sensor auch eine Funktion ohne Start/Stopp haben, auch für normale (also nicht EPB) Batterien und evtl. haben beide Systeme auch nichts miteinander zu tun.

    Ich habe inzwischen mein LIN-Sniffer Projekt etwas vorangetrieben, nicht trivial, davon werde ich mal später berichten wenn alles läuft, aber bereits eine Erkenntnis gewonnen: Beim rumspielen mit dem LIN-Bus hatte ich mal eine Situation das beim Anschließen meines Sniffers an Betriebsspannung der Scheibenwischer immer einmal auslöste! Bis dato dachte ich der Batteriesensor wäre einzeln an einem eigenen LIN-Bus. Als mein Projekt soweit war das ich den LIN als Bytestrom sniffen konnte habe ich den Klassiker beim Rev-Eng gemacht, mir diesen nicht nur als HEX sondern auch als ASCII ausgeben zu lassen. Und was finde ich da?

    Code
    02 42 56 36 54 00 00 00  → ASCII: "BV6T"
    03 31 37 44 35 34 37 00  → ASCII: "17D547"
    04 41 44 00 00 00 00 00  → ASCII: "AD"
    => "BV6T-17D547-AD"

    Das ist Teilenummer des Regensensors (BV6T, weil ich den beim Frontscheibenwechsel mal ausgetauscht hatte). Das hat meine Neugierde geweckt und ich habe mir die Schaltpläne nochmal ganz genau angesehen und musste feststellen das es faktisch nur drei getrennte LIN-Busse im BCM gibt, LIN0, LIN1 und LIN2:

    Der hier im Plan angegebene "LIN8" des Batteriesensors, welcher seltsamerweise im Schaltplan nirgendwo an die "internal HW" führt:

    scheint in Wirklichkeit also auch einfach nur ein "LIN2" zu sein. Auch daran angeschlossen ist der Scheibenwischermotor:

    Schaut man bei den anderen LIN2 Membern wird dort auch lustig LIN2 und LIN8 durcheinander gewürfelt:

    Also wieder mal ein kleines Geheimnis aufgedeckt das in keiner Dokumentation steht :)

    LIN-Busse des Mondeo MK4

    1. LIN0
    2. LIN1
    3. LIN2 (aka "LIN8")

    Ich habe das im Wiki https://mk4-wiki.denkdose.de/artikel/lin-bus/start entsprechend ergänzt.

    Hier noch der LIN vom PCM zum Generator, der mit dem BCM freilich nichts zu tun hat:

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

    Albert Einstein

  • Nachdem das nun mal geklärt ist muss ich natürlich etwas anders an die Interpretation der Daten auf dem Bus herangehen. Es ist definitiv so, das erst nach einschalten der Zündung Daten auf dem LIN2/LIN8 laufen, vorher ist da Totenstille. Nach ausschalten der Zündung laufen noch eine kurze Zeitlang Daten, bis der "Battery-Safer" zuschlägt, wie üblich.

    Da ich keine LDF-Dateien habe (und Ford die sicher auch nicht rausrückt) muss man die einzelnen IDs selbst identifizieren. Bei LIN ist es so das nur der Master eine Kommunikation initiiert, die ganzen o.g. LIN-Slaves verhalten sich passiv und antworten nur wenn sie gefragt werden. Ein Slave kann durchaus mehrere IDs besitzen, aber eine ID kann nur einem Slave zugeordnet sein. Hat ein Slave mehrere IDs, dann dient das unterschiedlichen Funktionen, z.B. grundlegend der Schreibrichtung vom Master zum Slave oder umgekehrt und verschiedenen Nachrichtentypen/Längen. All das würde in einer LDF (LIN Definition File) stehen.

    Die ID entscheidet also WER angesprochen ist und WIE. Am Bytestream selbst kann man ohne LDF nicht wissen ob die Bytes nun vom Master zum Slave oder vom Slave zum Master übertragen wurden, man kann also Programmierung und auslesen nicht differenzieren. Elektrisch könnte man das durch einlegen eines Widerstandes zwischen LIN-Master-Ausgang und LIN-Bus-Anschluß realisieren. Dann gäbe es einen Pegelunterschied beim rezessiven Bit zwischen Master und Slaves und man wüsste wer die 0en sendet. So macht man das üblicherweise beim Rev-Eng von Eindraht-Bussen. Aber ich glaube ich komme auch ohne diesen Eingriff in die Bordelektrik aus durch bloße Analyse der Daten und wie sich diese verändern.

    Problem dabei könnte sein das LIN nicht wie CAN ständig Botschaften sendet, sondern nur dann wenn der LIN-Master (hier ist es unser BCM) etwas wissen oder programmieren will. Es kann also sein das bestimmte Botschaften nur sehr selten oder nur bei bestimmten Aktionen (z.B. Batteriesensor zurücksetzen) auf dem Bus liegen. Das macht das Rev-Eng etwas aufwändiger und zeitintensiver...

    Ein Kern-Problem bei der Entwicklung des Sniffers ist, die Länge der Nutzdatenbyte aus einer Nachricht zu identifizieren, bzw. Nachrichten auf die kein Slave antwortet. Da tüftele ich gerade noch, denn es gibt im LIN Protokoll kein Längenbyte wie beim CAN. Ich teste gerade mit unterschiedlichen, teils heuristischen Algorithmen, welche stabil laufen und welche nicht. Das klingt total trivial, ist es in der Praxis aber leider nicht.

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

    Albert Einstein

  • FL, Euro 5, Diesel, EZ 04/2013 (im FZG-Schein Nr. 6=07/12/2012, sofern relevant), ohne Start/Stop. Sensor muss ich auch mal nachschauen.

    Habe nachgeschaut, Sensor ist vorhanden.

    Erst 230 Tkm. Nachwuchs: Corsa F 1.5 Diesel (Leider kein passenden Fiesta Diesel gefunden)

  • Hast Du denn vielleicht im ForScan noch mehr als ich mal hier als Screenshot gepostet hab? Ich habe auch mit nachgerüstetem und per CCC aktiviertem Batteriesensor keine weiteren PIDs mit im BCMii bei ForScan als ich ohne hatte. Sowas wie von gobang gezeigt hätte ich erwartet, also SOC, SOH, usw.

    "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!