Forum: Mikrocontroller und Digitale Elektronik Infineon XC164 Flash über Bootstrab Loader


von Markus H. (Firma: IMKO GmbH) (mhubig)


Lesenswert?

Hallo zusammen,

dieses Forum scheint ja eine super Quelle für alles zu sein was mit
Mikrocontroller zu tun hat! Hoffe ihr könnt mir auch bei meinem Problem
helfen...

Ich studiere an der BA und mein Projekt für die aktuelle Praxisphase
ist es, die Software für ein neues Inbetriebnahmetool für eines unserer 
Produkte zu entwickeln.

Ein Teilschritt der Inbetriebnahme ist das Aufspielen der Firmware auf
den benutzten Infineon XC164 µC. Da die Inbetriebnahmesoftware später
unter Linux laufen soll können die üblichen Flash-Tools wie Memtool & 
Co.
nicht ohne weiteres genutzt werden.

Deswegen bin ich gerade dabei die Funktion von Memtool 3 in Python zu
implementieren. Mir ist inzwischen auch schon ziemlich klar wie der
Flashprozess so im Groben abläuft, allerdings währe eine etwas
detailliertere Dokumentation sehr hilfreich.

Was ich bisher habe, ist ein Mitschnitt der seriellen Kommunikation von
Memtool mit dem µC und zwei Paper von Infineon (AP16115, XC166 Insiders
Guide). Weiß jemand woher man noch Dokumentation über den BSL und vor
allem das "SIEMENS On-Chip Memory Programming Tool, Version 3.0" finden
kann?

Gruß, Markus

von TManiac (Gast)


Lesenswert?

Hallo Markus,

Eigentlich hast du schon alle Informationen die du benötigst (sogar 
schon zuviel).

Der BSL in allen Mitgliedern der C166er Familie ist im Grunde genommen 
gleich.
Wenn der Boot Pin beim Power On Reset auf Low gezogen ist.
Dann Controller wartet nun auf den Empfang eines Null-Bytes als Abfrage 
des Identifikations-Bytes, welches er direkt darauf versendet.
Nun kannst du 32Byte nacheinander in den Controller schieben. Nach dem 
Empfang des 32. Byte springt der Controller zum ersten Byte und fängt 
dort an die 32 Bytes auszuführen.
Also macht es Sinn, dass diese 32Byte als Empfangsroutine für ein 
größeres Programm dienen. Und ab hier kannst du frei gestallten, wie es 
weitergeht.

Wie die Befehle zum Schreiben des Flashs aussehen findest du im User 
Manual.

Was anderes macht auch das MemTool nicht. nur das hier das 
32Byte-Programm und der Second-Level-Loader (im Grunde ein ähnliches 
Programm wie das 32Byte nur das hier die Flashroutine noch implementiert 
ist) sich irgend wo im MemTool verstecken.

Wenn es dein erster Bootloader ist, fang klein an. Schreibe erst ein 
32Byte großes Programm welches eine LED blinken, bzw einen verfügbaren 
Pin Togglen lässt. Dann Schreib ein 32Byte großes Programm, welches dir 
dein zuvor getestetes Programm empfängt und ausführt. Bis hier her 
sollte der Code komplett im RAM ausgeführt werden.
Danach kann man sich ans Flash schreiben machen.

Achso, das 32Byte Programm muss exakt 32Byte groß sein. Nicht kleiner 
und nicht größer. Zur Not muss es mit nops gefüllt werden.
Wenn du noch etwas lesen möchtest schau in AppNotes zu den älteren 
Controllern, das Prinzip ist das gleiche. (zB: AP164401)

Gruß,
TManiac

von Markus H. (Firma: IMKO GmbH) (mhubig)


Lesenswert?

Hi TManiac,

erstmal danke für deine Antwort, aber ich möchte eigentlich keinen
eigenen BSL schreiben, sondern den benutzen der bei Memtool 3 dabei
ist. Aber dazu bräuchte ich Dokumentation wie ich mit diesem
Second-Level-Loader kommunizieren kann...

Soweit ich erkennen kann ist der Second-Level-Loader eben das
"(SIEMENS|INFINEON) On-Chip Memory Programming Tool, Version 3.0".

