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?
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
..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.
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.jpghttp://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ö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
*****************************
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)