Bootloader upgraden

Gast #3163449
Hallo Leute,
seit geraumer Zeit beschäftige ich mich mit dem Stellaris chip LM3S9B96 
und arbeite mit dem Bootloader. Hab auch schon den einen oder anderen 
Tip von euch geholt und das erfolgreich. Nun hätte ich da noch einw 
eiteres Anliegen.

Ich kann sowohl das interne Flash des mikrocontrollers als auch ein ext. 
SPI Flash via usb updaten oder usb_stick. Nun möchte ich erreichen, dass 
ich den Bootlader selbst upgraden kann. Normalerweise ist es nicht 
notwendig, aber es kann sein das was am Bootloader verändert wurde und 
das er auch mal upgedated wird. Normalerweise tu ich das mit dem LM 
Flash Programmer, aber nun möchte ich das ohne es schaffen. Meine Idee 
wäre, den Bootloader direkt im ROM upzudaten, leider habe ich noch keine 
Idee dazu, vielleicht hat ja einer von euch ne bessere idee, wie man das 
realisieren kann??
Gast
Ich würde mit dem Bootloader als Applikation einen Updater schreiben, 
der dann den Bootloader aktualisiert.
Dabei solltest Du natürlich noch eine Möglichkeit einbauen, mit der Du 
prüfst ob der neue Bootloader schon korrekt geschrieben wurde (evtl. CRC 
über den Bootloader). Sonst schreibst Du evtl. den Bootloader in einer 
Endlos-Schleife...
Gast
Ok, aber meine Frage wär dann über welches interface mach ich das, ich 
dachte daran, dass ich gegebenfalls den Bootloader direkt ins ROM 
schreiben kann dann wird er ja nach dem reset direkt von dort aus wieder 
ausgeführt. Aber wie schreib ich dann ins ROM??
Gast
oh stimmt ja,  mmmhh.....
Alos der bootloader wird ja über JTAG mit den LM Flash programmer 
programmiert, wie soll dann der bootloader über die USB schnittstelle 
geladen werden, erstens verstehe ich das ja nicht, kann mir einer anhand 
eines Besipiels erklären???
Olli schrieb:
> oh stimmt ja,  mmmhh.....
Mr.T ist natürlich ein richtiger Schlaumeier. Natürlich hat er Recht. 
Aber hier geht es um Flash-ROM, daß man sehr wohl überschreiben kann.

Olli schrieb:
> Alos der bootloader wird ja über JTAG mit den LM Flash programmer
> programmiert, wie soll dann der bootloader über die USB schnittstelle
> geladen werden, erstens verstehe ich das ja nicht, kann mir einer anhand
> eines Besipiels erklären???
Meinst du nicht, du soltest dir erstmal über die grundsätzliche 
Architektur eines µC im Klaren sein, bevor du dir, völlig überflüssige, 
Gedanken über das Self-upgrade eines funktionierenden Bootloaders 
machst?

Das Prinzip hat Christoph H. dir doch schon beschrieben.

mfg.
Gast
Prinzip: Der Bootloader kopiert sich direkt nach dem Start in den RAM 
und führt sich dort aus. Nun kann er sich selber flashen, wenns sein 
muss.
Da gibt es ein Beispiel von Luminary: SerialFlashLoader an01242.pdf
Gast
Also ich habe den dfuprogrammer für meine Bedürfnisse modifiziert, ich 
würde gerne den dazu benutzen um den bootloader zu aktualisieren, ist es 
hiermit  möglich???
Gast
Das mit dem serialflashloader war eine gute idee, jetzt habe ich eine 
idee wie ich es umsetzen kann. hatte ganz vergessen, letzendlich sitzt 
der bootloader ja in den ersten 6 bytes des internen Flashs und die 
Anwendung darüber, folglich kann ich zum schreiben dieselben Funktionen 
benutzen nur halt ab der Addresse 0x0, werd mich dann hier ansetzen. 
dasselbe auch für usb_stick_update.
Danke für den Tip meld mich wenn ich was hab.
Gast
Thomas Eckmann schrieb:
> Mr.T ist natürlich ein richtiger Schlaumeier. Natürlich hat er Recht.
> Aber hier geht es um Flash-ROM, daß man sehr wohl überschreiben kann.
Dann soll er sich gefälligst auch korrekt ausdrücken!
Beim STM ist z.B. der ST-Bootloader im ROM! Nicht im Flash-"ROM".
Gast
Also mit dem dfuprog hab ichs hinbekommen, dass der bootloader upgedated 
werden kann, jedoch, will ich es auch mit usb_stick_update hinbekommen, 
da hats leider nicht funktioniert. Wenn ich doch sage, dass die Funktion 
ab addresse 0 schreiben soll, dann wird doch der vorhandene Bootloader 
übreschrieben, dann wird ja weiter auch nichts passieren, weil er 
theoretisch ja gelöscht wird, da steckt bestimmt eine andere idee 
dahinter.
Gast
Natürlich darf der Bootloader sich nicht unter dem Hintern löschen und 
neu programmieren. Daher muss er sich als erstes ins RAM kopieren und 
von dort selber starten. Erst jetzt darf er den Bereich des Booloaders 
im Flash löschen und beschreiben.
Gast
ich dachte, der bootloader kopiert sich selbst von Flash ins RAM oder 
gibt es dafür auch eine eigene Funktion, dass zu Beginn aufgerufen wird 
und dann der neue Bootloader ins Flash geladen wird????
Gast
Also der Bootloader aus dem Luminary-Beispiel ist im Prinzip nichts 
anderes als eine Aplikation, die allerdings per Scatter-File so gelinkt 
wird, dass sie im RAM läuft.
Nach einem Reset sorgen die ersten paar ASM-Instruktionen dieser 
Bootloader-Applikation dafür, dass der Programm-Code vom Flash ins RAM 
kopiert wird und die Programmausführung dorthin verzweigt. Erst dort 
findet dann die eigentliche Aufgabe des Bootloaders statt: Prüfen ob an 
der gegebenen Quelle eine neue Firmware vorhanden ist, falls ja: Das 
Flash löschen und die Firmware ins Flash programmieren. Wenn fertig, 
wird das Nutzprogramm gestartet.
Wenn der Bootloader keine neue Firmware findet, startet er direkt das 
Nutzprogramm.
Gast
Ok das verstehe ich, aber das gilt doch nur für den normalen Bootloader, 
aber wenn ich jetzt den usb_stick_update nutze, der ist ja auch ähnlich 
wie ein bootloader, der immer nach einen bestimmten filenamen im usb 
stick sucht, wie ist es dann in diesem fall, habs versucht und als er 
angefangen hat den neuen usb_stick_update.bin zu laden ist der prozess 
hängen geblieben.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.