Beiträge von Go4IT

    Mein Serientempomat hat nur den tempomat (Taste unten links OFF) habe dann den tempomat mit tempobegrenzer eingebaut.

    Das kann nicht funktionieren. Das sind andere Komponenten und hat nichts mit vFL oder FL zu tun. Die Tasten sind bei beiden gleich, aber es gibt zahlreiche Varianten davon. Weiterhin hängen beide Tastenblöcke zusammen. https://mk4-wiki.denkdose.de/artikel/tempomat/start

    Du musst die richtige Funktionsvariante kaufen und verbauen, oder umbauen (wenn Du SMD löten kannst und Lust darauf hast).

    Der jüngste Reinfall bei Ebay hat mich etwas aufgeschreckt und ich werde künftig vorsichtiger sein müssen. Da ich relativ viel mit PayPal kaufe (manchmal auch verkaufe) bin ich auch hier etwas aufgerüttelt worden. Die Betrugsmaschen sind auch hier scheinbar unendlich und zwar nicht mit "Geld an Familie und Freunde" sondern vor allen mit Käufer/Verkäufer-Schutz. Am Ende tritt PayPal einfach Forderungen an ein Inkassounternehmen ab und mit welchen Maschen die arbeiten kennt man ja zu genüge...

    Aber auch mit einer klassischen Banküberweisung hat man mich schon übers Ohr gehauen. Geld überwiesen, weil ich dachte bei einer Bank mit Sitz in Deutschland sollte das relativ sicher sein, dann kam keine Ware und am Ende stellte sich raus das jemand mit gefälschten (geklauten) Papieren dort Konten eröffnet hatte, Geld abzockte, am Automaten abhob und für immer verschwunden war.

    Geht bald wirklich nur noch Geld gegen Ware vor Ort? Das schränkt natürlich auch die Verkaufs/Einkaufsmöglichkeiten erheblich ein. Und da das Bargeld ja so nach und nach abgeschafft wird, stellt sich auch die Frage wie lange das überhaupt noch möglich ist.

    Ich hoffe ich ziehe jetzt keine schwurbeligen Verschwörungstheoretiker an mit dem was und wie ich es schreibe. Ganz praktisch stell ich mir die Frage wie man es denn machen soll? Einfach immer einen gewissen "Verlust" mit einkalkulieren? Pech gehabt? Echt frustrierend.

    Da kann ich mich leider einreihen. Am Mondeo hatte ich dieses Jahr den ersten Hinweis

    Achse / Achsaufängung, Achskörper 1. Achse mitte oberflächlich korrodiert (HW)

    Grrr!

    Und Jofels Mondi kenne ich auch, der war quasi wie eine "Juwel-Kerze" komplett in Wachs ;)

    Bei meinem Fiesta habe ich für den TÜV vor zwei Jahren auch massiv entrostet, mechanisch, mit Umwandler und anschliessender Versiegelung. Inzwischen sieht es wieder so aus wie vor der Behandlung.

    Die alten Scheinwerfer habe ich durch neue ersetzt da ich der Meinung bin, das Xenon Scheinwerfer nach 10 Jahren einfach verbraucht sind.

    Das Licht ist mit den neuen wieder um einiges besser.

    Ähm, aber Dir ist schon klar das dieser Effekt nur bei den Linsen und Brennern auftritt? Das Gehäuse ist davon völlig unbetroffen, außer das "Glas" (ist ja auch Plastik) wäre schon so trüb das es eher Milchglas entspricht, was ich nicht annehme.

    Aber ok, Du wirst hoffentlich keine 1.000€ investiert haben nur für neue Gehäuse und die alten Linsen und Brenner da reingebaut? Dann wäre der verbesserte Eindruck nämlich nur ein Plazebo-Effekt. Da hättest Du das Geld lieber in vernünftige Linsen und Brenner investiert (RE: Projekt Umrüstung auf Retrofit Xenon). Frag mal jofel was das ausmacht :)

    Früher war da wirklich alles besser. Ich hatte Jahrelang nie Probleme, aber inzwischen ziehen die Gauner auch bei Kleinbeträgen ab. Mit Banküberweisung bin ich auch schon reingefallen da es dem Pack scheinbar problemlos möglich ist mit gefälschten Ausweispapieren bei Online-Banken Konten zu eröffnen, das Geld wird dann gleich nach Überweisung Bar irgendwo abgehoben, das siehst Du nie mehr wieder.

    Daher Abholung ist das einzig sichere, geht aber leider nicht immer... oder aber man braucht Reputation, Empfehlungen, Bürgen.

    Ich musste kürzlich auch schmerzlich erfahren das man als Verkäufer auch bei ebay nicht unbedingt auf der sicheren Seite ist :(

    Jemand hat eines meiner Navis gekauft und bei sich nicht ans laufen gebracht, trotz Angebote meinerseits zu helfen hat er sich rein auf die Aussage einer Ford-Werkstatt gestützt die behauptet hat mein Gerät hätte einen Defekt. Daraufhin hat er im Rahmen des Käuferschutzes eine Rückgabe erwirkt (wusste garnicht das das bei Privatverkäufen überhaupt möglich ist) der ich dann, gutmütig wie ich bin, zugestimmt habe. Das Gerät kam aber ziemlich rampuniert zurück (Taste kaputt, andere Verkratzt, Macken und Abstossungen, Display eingedrückt) was nicht am Transport lag (war meine Verpackung und gut verpackt, unbeschädigter Karton). Als ich ihn damit konfrontiert hatte und ich dafür eine Preisminderung einbehalten müsse meinte er frech, er habe mir das Gerät zurückgesandt wie er es erhalten habe, eine glatte Lüge und sogar klar mit Verkaufsfotos belegbar. Darüber hinaus forderte er den gesamten Kaufpreis zurück und drohte mit kurzer Frist andernfalls mit Anzeige und Anwalt. Ebay hat ihm das gleich zugesprochen und das Geld von meinem Konto zurückgebucht und ihm überwiesen. Mein parallel laufender Einspruch konnte daran nichts ändern, trotz Bilder. Ich kann jetzt maximal zivilrechtlich gegen ihn vorgehen, das steht noch auf einem anderen Blatt. Solchen Menschen kann man nur wünschen das ihnen mal dasselbe passiert und sie sich dann an ihre eigene Missetat erinnern und daraus vielleicht zu einem besseren Menschen werden. Nicht allen wird das gelingen, nicht alle werden das erfahren. So ist die Welt.

    Das zeigt aber auch klar: selbst wenn man keinem technischen Trick aufitzt ist man weder als Käufer noch als Verkäufer gegen Idioten, Gauner und Taugenichtse gefeit.

    Tach zusammen, wer kann denn sagen in welchen Baujahren das NX im Focus verbaut wurde? Die gleiche Plattform teilen ja auch Kuga und C-Max/B-Max, evtl. aber unterschiedliche Baujahre?

    Der Focus MK2 wurde von 2004-2011 gebaut, das NX gab es aber sicher erst ab 2007 vorher war es wohl eher noch ein EX (Denso) und ab Ende 2010 könnte dann noch das MCA gekommen sein, da ich meine das im MK3 schon ein Sync drin war?

    ABER - nichts genaues weis man nicht :)

    FX

    • Focus MK2 (ab Facelift 2009 auch FX-Plus)
    • C-Max ??
    • Kuga MK1
    • Transit MK6
    • Fusion (ab Mitte 2009)

    NX/NX-Plus

    • Focus MK2 (2007-2011)
    • C-Max ??
    • Kuga MK1
    • Galaxy MK2 vorFacelift (bis 9/2010)

    MCA/MCA-Plus

    Hier ist vor allem die Frage wann der Modellwechsel stattfand, ggf. auch Ende 2010 wie beim Mondeo?

    • Galaxy MK2 Facelift (10/2010-2014)
    • S-Max MK1 Facelift (10/2010-2014)
    • Focus MK2 (Facelift ab okt. 2010)

    Als nächstes gehe ich auf die Suche nach den Grundfunktionen die beim Empfang von Daten vom CAN-Bus aufgerufen werden. Diese sollten sich über die Interrupts leicht finden lassen. Aus der o.g. Analyse ist ja bekannt das beim Eingang an CAN2 ein entsprechender Interrupt ausgelöst wird. Laut Handbuch gibt es eine ganze Reihe von Triggern für einen Interrupt:

    • CAN wakeup interrupt

    • CAN reception complete interrupt

    • CAN transmission complete interrupt

    • CAN receive FIFO interrupt

    • CAN transmit FIFO interrupt

    • CAN error interrupt (Bus error, Error-warning, Error-passive, Bus-off entry, Bus-off recovery, Receive overrun, Overload frame transmission, Bus lock)

    Interessant wäre der "CAN reception complete interrupt" der ausgelöst wird, sobald ein gültiges CAN Frame gelesen und in eine Mailbox gepackt wurde:

    Es gibt zwei Arten von Interrupts, die direkten welche in einer fixen Tabelle untergebracht sind:

    Hier findet sich jedoch nichts bezüglich CAN.

    Es gibt noch eine "Relocatable Vector Table" welche durch Zuweisung einer Speicheradresse an INTB insegamt 256 Sprungvektoren aufnehmen kann (4 Byte x 256 = 1024 Byte). Im Code findet sich etwas das diese Basisadresse zuordnet:

    Code
    CODE:FFF40A15                 LDC     #0FFF4007Ch, INTB

    An der genannten Speicheradresse finden sich die Sprungadressen (LWORD). Im Handbuch sind diese in einer Tabelle aufgeschlüsselt:

    Die Adresse der ISR ist somit also an Offset-Position 0x19C zu finden, also 0xFFF4_007C + 0x19C = 0xFFF4_0218

    Code
    CODE:FFF40218 c2receiveInterrupt .LWORD #0FFF83AAA ; c2receiveInterruptHandler

    An dieser Adresse steht also der Code der nach Eingang einer CAN-Botschaft (egal welche Mailbox) die Datenbehandlung durchführt:

    Ab hier wird es etwas knifflig, da nun die Businesslogic mitspielt. Irgendwo in der Folge muss der Code jedoch überprüfen von welcher Mailbox der INTB ausgelöst wurde, also neue Daten angekommen sind. Laut Handbuch wird dazu das "NEWDATA" Bit im C2MCTL0 oder C2MCTL1 Register auf "1" gesetzt:

    Für jede Mailbox gibt es eine SFR-Adresse auf ein solche 1 Byte Register:

    Für die Mailbox 0 von CAN2 ist es 0x47720 und für Mailbox 1 0x47721.

    Der Code nutzt diese Adresse an folgenden Stellen:

    mb0:

    mb1:

    Interessant sind die Lesezugriffe, denn erstmal muss ja festgestellt werden ob etwas neues vorliegt. Hierfür kommen z.B. die BTST #0 Befehle in Frage, denn sie testen genau auf dieses Bit.

    In dieser Serie von Beiträgen rund um das BCM möchte ich mich etwas mehr in das innere der Software eingraben. Zum einen um diese besser zu verstehen, zum anderen aber auch um mir gewisse Dinge für Modifikationen dingbar zu machen.

    Die Arbeitsergebnisse

    Wie immer sammle ich im ersten Thread nach und nach die Erkenntnisse, bzw. Verweise darauf:

    Der Proband

    Ich verwende für alle Beiträge ein BCM eines 2.2er Diesel mit allen Funktionen (Vollausstattung) vom Typ BG9T-14A073-XK und der darauf befindlichen Firmware BG9T-14C094-AK.

    Einige Eckdaten

    Die Zentraleinheit (1) vom Typ R32C R5F64524KFD

    • Byteorder: Little-Endian
    • Internes RAM: 48 KB
    • Interner Flash-Speicher: 768 KB + 4 KB Data Flash + 4 KB EEPROM Emulation Flash

    Memory Map

    • SFR1 und SFR2 => Special Function Register, bilden über Speicheradressen Zugriff auf die Module des Mikrocontrollers
    • Data Flash => 0x0006_0000 - 0x0006_1FFF (ECC und Non-ECC Modus). Enthält nur die CCC im AsBuilt-Format.
    • E2 Data Flash => 0x0006_2000 - 0x0006_3FFF. EEPROM-Emulation.
    • Internal ROM => 0xFFF4_0000 - 0xFFFF_FFFF. Hier liegt die Firmware sowie die Reset-Vectoren.


    Verfügbare Datenblätter

    In diesem Bereich versuche ich mich zu den Funktionen rund um die HS-CAN Anbindung des BCM vorzuarbeiten. Die gesamte Programmierung des BCM geschieht ausschließlich über den HS-CAN. Der MS-CAN sowie MM-CAN dienen nur der Kommunikation mit den Modulen. Daher ist der HS-CAN für mich erstmal der interessantere.

    Welcher CAN-Controller bedient den HS-CAN?

    "Wie immer" starte ich mit der Hardware. Aus dem Basis-Untersuchen ist ja schon bekannt das ein R32C auf dem BCM arbeitet. Dieser hat laut Datenblatt 3 CAN-Module (Controller)

    Los geht es am Stecker. Der HS-CAN Bus liegt am "blauen" BCM-Stecker (Armaturenbrett-Kabelbaum) C3 and den Pins 6 und 7 an:

    Auf der Platine des BCM wurde ordentlich mit Harz gekleckert. Das macht die Identifizierung der Bauteilbezeichnungen mitunter sehr schwer, weil man diesen erstmal vorsichtig runterkratzen muss. Ein CAN-Bus benötigt immer einen Transceiver (Pegelwandler). Hiervon finden sich gleich mehrere auf der Platine. Der vom HS-CAN ist ein TJA1042 (siehe Position (15) auf BCM Firmware Reverse-Engineering). Hier enden direkt die beiden Pins von der Buchse.

    Auf der anderen Seite des TJA1042 geht es dann zu den Pins 1 und 2 vom R32C:

    Die Pins von Microcontrollern wie dem R32C sind häufig nicht auf eine Funktion festgelegt, sondern abhängig von der Programmierung des Chips. Das Datenblatt zeigt dies durch mehrere Bezeichnungen mit "/" getrennt.

    Ein physikalischer Pin am Gehäuse des Chips kann durch Programmierung mit verschiedenen Modulen innerhalb des Chips verbunden werden, wie hier an dem Schaubild zu erkennen:

    Somit kann z.B. der "Pin 1" folgende Funktionen haben:

    • "P9_6" => GPIO Port, ein digitaler IO-Port Nummer #6 in der Portgruppe #9
    • "ANEX1" => Analoger, externer Watchdog #1
    • "TXD4" => Sendeleitung des seriellen UART #4
    • "CAN2OUT" => Sendeleitung des CAN-Controllers #2
    • "CAN1OUT" => Sendeleitung des CAN-Controllers #1

    Die Tatsache das der TXD des TJA1042 mit dem Pin 1 des R32C verbunden ist und der TJA1042 keinen Chip-Enable hat, lässt darauf schließen das es hier nur um die beiden CAN-Controller gehen kann. Welcher Controller nun am Ende die Arbeit macht, werden wir erst in der Initialisierungsroutine erkennen können.

    Klar ist jedoch das es im Code Zugriffe auf die Konfiguration von Port P9_5 und P9_6 geben muss. Um diese zu finden und zuzuordnen muss man die Funktionsweise der CAN Controller etwas besser verstehen. Hilfe hierzu gibt das "R32C Users Manual" R32C-152 Users Manual.pdf im Abschnitt "CAN Controller", als auch die "R32C CAN Applicaiton Note" R32C CAN Application Note.pdf.

    Im Schaubild eines CAN-Controllers erkannt man die Funktionsblöcke:

    An (1) kommen die physikalischen Signale vom CAN-Transceiver zum Controller (Der Zusatz "/CANxWU" bedeutet das dieser Pin auch zum aufwecken der MCU aus einem Schlafmodus genutzt werden kann. Auf Deutsch: Kommt über den CAN-Bus eine Botschaft, kann diese das BCM aus dem Schlafmodus holen). Zur Takterzeugung wird an (8) der CPU-Takt (8 MHz) verwendet um die Baudrate des CAN-Bus (bei HS-CAN 500 MBit/s) einzustellen.

    Hat der Protocoll Controller (2) z.B. ein eingehendes Datenpaket erkannt, leitet er es an den Filter und Priorisierer (3) weiter, welcher es ggf. in eine Mailbox (4) verschiebt. Die mit (5) gekennzeichneten SFRs sind zur Programmierung der Komponenten gedacht und für uns die interessanten.

    Der Interrupt Generator (6) erzeugt je nach Betriebszustand verschiedene Ereignisse welche dann von der Software mittels Interrupt-Service-Routinen (ISRs) behandelt werden, so z.B. der Empfang einer Botschaft und die Verarbeitung der Daten darin.

    Die Programmierung des Controllers (2) entscheidet also welche CAN I/O pins genutzt werden. Das schaue ich mir genauer an. Irgenwo muss es einen Zusammenhang zwischen den Pins 5+6 von Gruppe 9 und einem CAN-Controller geben. Hierzu finde ich das "Port P9_i Function Select Register". Das "i" wird dann mit "5" oder "6" substituiert. Es gibt also für jeden einzelnen Port ein eigenes 8-Bit Register im SFR2:

    Die unteren 3 Bits geben die Konfiguration des Ports an, also bestimmen wohin dieser physikalische Pin intern verbunden wird. Die SFR2 Speicheradresse für Port P9_6 (CAN Ausgangsleitung) ist somit 0x400ed. Wird dort in die Bits 0-2 der Wert 0b101 geschrieben, ist er mit dem Controller CAN2 verbunden, beim Wert 0b110 mit dem von CAN1.

    Mittels einer Rückwärtssuche auf den Schreibzugriff auf diese Adresse finde ich im Code:

    Code
    CODE:FFFA1EEE                 MOV.B   #101b, p9_6s

    Auch für nicht-Assembler geschädigte gut zu erkennen das der Wert 0b00000101 auf die Adresse geschrieben wird. Der Disassembler hat hier bereits die Adresse 0x400ed durch den Namen "p9_6s" ersetzt, weil er den Registeraufbau der R32C kennt. Der Wert verrät und nun das der Pin P9_6 mit der Sendeleitung von Controller CAN2 verbunden ist.

    Somit ist klar das der HS-CAN vom Controller CAN2 bedient wird!

    Der gesamte Code um diese Stelle herum enthält die Programmierung des Controllers u.a. mit der Baudrate von 500 MBit/s, sowie der Einstellung zu Interrupts und Mailboxen. Jeder Kanal verfügt über bis zu 32 solcher "Mailboxen" in die eingehende oder zu Sendung ausgehende CAN-Botschaften zwischengespeichert werden. Damit sich die Software nicht mit jedem Datagramm auf dem Bus beschäftigen muss gibt es zusätzliche "Acceptance Filter" die nur solche Botschaften in die Mailboxen einleiten, welche auch zum Zuständigkeitsbereich des BCM gehören.

    Ich habe die Routine mit Kommentaren versehen. Wen das interessiert kann es ja mal durcharbeiten und mit dem Handbuch vergleichen:

    Aus dieser geht u.a. noch hervor das für den Empfang von CAN-Botschaften die Mailboxen MB0 und MB1 im "Normal Mode" (also kein FIFO) verwendet werden. Diese sind jeweils mit unterschiedlichen Acceptance-Filtern ausgestattet. Auch die Interrupts werden hier aktiviert. Dazu mehr im folgenden Beitrag.

    Die Filterungseinstellungen sind etwas komplex, ich versuche es so einfach wie möglich darzustellen.

    "Acceptance Filter" wirken auf die ID der CAN-Botschaft und erlauben es das nur ein bestimmter Bereich von IDs zugelassen wird. Dabei können für die insgesamt 32 Mailboxen pro CAN-Controller unterschiedliche Filter hinterlegt werden. Diese sind in Gruppen eingeteilt, ein Filter bedient dabei jeweils 4 aufeinanderfolgende Mailboxen. Für die MB0 und MB1 des CAN2, welche oben konfiguriert wurden, gilt dabei nur der Filter C2MKR0. Dieser Filter wird über die SFR2 Speicheradressen 0x47600..0x47603 eingestellt:

    Der dort hinterlegte 32-Bit Wert beschreibt mit 0 und 1 ob das jeweilige Bit mit der eingehenden CAN-ID verglichen wird oder nicht. Einfach ausgedrückt: wäre alles 0, dann würde der Filter jede CAN-ID akzeptieren und je mehr 1en man einbringt umso weniger IDs würden erkannt. EID/SID beschreibt die ID-Längen, wobei wir im Mondeo ausschließlich mit Standard-IDs (SID) arbeiten, die nur 11 Bit lang sind. Somit sind nur die Bits 18-28 ausschlaggebend.

    Interessanterweise finde ich bislang im gesamten Code keinen Zugriff auf diese Register. Das bedeutet das keine Acceptance Filter für HS-CAN eingestellt werden. Da der Reset-Value "undefined" ist, macht mir das etwas zu denken, aber mal schaun.

    Gefunden habe ich jedenfalls das die hscan_init Routine folgendes einstellt:

    • mb0 => Empfängt CAN-Botschaften mit der ID 0x7DF (UDS Broadcast Adresse)
    • mb1 => Empfängt CAN-Botschaften mit der ID 0x726 (BCM UDS Adresse für Anfragen)
    • mb2 => Sendet CAN-Botschaften mit der ID 0x72E (BCM UDS Adresse für Antworten)

    Danach Reifendruckkontrollsystem programmiert, Fehlerspeicher gelöscht, etwas gefahren und zack war der Fehler da.

    Genau, denn wie wir ja inzwischen herausgefunden haben wird die Anlernfunktion im BCM erst nach einer Weile Fahrt aktiviert und dann erst gibt es auch den entsprechenden DTC. Das ist also in dem Sinne völlig normal.

    War es nicht so das man neben dem Patch im Convers auch die Funktion im BCM aktivieren musste? Ich meine ja, denn sonst kann das alles ja nicht funktionieren. Das war doch genau der kleine Haken, das man eben immer die DTCs im BCM hat. Der Patch sorgt u.a. dafür das das IPC diese DTCs nicht erkennt und als Fehler darstellt.

    Was Du eingangs beschreibst klingt als hättest Du die Entriegelunsfunktion umprogrammiert

    Umprogrammieren der Entriegelungsfunktion

    Beachte: Wenn die Entriegelungstaste gedrückt wird, werden entweder alle Türen oder nur die Fahrertür und Heckklappe entriegelt. Das erneute Drücken der Entriegelungstaste entriegelt alle Türen.

    Ver- und Entriegelungstaste bei ausgeschalteter Zündung mindestens vier Sekunden lang gleichzeitig gedrückt halten. Die Blinkleuchten blinken zur Bestätigung der Änderung zweimal auf.

    Um zur ursprünglichen Verriegelungsfunktion zurückzukehren, den Vorgang wiederholen.

    Ich denke die allgemeine Ford-Prozedur zum anlernen eines zusätzlichen (!) Schlüssels an die ZV, bei Zündschlüssel-Systemen ist auch beim Mondeo gültig?

    Sie liest sich so als bräuchte man nur einen aktiven Schlüssel und könnte damit weitere (bis zu 7) anlernen.

    Programmieren einer neuen Fernbedienung.

    1. Zur Programmierung der neuen Fernbedienungen den Zündschlüssel viermal innerhalb von sechs Sekunden in Stellung II drehen.
    1. Zündschlüssel in Stellung 0 drehen. Es ertönt ein Signal, um anzuzeigen, dass die Fernbedienungen nun zehn Sekunden lang programmiert werden können.
    1. Eine der Tasten einer neuen Fernbedienung drücken. Es ertönt ein Bestätigungssignal.
    1. Diesen Schritt für alle Fernbedienungen einschließlich der Original-Fernbedienung wiederholen. Schlüssel nicht aus dem Zündschloss ziehen, während die Taste auf dieser Fernbedienung gedrückt wird.
    1. Zündung wieder einschalten (Stellung II) oder zehn Sekunden warten, ohne dass eine weiter Fernbedienung programmiert wird, um die Schlüsselprogrammierung zu beenden. Das Fahrzeug lässt sich nun nur mit den zuvor programmierten Fernbedienungen ver- und entriegeln.

    Umprogrammieren der Entriegelungsfunktion
    Beachte: Wenn die Entriegelungstaste gedrückt wird, werden entweder alle Türen oder nur die Fahrertür und Heckklappe entriegelt. Das erneute Drücken der Entriegelungstaste entriegelt alle Türen.
    Ver- und Entriegelungstaste bei ausgeschalteter Zündung mindestens vier Sekunden lang gleichzeitig gedrückt halten. Die Blinkleuchten blinken zur Bestätigung der Änderung zweimal auf.
    Um zur ursprünglichen Verriegelungsfunktion zurückzukehren, den Vorgang wiederholen.