Forum: Mikrocontroller und Digitale Elektronik Bootloader upgraden


von Olli (Gast)


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

von Christoph H. (Gast)


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

von Thomas E. (thomase)


Lesenswert?

Never change a running system!

mfg.

von Olli (Gast)


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

von Mr.T (Gast)


Lesenswert?

> Aber wie schreib ich dann ins ROM??
ROM = READ ONLY memory

von Olli (Gast)


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

von Thomas E. (thomase)


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.

von StinkyWinky (Gast)


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

von :-) (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Never change a running system!

Never run a changed system :-)

von Olli (Gast)


Lesenswert?

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

von Olli (Gast)


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.

von Mr.T (Gast)


Lesenswert?

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

von Olli (Gast)


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.

von StinkyWinky (Gast)


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.

von Olli (Gast)


Lesenswert?

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

von StinkyWinky (Gast)


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.

von Olli (Gast)


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.

von StinkyWinky (Gast)


Lesenswert?

Sorry, da kann ich nicht helfen. Ich habe nur den LM3S1968, da ist USB 
(zum Glück) kein Thema.

von Olli (Gast)


Lesenswert?

Schade, Danke trotzdem für deine Hilfe.

Vielleicht ist da jemand der sich mit den LM3S9B96 auskennt oder 
vergleichbaren.....

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.