Bootloader upgraden

Gast #3163449
Lesenswert?

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 #3163482
Lesenswert?

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 #3163552
Lesenswert?

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 #3163628
Lesenswert?

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???
#3163653
Lesenswert?

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 #3163845
Lesenswert?

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 #3163970
Lesenswert?

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 #3165962
Lesenswert?

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 #3166281
Lesenswert?

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 #3166530
Lesenswert?

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 #3166635
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren