Forum: Mikrocontroller und Digitale Elektronik Vorabinformationen C167.


von crazy horse (Gast)


Lesenswert?

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?

von bushobbyentwickler (Gast)


Lesenswert?

Als Comiler würde ich Keil sehr empfehlen. Davon gibt es eine kostenlose 
Version, die allerdings auf 2k Code beschränkt ist.

von crazy horse (Gast)


Lesenswert?

2k sollten für meine Aufgabe genügen...:-)

von ex-mentor-user (Gast)


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

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

von crazy horse (Gast)


Lesenswert?

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?

von Gast (Gast)


Lesenswert?

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).

von Tomas K. (Firma: tktronic) (tktronic)


Lesenswert?

..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.

von crazy horse (Gast)


Lesenswert?

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 :-)

von Stefan Entwickler (Gast)


Lesenswert?

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.

von crazy horse (Gast)


Lesenswert?

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...

von Stefan Entwickler (Gast)


Lesenswert?

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.

von Stefan Entwickler (Gast)


Lesenswert?

WP vom EPROM geht bei dem Steuergerät, was ich hier liegen habe an den 
"RST IN" PIN vom C167

von crazy horse (Gast)


Lesenswert?

Ach ja, hier auch :-)

von Stefan Entwickler (Gast)


Lesenswert?

Wie hast Du das jetzt mit dem Lesen gemacht?

von crazy horse (Gast)


Lesenswert?

tja, Programm geladen, EEprom ausgelesen, über K-Line rausgeschmettert.

von Bill L. (einspritzmotor)


Lesenswert?

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

von Stefan Entwickler (Gast)


Lesenswert?

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?

von Stefan Entwickler (Gast)


Lesenswert?

Kann mir jemand sagen, was ich brauche?

von crazy horse (Gast)


Lesenswert?

K-Line-Converter brauchst du schon (OBD2-shop).
Software PC-Seite habe ich ein eigenes geschrieben mit Oberfläche, noch 
nicht ganz fertig :-)

von rkam (Gast)


Lesenswert?

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
*****************************

von Martin Teves (Gast)


Lesenswert?

Wie lautet denn die BOSCH-Nummer von dem Gerät? Vom ME7 gibt locker 1000 
verschiedene Varianten.

von rkam (Gast)


Lesenswert?

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

von Martin Teves (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.