Forum: Mikrocontroller und Digitale Elektronik Infineon XE167 Flash-Updates über ser. Schnittstelle


von Holger B. (rst-el)


Lesenswert?

Hallo,

wir setzen den Infineon XE167F-96 L ein.

Die Anwendung benötigt derzeit etwa 40% des verfügbaren Flash-Speichers.

Es stehen maximal 50% des Flashs zur Verfügung, die oberen 50% werden 
quasi als "Zwischenpuffer" für Softwareupdates genutzt.

Das Einspielen von neuen Softwareversionen ist derzeit folgendermaßen 
realisiert:

1.) Zunächst wird das Hex-File über serielle Schnittstelle übertragen 
und direkt in die obere Flash-Hälfte programmiert. Dieser fungiert quasi 
erstmal als "Zwischenpuffer".
2.) Sofern die Übertragung erfolgreich war, wird die eigentliche 
Programmier-Routine aufgerufen, die (geschützt) in einer Page ganz oben 
im Flash steht. Diese löscht die untere Flash-Hälfte und kopiert den 
oberen Bereich nach unten.

Dieser Ablauf stellt sicher, dass bei Übertragungsfehlern oder 
abgebrochener Übertragung das "Originalprogramm" zunächst nicht zerstört 
wird und die Anlage auch weiter in Betrieb bleibt.

Die Vorgehensweise hat 2 Nachteile:
a)Es steht nur 50% Flash für das Programm zur Verfügung
b)Wenn während des o.g. Teil 2.) die Spannung abgeschaltet wird, ist die 
Platine "zerstört" und kann nur mittels Programmer wieder mit Software 
bespielt werden.

Daher würde ich den Ablauf gerne ungefähr so ändern:
Es gibt einen Programmteil, der in einem "geschützten" Flash Sektor 
steht und beim Updaten nicht gelöscht wird.
Das Programm springt zunächst an diese Stelle, es erfolgen die 
notwendigen Initialisierungen, um einen seriellen Empfang des Hex-Files 
zu ermöglichen, dann wird geprüft, ob ein Flash-Update eingespielt 
werden soll und dementsprechend entschieden, ob das Programm normal oder 
im Programmiermodus startet.

Aus meiner Sicht müsste das folgendermaßen ablaufen:
1. Reset
2. Sprung zu _main
(unten im Flash oberhalb des Startups und der Interruptvektoren)
3. Ausführung der notwendigen Teile der MAIN_vInit
(PLL, Ports, Schnittstelle,..)
4. Abfrage, ob Flash oder normaler Programmablauf und Sprung in die 
entsprechenden Funktionen, die in einem anderen Sektor liegen müssen.

Somit könnte der komplette Flash mit Ausnahme des untersten Sektors 
genutzt werden und der "Bootloader" würde immer funktionieren, auch wenn 
beim Flashen etwas schiefgeht.

Sehe ich das richtig oder gibt es vielleicht bessere Ansätze ?

Hat jemand diesbezüglich Erfahrung mit dieser Prozessorfamilie ?

von Guido B. (guido-b)


Lesenswert?

Ich würde die Flashroutine in das PSRAM kopieren (normalerweise
via Bootstraploader) und von dort aus den Flash löschen und
neu beschreiben.

von Der Siebenschläfer (Gast)


Lesenswert?

Malzeit,

muss man beim C167 bootstrap loader für RS232 dazu aber nicht beim rest 
einen entprechenden pin setzen, um den c167 in den bootstrap Booter zu 
zwingen (ich weis sind nur 16 oder 32 byte die man damit übertragen 
kann)

Ansich hört sich das nicht so falsch an. Das andere ist eher murtks, ... 
genau aus dem grund das wenn man im falschen moment die spannung  trennt 
die kiste zu nem backstein verwandelt. Oder schlimmer noch ein 
halblebiges monster erschaft ( je nach dem wie der flash gelöscht und 
programmiert wird. )

Der Booter ist nicht so leicht austauschbar.
Bei der HW initallisierung im Booter nur das absolute minimum machen. 
Die Haupt FW kann dann den rest machen.
Alle InterruptVetroren berücksichtigen auch die die auktuell nicht 
verwendet werden.
Sicherstellen, das die neue FW richtig programmiert wurde. Z.B. über 
eine CRC / ... die bei jedem Start geprüft wird oder über ein flag das 
nach erfolgreicher Programmierung und validierung gesetzt wird.
Sich genau gedanken über löschen/flashen/validieren machen.
Entsprechende Sogfalt und qualifizierung berücksichtigen. der Booter 
kann nur sehr aufwend ausgetauscht werden.

von that 's all (Gast)


Lesenswert?

Denk an die IVT!

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.