Also meinen Recherchen nach läuft die Kommunikation (oder zumindest
der Teil bis der Second-Level-Loader und der Treiber für den XC164
hochgeladen sind) zwischen dem XC164 (uC) und Memtool (MT) so ab:
1
MT (   1 byte): 00
2
uC (   1 byte): D5
3
4
MT (  32 byte): E6 F0 00 ... ( 32 byte  First-Level-Loader)
5
MT ( 456 byte): A5 5A A5 ... (456 byte Second-Level-Loader)
6
uC (   1 byte): AA (Ack!)
7
8
# Was ab hier passiert ist mir nicht so klar!
9
10
MT (   1 byte): 82
11
uC (   1 byte): AA (Ack!)
12
13
MT (   3 byte): AA FF 00
14
MT (   2 byte): 80 00
15
uC (   1 byte): EA
16
17
MT (   1 byte): 93
18
uC (   2 byte): AA EA
19
20
MT (   1 byte): 84
21
uC (   1 byte): AA
22
23
# Hier wird der Treiber für das ansteuern des XC164 geladen.
24
25
MT (   3 byte): 00 00 E0
26
MT (   2 byte): 78 02
27
MT ( 632 byte): 48 80 3D ... (632 byte Driver for SAB XC164CM-8F Program FLASH)
28
uC (   2 byte): C0 13
29
uC (   1 byte): EA
30
31
# Ab hier hab ich wieder keine Ahnung was die gesendeten Befehle bedeuten
32
33
MT (   1 byte): 9F
34
uC (   1 byte): AA
35
36
MT (   1 byte): 00 00 E0
37
# Das ist wohl eine Adresse ?? 
38
MT (  16 byte): 00 00 C0 00 00 00 00 00 00 00 00 00 00 00 00 00
39
uC (   1 byte): EA
40
41
# Das ist wohl auch eine Adresse ??
42
uC (  16 byte): 00 08 00 00 00 C0 00 80 36 00 00 00 01 00 00 00
43
uC (   1 byte): EA

Ich denke das jetzt (evtl. auch etwas früher) der Second-Level-Loader 
gestartet wird. Danach kommuniziert Memtool mit dem Second-Level-Loader
und schickt die eigentliche Firmware in 2048 Byte großen Blöcken. Aber
auch in diesem Part werden unter anderem Befehle an den
Second-Level-Loader geschickt die nirgends Dokumentiert sind.

Vielleicht kennt jemand auch einen anderen Second-Level-Loader der
besser Dokumentiert ist und den ich anstatt des "SIEMENS On-Chip
Memory Programming Tools" verwenden kann.

Gruß, Markus

von TManiac (Gast)


Lesenswert?

Da muss ich jetzt aber gegenfragen, woher bekommst du nun den 
"second-level-loader" und auch den "first-level"? Rein aus deiner 
Aufzeichnung?

Ich denke das ist keine allzu gute Idee. Man sollte ein Stück-Programm 
nicht nutzen ohne das Interface zu kenne. Immerhin kann der XC einen 
Teil seines Flash sperren. Und diese Funktion wird auch vom MemTool 
unterstützt. Ergo kann der SLL auch diese Aktionen ausführen, 
hoffentlich nicht ungewollt.

Ich habe das MemTool zwar auch schon genutz, ist aber ein bisschen her. 
In letzter Zeit schreibe ich in den Flash per Debugger. Ich hatte zwar 
damals auch mit dem schreiben eines BSL begonnen, und festgestellt, dass 
es schwerer klingt als es ist. Daher denke ich, dass die Entwicklung 
eines eigenen BSL-Tools schneller als das Auflösen des MemTools geht.

Du schreibst, dass das  "SIEMENS On-Chip Memory Programming Tool" 
schlecht dokumentiert sei. Wenn du damit das MemTool meinst, so sehe ich 
das anders. Der Code der zwei Stufen des BSL ist freilich nicht 
dokumentiert, weil man den ja auch nicht separat nutzen kann.

Das was in dem Application Note AP16115 steht hat nicht direkt etwas mit 
dem MemTool und dessen Funktion zu tun. Es zeigt eine andere Möglichkeit 
zur Programmierung in Serie auf. Aber zur ApNote wird der SourceCode 
mitgeliefert. Ich habe zwar noch nicht reingeschaut, würde aber sagen da 
findest du vielleicht was du suchst.

Gruß,
TManiac

von Markus H. (Firma: IMKO GmbH) (mhubig)


Lesenswert?

Hi TManiac,

TManiac schrieb:
> Da muss ich jetzt aber gegenfragen, woher bekommst du nun den
> "second-level-loader" und auch den "first-level"? Rein aus deiner
> Aufzeichnung?

