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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Holger B. (rst-el)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Denk an die IVT!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.