mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik HC12 Bootlaoder


Autor: Schorschl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Gärtner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schorschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Gärtner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schorschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Gärtner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Schorschl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sven Günther (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian Gärtner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sven Günther (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Schorschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Schorschl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

also doch den linkerparameter und ins Ram kopieren.

ok.

danke.
schorschi.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.