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??
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...
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??
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.
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
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???
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.
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".
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.
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.
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????
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.
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.