HC12 Bootlaoder

Gast #278090
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.
Gast #278091
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
Gast #278092
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.
Gast #278093
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
Gast #278094
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.
Gast #278095
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
Gast #278096
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.
Gast #278097
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
Gast #278098
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.
Gast #278099
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.
Gast #278100
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.
Gast #278101
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ß

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.