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