Forum: Mikrocontroller und Digitale Elektronik Bootloader starten


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Johann (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich verwende momentan 2 XMEGA Mikrocontroller den XMEGA256A3U und den 
XMEGA32A4U. Für beide habe ich bereits einen Bootloader geschrieben. Ich 
habe dabei die ATMEL SP_DRIVER.c verwendet. Das scheint auch schon alles 
ganz gut zu funktionieren.

Ich flashe den Bootloader mit den AVR Studio in den XMEGA. Anschließend 
stelle ich mit Hilfe des AVR Studios das Bootfuse auf Bootloader um und 
schon startet der Bootloader.

Jedoch möchte ich den Bootloader nicht über das AVR Studio starten 
sondern über ein RS232 Kommando. Und genau hier tue ich mich momentan 
sehr schwer.

Hier mein Code:

BOOTRST_BOOTLDR_gc;

CCP = CCP_IOREG_gc;
RST.CTRL = RST_SWRST_bm;

Nur leider startet der Bootloader nicht. Auch wird das FUSE Bit nicht 
verändert. Der Softwarereset wird ausgeführt. Das konnte habe ich 
geprüft.

von Johann (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Aus den Bootloader selber kann ich ja die Fuse mit Hilfe der SP_DRIVER 
manipulieren.

Geht das auch aus der Applitkation herraus dann wäre das ja schon die 
Lösung?

von Johann (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Viele benutzen ja das EIND (Extended Indirect Register). Dies ist ja 
24Bit groß. Das EIND besteht aus dem Z-Register (Low-Byte und Hight 
Byte) und dem EIND (1Byte)

von Johann (Gast)


Bewertung
0 lesenswert
nicht lesenswert
3.10.3 EIND - Extended Indirect Register

EIND is concatenated with the Z-register to enable indirect jump and 
call to locations above the first 128KB (64K words) of the program 
memory

von Axel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Johann schrieb:
> Geht das auch aus der Applitkation herraus dann wäre das ja schon die
> Lösung?

Hi Johann,

kamst du mitlerweile weiter mit dem Start von deinem Bootloader? Ich ich 
möchte auch aus der Application in den Bootloader jumpen (zB nachdem 
seriell ich ein bestimmtes Command schicke) und frage mich wie es am 
gescheitesten tue. Soll ich es über EIND o. Software Reset machen? Danke

von Name H. (hacky)


Bewertung
0 lesenswert
nicht lesenswert
Naja, was ist der Unterschied zwischen einem Jump und einem Reset ? Die 
Register. Passt das so fuer dich ?

von Axel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ja, das passt. Danke!

Ich probiere gerade die Lösung mit dem Reset in meiner Application. So 
kann ich, bevor die Hauptschleife im Bootloader startet RST.STATUS-Bit 
abfragen. Nur funktioniert es nicht ganz, wie ich es mir vorstelle....

Nachdem ich RST.CTRL manipuliere, wird das SRF-Flag zwar 1, nur wird 
dieser nicht mehr zurückgesetzt. Soll ich es manuell auf 0 setzen? Sonst 
gelange ich immer in den Bootloader, egal welchen Reset ich mache. Und 
meine (RST.STATUS & RST_SRF_bm) Abfrage nutzt dann nichts. Schreiben mit 
(RST.STATUS &= ~(RST_SRF_bm) hat keine Auswirkung.

Ich habe genauso mit dem WDT-Reset probiert. Genauso hier, nachdem der 
WD STATUS-Bit gesetzt wird, wird dieser nicht zurückgesetzt.

Also wie kann ich die RST.STATUS Register zurücksetzen??

von Axel (Gast)


Bewertung
0 lesenswert
nicht lesenswert
OK, alles klar, wer lesen kann ist klar im Vorteil... Laut Datenblatt: 
"The flag will be cleared by a power-on reset or by writing a one to the 
bit
location." Also anstatt ne 0 zu schreiben, soll man ne 1 setzen.

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.