Forum: Mikrocontroller und Digitale Elektronik HC12 Bootlaoder


von Schorschl (Gast)


Lesenswert?

hi,


ich bin grad dabei nen bootloader für den M68HC912BC32 zu schreiben.

Ich verwende den C-Compiler von Cosmic. Irgendwie klappen die
Flashroutinen net so wirklich.
Der überschreibt mir dem kompletten Flash, auch den geschützten
bootblock mir irgendwas. Danach geht dann nichts.

hat jemand sowas schon realisiert und kann mir ev. helfen.

danke und gruss,
schorschi.

von Christian Gärtner (Gast)


Lesenswert?

Hi,

Mass Erase verwendet? Damit löschst du alles, auch den Bootloader.
Richtig ist Sector Erase, löscht nur 256 Byte (beim C32) ab der
angegebenen Adresse.

Bei weiteren Problemen meld dich nochmal.
Christian

von Schorschi (Gast)


Lesenswert?

hi,

wie mach ich denn ein sector erase?

ich habe noch irgendwie ein grundsätzliches problem.

muss ich ev. irgendiwie den µC langsamer laufen lassen beim löschen
bzw.
flashen? Denn beim flashen schreibt er mir auch den kopletten flas mit
irgendwas voll.

Hast du ev. etwas beispielcode?

Gruss und danke,
schorschi.

von Christian Gärtner (Gast)


Lesenswert?

Hallo,

lad dir eifach mal die Application Notes AN2153 und AN2720 von der
Freescale Webseite runter. Dort ist alles sehr gut erklärt, außerdem
kannst du den Code übernehmen.
Eine weitere Fehlerqueller könnte sein, dass du den Code zum Löschen
und Schreiben aus dem Flash anstatt aus dem Ram ausführtst. Also den
"Flashtreiber" ins Ram linken (geht mit gut mit Cosmic!), vor der
Aktion auch wirklich kopieren und schon sollte se klappen.

Viel Erfolg!
Christian

von Schorschi (Gast)


Lesenswert?

hi,

jap. Dass es nicht im Flash läuft hab ich jetzt auch rausgefunden.
Sobald ich auf den flash zugreife habe ich nur noch bezug auf das ram.

allerdings kann ich den bootloader nicht einfach ins ram linken.

ich muss diesen beim start des flashvorgangs ins ram kopieren und von
dort aus starten.

Danke für deine Hilfe.

Gruss,
schorschi.

von Christian Gärtner (Gast)


Lesenswert?

> allerdings kann ich den bootloader nicht einfach ins ram linken.
Doch, als "moveable code". Der Code liegt im Flash, die Adressaufrufe
werden aber so gestaltet, dass die Adressen im Ram, wo die Funktionen
hinkopiert werden sollen, angesprungen werden.
Funktioniert mittels '-ic' im Linkerfile, Beispiel aus dem Cosmic
User Guide.

# LINKER EXAMPLE FOR MOVEABLE CODE
#
# mark this segment with -ic and link it at RAM address
#
+seg .text -b 0x100 -n boot -ic
flash.o
+seg .text -b 0x8000 -n code # application code

von Schorschl (Gast)


Lesenswert?

hi,

verstehe ich dass richtig dass ich mit aufruf dieses linkerkommandos
der code im flash bleibt und automatisch im RAM ausgeführt wird?
So dass ich im Prinzip diesen code nicht von Hand in den RAM kopieren
muss?

Oder wird der code nur so gelinkt dass dieser nicht mit absoluten
Adressen läuft? Und ich dann diesen manuell in den Ram kopieren muss.

gruss und danke,
schorschi.

von Sven Günther (Gast)


Lesenswert?

Schorschl && Christian

Liege ich in der Annahme Richtig, das der Bootloader in jedem
Mikrocontroller der HC12 Serie benutzt werden könnte? Ich arbeite mich
grad in den MC9S12NE64 ein.

Gruss Sven

von Christian Gärtner (Gast)


Lesenswert?

@Schorschl
Der Code muss noch ins Ram kopiert werden.

@Sven
Wäre grundsätzlich möglich, zumindest muss für einen anderen HC(S)12
Typ ein neues controllerspezifisches Headerfile eingebunden werden.

von Sven Günther (Gast)


Lesenswert?

@Christian

Also wie AVR Serie. Hatte schon fast an Prozessor Serien Übergreifenden
Code Gedacht.

Gruss Sven

PS: Kurze Frage, wie schnell arbeitet denn der 9S12 Core die Befehle
ab? Wie viele Takte Pro Befehl.

von Schorschi (Gast)


Lesenswert?

hi,

also doch in den RAM kopieren.
Wozu dann der linkeroperator.
ich brauche dann doch eher nen compileroperator
der mir den code so kompeliert dass dieser mit lokalen
adressen läuft.

nen bootloader für nen HCS12 habe ich auch schon gemacht.
ist dort viel einfacher da gepageder flash.

gruss,
schorschi.

von Markus (Gast)


Lesenswert?

Hallo,
der Linkeroperator ist bei Verwendung von mehreren Modulen notwendig.
Dem Compiler sind während des Übersetzens die externen Adressen nicht
bekannt! Der Linker ersetzt die Sprungadressen im Objectcode während
des Link-Vorgangs. z.B. wenn main() und die Flashroutinen in
verschiedenen Modulen (c-files) vorhanden sind, ist der Linkeroperator
absolut unerlässlich.

Gruß

von Schorschl (Gast)


Lesenswert?

hi,

also doch den linkerparameter und ins Ram kopieren.

ok.

danke.
schorschi.

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.