Hallo Leute, ich habe hier für mein aktuelles Projekt einen Freescale S12XEP100 im Einsatz. Für diesen möchte ich jetzt einen Bootloader programmieren. Hat das schon mal jemenad für diesen (oder einen anderen S12X) µCs gemacht?
Wenn ich mich recht erinnere, gibt es auf der Freescale-Website eine AppNote zu dem Thema. Dort wird dann auch ein Bootloader vorgestellt; der Code ist Downloadbar (als Zip) und enthält einen vollständigen Downloader + Debugger für die serielle Schnittstelle. Ich weiss den genauen Namen der AppNote nicht mehr, aber du wirst die sicher finden. Grüsse
Ist relativ einfach. Bootloadercode ans Ende des Flash legen und evtl. schützen. Beim Start eine Abfrage (z.B. Checksumme über Applikationsfirmware oder Magic Bytes) machen ob die Applikation gestartet werden darf. Die FLASH Schreib- und Löschroutinen wie im Datenblatt angegeben nachbauen, ist kein Hexenwerk. Ansonsten noch al kleiner Tipp, du kannst die Interruptvektortabelle nach jedem Reset einmalig verschieben. D.h. du startest mit der Default Tabelle (ganz am Ende der Flashs) entscheidest, dass die Aoolikation gestartet werden soll, stellst die Tabelle um und springst zum neuen Resetvektor, der diesmal der Applikation gehört.
Danke für die Antworten! > Wenn ich mich recht erinnere, gibt es auf der Freescale-Website eine > AppNote zu dem Thema. Werde ich gleich mal nachsehen, ob da auch was für den S12X dabei ist. > Ist relativ einfach Naja, das liegt im Auge des Betrachters ;-) Habe mir schon einen abgebrochen, das S12X FTM (Flash Module) für eine EEPROM Emulation ans laufen zu bringen... Ich stelle mir die Funktionsweise meines Bootloaders so vor: - beim Starten (vor Aufruf der main) ein Flag im EEEPROM abfragen, ob Applikation oder Bootloader ausgeführt werden sollen. - Im Normalfall wird Applikation gestartet. Diese kommuniziert über Parallel <-> USB Wandler mit PC. - PC sendet irgendwann Kommando über USB, daß der µC im Bootloader modus starten soll. µC setzt Flag im EEEPROM und führt Reset aus. - µC startet nach dem Rest den Bootlader (Code am Ende des Flashs). - Bootloader empfängt über die parallel <-> USB Schnittstelle den HEX-Code und programmiert diesen in den Flash. Wenn fertig: Flag im EEEPROM löschen und Reset durchführen. Kann das so funktionieren oder habe ich etwas übersehen? Noch eine Frage: Ich vermute, den Code des Bootloaders an sich kann ich während des Bootloader modus nicht überschreiben? Wäre es eventuell möglich, im Applikationsmodus den Bootloadercode neu zu flashen und im Bootloader Modus den Applikationscode?
Hallo, deine geplante Vorgehensweise hört sich nicht schlecht an, wenn du es genau so umsetzt klappt es auf jedenfall. Zu deiner Frage: Beim S12X kann der Bootloader sich nicht selbst updaten, dazu ist eine "swappable bootarea" notwendig. Der NEC V850 zum Beispiel hat sowas. Ansonsten halte ich es nicht für eine gute Idee, den Bootloader durch die Applikation zu updaten, wenn hier was schiefgeht dann wars das. Ich würde stattdessen ein klein wenig mehr Zeit in das Design des Bootloaders stecken und evtl. Erweiterungen, z.B. Addressieren verschiedener Blocks, Schreiben des EEPROMs oder ähnliches definieren und implementieren. So hast du einen großen Funktionsumfang und brauchst nicht zwischendurch ein Bootloaderupdate in betracht zu ziehen.
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.