ehe ich mich da ernsthaft ransetze: Motorsteuergerät mit C167, ext. Flash, ext. RAM, ext. SPI-EEProm. Aufgabe: über K-Line Kommunikation das SPI-EEprom lesen und schreiben. Programmtechnisch also sehr überschaubar. Das Ding hat einen Bootlader on chip und einen bootpin. Meine Frage: ist es prinzipiell möglich, dem Dingen ein paar Bytes Programm in den RAM zu spielen und dann auch auszuführen, ohne den flash zu ändern? Zur Not würde aber auch gehen, den flash zu löschen, eigenes Programm rein, anschliessend wieder das Originale. Habe natürlich auch keine genauen Informationen über Speicheraufteilung :-(, das EEProm hängt jedenfalls an der Hardware-SPI. Ich will keine fertige Lösung, mir geht es erstmal darum, den AUfwand abzuschätzen. Und welcher Compiler kommt in Frage?
Als Comiler würde ich Keil sehr empfehlen. Davon gibt es eine kostenlose Version, die allerdings auf 2k Code beschränkt ist.
Der C167 hat ein paar Strapping-Pins mit denen du den Startup konfigurieren kannst. Schau mal nach, so wie ich mich erinnern kann kann man den External-Bus-Controller da ziemlich gut konfigurieren. Der Boot-Code sollte im Flash liegen, allerdings könnten die ja mal eine Variante mit internen Flash rausgebracht haben. ST ist daran gescheitert... Compiler: Keil oder Tasking. Beide haben ihre bugs.
Der BSL des C167 lädt das Programm immer in den internen XRAM. Was da geladen wird, bleibt dir überlassen. Tip: DesignGuide von Hitex: hitex_c166dg.pdf
das wäre ja prima:-), und würde bedeuten, dass ich den flash gar nicht anfassen muss.... Bleibt die Frage: wie startet dann das Programm im RAM?
Im 1.Schritt werden 32 Byte an eine feste Adresse geladen und angesprungen. Mit diesen 16 Instruktionen legst du das Folgende selbst fest (s. AP1644).
..na ja, XRAM ist nicht ganz korrekt und auch nicht ST sondern Siemens (jetzt Infineon) ist am internen Flash "gescheitert" in Zusammenhang mit C167CS seinerzeit. Aso, die Herren und Damen - bitte keine Gerüchte verbreiten sondern fachlich weiterhelfen, ok. ? deshalb kommen wir mal zum fachlichen Teil ;-). Gehe mal davon aus, Du möchtest den uC über ASC0 (UART) bootstrappen (hurra, ein neudeutsches Wort). Dazu muss der BSL-pin auf GND gezogen sein, wenn der uC aus'm reset kommt. Guckst Du in Datenblatt, welcher pin das beim C167 ist. Nun schickst du ein 0x00 byte mit einer verträglichen Baudrate (Quartz des uC !) zum uC und bekommst ein BSL-Acknowledge zurück. Variiert je nach uC und stepping (0xd5 oder ähnliches). Jetzt kannst Du ein GENAU 32-byte kleines Programm schicken, welches vom uC-BSL (der ist ROM-resident) an eine feste adresse im internen RAM geladen wird. sind alle 32 bytes geschickt, wird dieses progrämmchen dann automatisch vom ROM-BSL gestartet. Sinnvollerweise ist dieses dein programm ein kleiner loader, der über die ASC0 nun dein eigentliches, grösseres programm ins IRAM laden kann und das dann startet. Ist unzweckmässig, wenn dein grösseres Programm über deinen 32-byte kleinen loader geladen wird ;-). Also schön auf die Lokierung achten ! Als Compiler/Assembler würde ich Tasking nehmen. Ansonsten Appnotes, Manuals und googlen nach Beispielen... Für teuer Geld macht das ansonsten eine mir gut bekannte Firma für Dich ;-). Gruss, tom.
Gut, bedanke mich für die Infos. Sollte also alles im überschaubaren Rahmen machbar sein. Vielleicht mach ich das bisschen Zeug gleich in Assembler, schaun wir mal. Werde berichten, wie es ausgegangen ist :-)
Hallo, Das EEPROM auszulesen ohne das Gerät zu öffnen interessiert mich auch. Für die Variante, einen loader in den Prozessor zu laden, müsste aber ASC0 (UART) und der BSL-PIN von aussen zugänglich sein, oder? Wenn nicht ist es ja schliesslich kein Problem, das EEPROM direkt auszulesen. Zur Zeit löte ich es aus, lese es, kopiere es und löte es wieder ein. Das ganze bei geschlossenem Gerät zu machen, wäre super. @crazy horse Um welches Steuergerät geht es denn, hast Du schon geprüft, ob die Pins von aussen zugänglich sind? Vielleicht kann ich auch unterstützen.
Bosch Cartronic. BSL-Pin ist nicht rausgeführt, zumindest nicht direkt. Lesen hat schon mal geklappt, Schreiben noch nicht, muss erst mal noch rausfinden, wohin der WP-Eingang geht...
Ich dachte Cartronic wäre nur der Name der Architektur, heisst das Steuergerät so oder hat das noch eine Modellbezeichnung oder Bosch-Nr.?. Ich hab mal das Datenblatt gezogen und mal an einem Motorsteuergerät für den VW-Pumpe-Düse TDI (Bora) nachgeschaut. Das Steuergerät ist ein Bosch EDC15P+ Bei dem Steuergerät geht die beiden ASC0 (UART) in die K-Leitung über. Der BSL-PIN liegt ja laut Datenblatt wohl an PIN 104 und ist ein Wandler. Der geht auch an die Messerleiste nach draußen. Dann müsste das ganze so funktionieren, wie Thomas es vorgeschlagen hat. Wie hast Du es geschafft, das Eprom zu lesen? Hast es mit dem kleiner 32 Byte Loader gemacht? Wäre brennend daran interessiert.
WP vom EPROM geht bei dem Steuergerät, was ich hier liegen habe an den "RST IN" PIN vom C167
tja, Programm geladen, EEprom ausgelesen, über K-Line rausgeschmettert.
crazy horse wrote: > Bosch Cartronic. > BSL-Pin ist nicht rausgeführt, zumindest nicht direkt. > Lesen hat schon mal geklappt, Schreiben noch nicht, muss erst mal noch > rausfinden, wohin der WP-Eingang geht... Hallo, Entschuldigung, aber ich spreche nur kleine Deutsch. Ich habe bekommen Bootstrap-Modus zu arbeiten in einem Porsche Cartronic SG. Sprechen Sie English? I can show you what I did to make it work. http://www.wrljet.com/junk/ME7.8-bootmode.jpg http://www.wrljet.com/junk/ME7.8-solder-side2.jpg Tschuss, Bill
Ich hab jetzt noch ein anderes Steuergerät geschnappt. Es ist ein ME7.5 (Audi 1.8T) Dort ist leider der BSL-PIN nicht herausgeführt sondern er geht direkt auf den Flash-Baustein. Die Methode ist damit leider nicht geeignet um bei allen Steuergeräten das EEPROM auszulesen ohne das Gehäuse zu öffnen. Aber zur Zeit löte ich die EEPROMs immer aus, schreibe sie und löte sie wieder ein. Allerdings könnte man sich bei der Bootstrap-Methode wenigstens das Öffnen des Gehäuses sparen. Leider muss ich zugeben, dass ich es wohl alleine nicht hinbekommen würde, das EEPROM über K-BUS zu lesen und zu schreiben. @Crazy horse: Kann man Dein Programm bekommen. Was brauch ich zusätzlich? Einen K-Bus-Adapter für die serielle Schnittstelle? Ein Terminalprogramm?
K-Line-Converter brauchst du schon (OBD2-shop). Software PC-Seite habe ich ein eigenes geschrieben mit Oberfläche, noch nicht ganz fertig :-)
Können Sie mir bitte erklären, welche Befehle zu verwenden, um eeprom zu lesen? Mein ME7 hat ein AMD29F800BB und ein 5P08C3 Dieses ist die loader, die ich benutze. Es liest ein Programm der örtlich festgelegten Länge und beginnt es. (FA60-FA7F) 00FA40: E6 58 01 00 9A B7 FE 70 E6 F0 60 FA 7E B7 9A B7 00FA50: FE 70 A4 00 B2 FE 86 F0 7F FA 3D F8 EA 00 60 FA ********************************xxxxx****************** 00FA40: MOV S0TBUF,#0001h 00FA44: JNB S0RIR,FA44h 00FA48: MOV R0,#FA60h 00FA4C: BCLR S0RIR 00FA4E: JNB S0RIR,FA4Eh 00FA52: MOVB [R0],S0RBUF 00FA56: CMPI1 R0,#FA7Fh 00FA5A: JMPR cc_NZ,FA4Ch 00FA5C: JMPA cc_UC,FA60h *****************************
Wie lautet denn die BOSCH-Nummer von dem Gerät? Vom ME7 gibt locker 1000 verschiedene Varianten.
BOSCH-Nummer 0261206272 26SA5834, 09470738 B Sorry for not taking the time to translate into German. After two HD crashes and reinstalling windows I had trouble finding this thread again. In the reset handler of an ME7.0 file I find the following: ROM:0206 mov CP, #0FB40h ROM:020A mov BUSCON0, #4AEh ROM:020E mov SYSCON, #0E304h ROM:0212 mov ADDRSEL1, #3005h ROM:0216 mov BUSCON1, #40Eh ROM:021A mov ADDRSEL2, #0 ROM:021E mov BUSCON2, #0 ROM:0222 mov ADDRSEL3, #0 ROM:0226 mov BUSCON3, #0 ROM:022A mov ADDRSEL4, #0 ROM:022E mov BUSCON4, #0 ROM:0232 mov DPP0, #4 ROM:0236 ; assume dpp0: 4 (page 0x10000) ROM:0236 mov DPP1, #5 ROM:023A ; assume dpp1: 5 (page 0x14000) ROM:023A mov DPP2, #0C0h ; '+' ROM:023E ; assume dpp2: 0C0h (page 0x300000) ROM:023E mov DPP3, #3 ROM:0242 mov STKOV, #0F600h ROM:0246 mov SP, #0F700h ROM:024A mov STKUN, #0F700h ROM:024E mov PSW, #0 ROM:0252 extr #2 ROM:0254 movb DP0L, #0 ROM:0258 movb DP0H, #0 ROM:025C extr #2 ROM:025E movb DP1L, #0 ROM:0262 movb DP1H, #0 ROM:0266 extr #1 ROM:0268 movb ODP8, #8 ROM:026C movb P8, #0ECh ; '8' ROM:0270 movb DP8, #0F7h ; '˜' ROM:0274 movb rl1, #14h
Erst jetzt gelesen, falls noch benötigt: Das ist ein ST95P04 EEPROM, also SPI SSDI -> Processor Pin 75 (P3.8) SSDO Pin 76 (P3.9) SSCLK Pin 80 (P3.13) Chipselect an Pin 92 (P4.7)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.