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.
Sorry, da kann ich nicht helfen. Ich habe nur den LM3S1968, da ist USB (zum Glück) kein Thema.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.