Nein First- & Second-Level-Loader wie auch der Driver liegen dem MemTool
als IntelHex-Dateien bei. Der Driver sogar für einige uC als Sourcecode,
leider nicht für den XC164CM-8F ... und da Memtool Freeware ist denke
ich dass ich diese Dateien auch in meinem eigenen Programm nutzen kann.

> Ich habe das MemTool zwar auch schon genutz, ist aber ein bisschen her.
> In letzter Zeit schreibe ich in den Flash per Debugger. Ich hatte zwar
> damals auch mit dem schreiben eines BSL begonnen, und festgestellt, dass
> es schwerer klingt als es ist. Daher denke ich, dass die Entwicklung
> eines eigenen BSL-Tools schneller als das Auflösen des MemTools geht.

Hmm naja, dass kommt wohl auf die Voraussetzungen an. Ich hab bisher
noch nie ein Programm für einen uC geschrieben... und eigentlich wollte
ich mit sowas wie dem Atmel ATmega128 auf 'nem Arduino Bord anfangen :-)

> Du schreibst, dass das  "SIEMENS On-Chip Memory Programming Tool"
> schlecht dokumentiert sei. Wenn du damit das MemTool meinst, so sehe ich
> das anders.

Ne ich meine damit den Second-Level-Loader.

> Das was in dem Application Note AP16115 steht hat nicht direkt etwas mit
> dem MemTool und dessen Funktion zu tun. Es zeigt eine andere Möglichkeit
> zur Programmierung in Serie auf.

Soweit war mir das auch klar.

> Aber zur ApNote wird der SourceCode mitgeliefert. Ich habe zwar noch
> nicht reingeschaut, würde aber sagen da findest du vielleicht was du
> suchst.

Leider nein ... als Quellcode liegt da nur das Programm bei welches den
internen Flashprozess durchführt, nicht der Second-Level-Loader.

Ich denke ich werde jetzt erstmal Memtool zum Flashen nutzen und über
die MS-COM Schnittstelle in mein Programm einbinde. Heist ich muss
leider erst mal auf Linux verzichten. Evtl. werde ich später dann doch
mal versuchen einen eigenen BSL zu schreiben.

- Markus

von TManiac (Gast)


Lesenswert?

Markus Hubig schrieb:
> Nein First- & Second-Level-Loader wie auch der Driver liegen dem MemTool
> als IntelHex-Dateien bei. Der Driver sogar für einige uC als Sourcecode,
> leider nicht für den XC164CM-8F ... und da Memtool Freeware ist denke
> ich dass ich diese Dateien auch in meinem eigenen Programm nutzen kann.

Aha. Ich hatte mir extra das MemTool noch mal heruntergeladen um 
nachzuschauen. Auf der Infineon Seite hatte ich zwar auf die Schnelle 
nur die Version 4.2 gefunden und da ist kein SourceCode dabei. Hast du 
den Link noch zu der Version die du hast?

Markus Hubig schrieb:
> Hmm naja, dass kommt wohl auf die Voraussetzungen an. Ich hab bisher
> noch nie ein Programm für einen uC geschrieben... und eigentlich wollte
> ich mit sowas wie dem Atmel ATmega128 auf 'nem Arduino Bord anfangen :-)

Warum einen ATmega? Wenn du Zugriff auf Tools für die 
Infineon-Controller hast, würde ich doch mit denen spielen, mit denen 
man dann auch arbeiten muss/möchte/darf. Ich habe damals mit dem C164CI 
angefangen und die paar Projekte die ich auf AVRs machen musste, waren 
so nebenbei recht leicht umzusetzen. Ich finde die Infeon-Controller 
wesentlich handlicher strukturiert. Wobei das Geschmackssache ist, jeder 
Hersteller hat nunmal seine eigene Philosophie. Ein PowerPC ist zum 
Beispiel anders gestrickt. Vorallem haben die ATmegas keinen so 
handlichen BSL wie die C166er.

So nun hab ich genug geschwafelt,
TManiac

von Markus H. (Firma: IMKO GmbH) (mhubig)


Lesenswert?

TManiac schrieb:
> Aha. Ich hatte mir extra das MemTool noch mal heruntergeladen um
> nachzuschauen. Auf der Infineon Seite hatte ich zwar auf die Schnelle
> nur die Version 4.2 gefunden und da ist kein SourceCode dabei. Hast du
> den Link noch zu der Version die du hast?

Hab's mal in meine Dropbox kopiert:
http://dl.dropbox.com/u/2721576/infineon_memtool_3_4_1.exe

- Markus

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.