BCM clonen
Ziel
Um die BCM-Hardware gegen eine andere auszutauschen muss man vor allem den Inhalt des BCM kopieren (aka „clonen“). Damit ist neben der allseits bekannten Fahrzeugkonfiguration (CCC) vor allem der sonst nicht zugreifbare Bereich mit den Schlüsselcodes gemeint, der E2-Flash.
Diese Anleitung erfordert einiges an Elektronik Know-How und Werkzeug, sie ist nicht für Jedermann umsetzbar. Mit einem Fehler hat man sein BCM zu einem „Ziegelstein“ gemacht, also Vorsicht!
Benötigte Teile und Hilfsmittel
- Windows-PC/Laptop
- Renesas Programmiersoftware „Flash-Development-Toolkit“ (FDT)
- USB/UART-Adapter
- Elektronik/Feinlötkolben
- Ein paar Dupont-Wires und ein Steckbrett, sowie einen Taster und einen Schalter
- Labornetzteil mit 12V (mind. 2A)
Vorbereitungen
Programmier-Software „Flash Development Tool“ (kurz „FDT“) in der Version 4.09 herunterladen und installieren.
- Direkt vom Hersteller (Renesas) (Login erforderlich): https://www.renesas.com/us/en/document/swe/evaluation-software-flash-development-toolkit-v409-release-03
- Direkter Download des ZIP-Archives fdtv409r03-doc-e.zip
HINWEIS: Ich habe Stunden damit verbracht herauszufinden warum mein Aufbau beim schreiben des BCM immer abbrach. Durch Zufall fand ich heraus das mein Windows-Laptop (HP 850 G4 i7) den ich anfangs dazu verwendet hatte schlichtweg zu schnell war! Ich hatte es dann mit einem älteren Windows-Laptop versucht und mit dem hat es auf Anhieb geklappt. Solltest Du also diesbezüglich Probleme haben, versuche es mit einem älteren Gerät!
Umsetzung
Verwendete Begriffe:
- „Quell-BCM“ ⇒ Bezeichnet das BCM welches ersetzt/gecloned werden soll
- „Ziel-BCM“ ⇒ Bezeichnet das BCM auf das die Kopie angewandt werden soll
Schritt 1) Ausbau des Quell-BCM
Zunächst wie hier beschrieben das BCM ausbauen. Anschließend das Gehäuse öffnen und die Platine entnehmen.
Schritt 2) Programmier-Pins vorbereiten
Auf der Rückseite der Platine befinden sich folgende Anschlusspunkte für die Programmierung:
An die markierten Stellen Leitungen oder Kontaktstifte anlöten. Hierzu vorher den recht dicken Schutzlack mit einem geeigneten Werkzeug vorsichtig abkratzen. Auf ihm hält kein Lot und er schmilzt auch nicht ohne weiteres beim löten.
Schritt 3) Programmier-Adapter anschließen
Die Schnittstelle des R32C ist ein einfacher UART. Man kann also praktisch jedes handelsübliche USB-zu-Serial Kabel für diese Zwecke verwenden. Hier ein paar Alternativen:
Variante USB-Kabel mit Dupont-Buchsen, ideal für den Steckbrett-Aufbau:
Auch diese „Bare-Bone“ Variante eignet sich gut für den Steckbrett-Aufbau:
Ein solches USB-Dongle ist ebenfalls recht günstig zu bekommen:
Folgende Verbindungen müssen hergestellt werden:
BCM-Pin | Anschluss/Funktion |
---|---|
VCC (23) | +5V Versorgungsspannung vom USB/UART-Adapter |
CNVSS (16) | CNVSS, wird dieser Pin mit +5V verbunden, geht das BCM nach einem Reset in den Programmiermodus (UART-Mode 2) |
P5_0 (65) | /CE (Chip-Enable), mit +5V verbinden |
P6_4(43) | BUSY-Signal, wird nicht verwendet |
VSS (21) | Masse für +5V/+12V Versorgungsspannung sowie UART-Adapter |
P6_5 (42) | SCLK, mit GND verbinden |
P5_5 (54) | /EPM, mit GND verbinden |
/RESET (19) | RESET-Signal, über Taster mit GND verbinden |
RXD1 (40) | Serielle Daten-Empfangsleitung vom BCM, mit TXD vom Adapter verbinden |
TXD1 (38) | Serielle Daten-Sendeleitung vom BCM, mit RXD vom Adapter verbinden |
TLE7263E (17) | +12V Versorgungsspannung vom Labornetzteil |
Schritt 4) Programmierumgebung vorbereiten
FDT starten und neuen Workspace anlegen:
MCU-Typ auswählen (hierzu am besten die Langbezeichnung „R5F64524“ eintippen dann erscheint direkt der Richtige). Den ersten Eintrag (ohne _ECC) anwählen und bestätigen:
Danach wählt man den Adapter-Typ. Bei eingestecktem FDTI-Adapter/Kabel wird dieser direkt vorausgewählt. Ggf. muss man den richtigen COM-Port aber einstellen:
Dann noch die „Protection“ auf „None“ stellen:
und das Projekt ist angelegt:
Nun das „Zauberstab“ Icon (1) in der Menüleiste anklicken um die Zusatzfunktionen zu aktivieren:
Und unten im Reiter „Communications“ (2) per Doppelklick auf „Auto Send ID“ (3) den Passwort-Dialog öffnen und alle Bytes auf „FF“ einstellen:
Schritt 5) Quell-BCM auslesen
- BCM mit Betriebsspannung versorgen (+12V)
- Über den Schalter den „UART-Mode 2“ wählen (CNVSS auf +5V)
- Einmal kurz RESET auf LOW ziehen um den Bootloader zu starten
- Im FDT den „Connect“ Button drücken:
- Wenn alles klappt sieht man im Meldungsfenster rechts unten die Verbindung und es erscheint noch ein Dialog ob er den Chip komplett entsperren soll. Den belassen wir erstmal auf „Nein“ weil wir ja zunächst nur auslesen wollen:
- Auf den „Upload“ Button klicken ( hierbei ist mit „Upload“ die Übertragung vom Chip auf den PC gemeint) und der Lesevorgang wird gestartet:
- Es erscheint ein Dialog zur Auswahl des Flash-Bereiches. Da wählen wir aber den Reiter „Tree“ und „Select All“:
- Anschließend „Upload“ klicken und den Lesefortschritt im Fenster beobachten:
- Nachdem der Download beendet wurde kann man die einzelnen Teile als Datei abspeichern. Hier wählen wir das „MOT“ Format, damit neben den Daten auch gleich deren Speicherbereichsadressen mit abgelegt werden, was einen späteren Flash im anderen BCM erleichtert:
<FOTO> - +12V Versorgungsspannung abschalten und Adapter abziehen
Am Ende haben wir nun das komplette Flash vom BCM auf der Festplatte.
Schritt 6) Ziel-BCM beschreiben
- ggf. FDT starten und den Workspace mit den drei Flash-Speicherbereichen einladen
- Programmieradapter und Versorgungsspannung and Ziel-BCM anschließen
- Dieses über den Schalter in den „UART-Mode 2“ bringen (CNVSS auf +5V)
- Einmal kurz RESET auf LOW ziehen um den Bootloader zu starten
- Im FDT den „Connect“ Button drücken:
…TODO…
Hier das Protokoll eines erfolgreich programmierten BCMs (R32C Flash):
Flash Development Toolkit and flash programming components are provided without support OS: Windows 10 (Windows 8) [Non-Admin] FDT API initialised: version 4, 09, 02, 000 FCF Settings Applied: R5F64524, (C:\Program Files (x86)\Renesas\FDT4.09\kernels\ProtD\R5F64524\Renesas\1_0_00\) This kernel will set the E2 Data Flash as ECC OFF Clock Frequency (External) = N/A, Clock Mode = N/A, CKM = N/A, and CKP = N/A Connecting to device 'R5F64524' on 'COM10' Configuration: 'BOOT Mode' connection - using emulated interface Opening port 'COM10' ... Loading Comms DLL Loaded Comms DLL Initiating BOOT SCI sequence Attempting 9600 Changing baud rate to 57600 bps ID code check successful E2 Data Flash initialised: ECC Off Connection complete All blocks marked as unknown written status Erasing 1 block from device Erasing... 'E2Data0'... Erased block E2Data0 (0x00062000 - 0x00063FFF) Erase complete Reading 8 K from device (0x00062000 - 0x00063FFF) Successfully read 8192 Bytes from device 8 K read from device in 137 seconds [Raw Checksum: 0x001FE000] ID Code = 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF Opening file C:\Users\CarGo\Downloads\bcm-clone\oldBCM.DDI File loaded: 0xFFF40000 -> 0xFFFFFFFF [User Flash] File loaded: 0x00060000 -> 0x00061FFF [Data Flash] File loaded: 0x00062000 -> 0x00063FFF [E2 Data Flash] ID Code = 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF Processing file :"C:\Users\CarGo\Downloads\bcm-clone\oldBCM.DDI" Operation on User Flash Writing image to device... [0xFFF40000 - 0xFFFB94FF] Writing image to device... [0xFFFB9800 - 0xFFFBE3FF] Writing image to device... [0xFFFDFF00 - 0xFFFE01FF] Writing image to device... [0xFFFE0200 - 0xFFFE02FF] Writing image to device... [0xFFFE0300 - 0xFFFE20FF] Writing image to device... [0xFFFE2100 - 0xFFFE21FF] Writing image to device... [0xFFFE2400 - 0xFFFEEFFF] Writing image to device... [0xFFFF8000 - 0xFFFFA6FF] Writing image to device... [0xFFFFF800 - 0xFFFFFCFF] Writing image to device... [0xFFFFFF00 - 0xFFFFFFFF] Data programmed at the following positions: 0xFFF40000 - 0xFFFB94FF Length : 0x00079500 0xFFFB9800 - 0xFFFBE3FF Length : 0x00004C00 0xFFFDFF00 - 0xFFFE01FF Length : 0x00000300 0xFFFE0200 - 0xFFFE02FF Length : 0x00000100 0xFFFE0300 - 0xFFFE20FF Length : 0x00001E00 0xFFFE2100 - 0xFFFE21FF Length : 0x00000100 0xFFFE2400 - 0xFFFEEFFF Length : 0x0000CC00 0xFFFF8000 - 0xFFFFA6FF Length : 0x00002700 0xFFFFF800 - 0xFFFFFCFF Length : 0x00000500 0xFFFFFF00 - 0xFFFFFFFF Length : 0x00000100 575.25 K programmed in 111 seconds Device CRC = 0xD933, File CRC = 0xD933 (range 0xFFF40000-0xFFFFFFFF) -> CRC Check OK Operation on Data Flash Writing image to device... [0x00060000 - 0x000600FF] Writing image to device... [0x00061000 - 0x000611FF] Data programmed at the following positions: 0x00060000 - 0x000600FF Length : 0x00000100 0x00061000 - 0x000611FF Length : 0x00000200 768 Bytes programmed in 1 seconds Device CRC = 0x2819, File CRC = 0x2819 (range 0x00060000-0x00061FFF) -> CRC Check OK Operation on E2 Data Flash Writing image to device... [0x00062000 - 0x0006206F] Writing image to device... [0x0006207A - 0x0006208F] Writing image to device... [0x0006209A - 0x000620AF] Writing image to device... [0x000620BA - 0x000620CF] Writing image to device... [0x000620DA - 0x0006211F] Writing image to device... [0x00062128 - 0x0006213F] Writing image to device... [0x00062148 - 0x0006219F] Writing image to device... [0x000621A8 - 0x000621BF] Writing image to device... [0x000621C8 - 0x000621EF] Writing image to device... [0x000621FA - 0x0006220F] Writing image to device... [0x0006221A - 0x0006222F] Writing image to device... [0x0006223A - 0x0006224F] Writing image to device... [0x0006225A - 0x0006225F] Writing image to device... [0x0006227C - 0x0006227F] Writing image to device... [0x0006229C - 0x000622AF] Writing image to device... [0x000622BA - 0x000622CF] Writing image to device... [0x000622DA - 0x000622EF] Writing image to device... [0x000622FA - 0x0006230F] Writing image to device... [0x0006231A - 0x0006235F] Writing image to device... [0x0006237C - 0x0006237F] Writing image to device... [0x0006239C - 0x000623AF] Writing image to device... [0x000623BA - 0x000623CF] Writing image to device... [0x000623DA - 0x000623EF] Writing image to device... [0x000623FA - 0x0006240F] Writing image to device... [0x0006241A - 0x0006241F] Writing image to device... [0x0006243C - 0x0006243F] Writing image to device... [0x0006245C - 0x0006246F] Writing image to device... [0x0006247A - 0x0006248F] Writing image to device... [0x0006249A - 0x0006255F] Writing image to device... [0x0006257C - 0x0006257F] Writing image to device... [0x0006259C - 0x0006369F] Writing image to device... [0x000636BE - 0x000636BF] Writing image to device... [0x000636DE - 0x00063B5F] Data programmed at the following positions: 0x00062000 - 0x0006206F Length : 0x00000070 0x0006207A - 0x0006208F Length : 0x00000016 0x0006209A - 0x000620AF Length : 0x00000016 0x000620BA - 0x000620CF Length : 0x00000016 0x000620DA - 0x0006211F Length : 0x00000046 0x00062128 - 0x0006213F Length : 0x00000018 0x00062148 - 0x0006219F Length : 0x00000058 0x000621A8 - 0x000621BF Length : 0x00000018 0x000621C8 - 0x000621EF Length : 0x00000028 0x000621FA - 0x0006220F Length : 0x00000016 0x0006221A - 0x0006222F Length : 0x00000016 0x0006223A - 0x0006224F Length : 0x00000016 0x0006225A - 0x0006225F Length : 0x00000006 0x0006227C - 0x0006227F Length : 0x00000004 0x0006229C - 0x000622AF Length : 0x00000014 0x000622BA - 0x000622CF Length : 0x00000016 0x000622DA - 0x000622EF Length : 0x00000016 0x000622FA - 0x0006230F Length : 0x00000016 0x0006231A - 0x0006235F Length : 0x00000046 0x0006237C - 0x0006237F Length : 0x00000004 0x0006239C - 0x000623AF Length : 0x00000014 0x000623BA - 0x000623CF Length : 0x00000016 0x000623DA - 0x000623EF Length : 0x00000016 0x000623FA - 0x0006240F Length : 0x00000016 0x0006241A - 0x0006241F Length : 0x00000006 0x0006243C - 0x0006243F Length : 0x00000004 0x0006245C - 0x0006246F Length : 0x00000014 0x0006247A - 0x0006248F Length : 0x00000016 0x0006249A - 0x0006255F Length : 0x000000C6 0x0006257C - 0x0006257F Length : 0x00000004 0x0006259C - 0x0006369F Length : 0x00001104 0x000636BE - 0x000636BF Length : 0x00000002 0x000636DE - 0x00063B5F Length : 0x00000482 6.36 K programmed in 53 seconds Image written to device