mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AT91SAM7A3 boot loader


Autor: Benjamin Rudert (sensed)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin gerade dabei einen Weg zu finden meinen SAM7A3 über RS232 
updatefähig zu machen.
Das heißt ich suche einen Weg ihn "in field" mit neuer Firmware zu 
bespielen.
Dazu dachte ich mir, setze ich einen einfachen bootloader auf adresse 
0x0 des internen flash, der nach einem Timeout automatisch auf Adresse 
0x8000 springt, wo die Firmware liegt.
Wird vor Ablauf des Timeouts über die rs232 ein Steuerkommando gesendet 
ermögliche ich das beschreiben des Flash.

Ich arbeite hier mit der IAR EWARM.
Ich habe den Sprung vom Bootloader zur Firmware folgendermaßen getestet:

  asm
  (
    "mov    r0, #0x00008000\n"
    "BX     r0 \n"
  );

dieses Stück inline Assembler funktioniert einwandfrei.

Problem ist jetzt, die Firmware findet nun keinen frisch resetteten 
Controller mehr vor und lässt ihren Startup-Code da drüber laufen.

Es klappt alles bis ich zum __enable_interrupt() komme. Dort spielt er 
dann verrückt.

Wahrscheinlich stimmt entweder etwas mit der Interrupt Vektor Tabelle 
nicht oder er kommt in die Systeminterrupts (Abort, Spurious, o.ä.).

Meine Frage ist jetzt, da ich den Sprung von "BootLoader" zu Firmware 
schon etwas rücksichtslos durchführe, was muss ich beachten um einen 
sauberen Softwarewechsel durch zu führen ohne den Prozessor zu resetten?

Beziehungsweise kennt jemand eine fertige Software die soetwas kann?
hatte schon an RedBoot o.ä. gedacht. Aber der SAM7A3 hat nur 32k RAM, da 
kann ich die Firmware nicht erst in den RAM kopieren bevor ich sie 
laufen lasse. Und Redboot an sich würde schon ein drittel meiner 256k 
internen Flash fressen.


Vielen Dank schonmal.

Autor: Benjamin Rudert (sensed)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok,

ich habe jetzt einfach die irq vector tabelle des BootLoaders kurz nach 
dem Branch mit der der Firmware überschrieben.

Das scheint bis jetzt zu funktionieren.

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit diesem Problem habe ich mich auch gerade für den SAM7S beschäftigt 
und das gefunden:
asm("swi 0x00"); //swiSoftReset();  
asm("bx lr");

Autor: Benjamin Rudert (sensed)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und was machen die 2 Zeilen?  ;)

Habe jetzt das Problem, dass mein Bootloader aus dem Flash läuft. Wenn 
ich also nun versuche den Flash aus dem er läuft zu Flashen, bleibt er 
natürlich stehen.

Wie kann ich das umgehen?

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich das richtig verstehe setzt der swi Befehl den SAM in den 
Supervisor-Modus. Anschließend wird zu lr = Linkregister Adresse 
gesprungen.

Hier noch einmal im Zusammenhang:
http://sylvainhb.blogspot.com/2007/08/arm7-et-arm9...

Da das ganze Thema aber nicht so einfach ist schau erst mal hier in den 
arm Beispielen:
http://www.mikrocontroller.net/articles/Bootloader

Autor: Benjamin Rudert (sensed)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, wie gesagt, das Springen zur Firmware geht soweit.
Ich habe nur das Problem mit meinem Bootloader, der aus dem Flash läuft 
andere Bereiche im Flash zu programmieren.

Gibt es eine Möglichkeit den Bootloader aus dem SRAM laufen zu lassen 
(ohne jtag) ?

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.