Forum: Mikrocontroller und Digitale Elektronik Bootloader für Freescale S12X


von peterguy (Gast)


Lesenswert?

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?

von Tobias P. (hubertus)


Lesenswert?

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

von Christian G. (christiang)


Lesenswert?

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.

von peterguy (Gast)


Lesenswert?

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?

von Christian G. (christiang)


Lesenswert?

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
Noch kein Account? Hier anmelden.