USB Bootloader AtxMega64A3U aus der Applikation starten

OP #4342697
Lesenswert?
• ▲
▼
Hallo Leute,

ich versuche im Moment den USB-UDF Bootloader mit der Version 1.04 auf 
meinem
AtxMega63A3U zum Laufen zu bekommen.

Ich möchte den bootloader aus meiner Applikation starten.
Die Abfrage des IOs zum Starten des Bootloaders habe ich ausgebaut.
So dass dieser starten sollte. Kompiliert habe ich mit IAR.

Die Fusebits habe ich auf die Applikaiton gestellt.

In meiner Applikation benutze ich die USB-Schnittstelle um mit dem PC zu
kommunizieren. USB-Stack läuft als HID-Gerät. Ich arbeite mit dem 
AVR-Studio 6.

Mir fehlt jetzt noch der Jump aus der Applikation in den Bootloader.
Ich habe zwar schon einiges hier gelesen aber ich kriege es nicht hin.

Hat jemand dies schon zuverlässig lösen können?

Ich habe folgenden Code getestet. Aber leider lande ich damit immer 
wieder in der Applikation.

void (*start_bootloader) (void)=(void (*)(void))BOOT_SECTION_START + 
0x1FC;

cpu_irq_disable();
start_bootloader();

Danke.

Gruß,
Georg.
OP #4342750
Lesenswert?
• ▲
▼
Hallo,

ja das geht natürlich auch. Aber dann muss ich die Fusebits auf 
Bootloader setzen und dieser würde dann nach jedem Anlegen der 
Versorgung gestartet. Dass möchte ich eigentlich nicht. Es soll die 
Applikation gestartet werden und aus dieser auf Anweisung der 
Bootloader.

Außer ihr kennt noch einen anderen eleganteren Weg?

Gruß,
Georg.
OP #4342762
Lesenswert?
• ▲
▼
Hallo,


#define BOOT_SECTION_START     (0x10000)

Der Bootloader lebt bzw. ist im Bootsector abgelegt. Meine Applikation 
überschreibt diesen Bereich nicht. Ich habe das Projekt so konfiguriert 
dass nur der Applikationsbereich gelöscht wird.
Den Bootloader kann ich auch testen wenn ich die Fusebits auf Bootloader 
setze und dann versuche die Applikation zu debuggen. Da wird automatisch 
erst der Bootloader gestartet. Zu sehen an der USB-Anmeldung am PC.

Wie hast du deine Soft-Jumps realisiert?

Gruß,
Georg.
Gast #4342771
Lesenswert?
• ▲
▼
Und was ist, wenn du im EEPROM vom Hauptprogramm für den Bootloader eine 
Info hinterlegst und dann den Reset ausführst?
Der Bootloader schaut dann im EEPROM nach, ob er sich selbst ausführen 
oder in die Hauptapp springen soll.

Hans
Gast #4342775
Lesenswert?
• ▲
▼
Georg X. schrieb:
> Hallo,
>
> ja das geht natürlich auch. Aber dann muss ich die Fusebits auf
> Bootloader setzen und dieser würde dann nach jedem Anlegen der
> Versorgung gestartet. Dass möchte ich eigentlich nicht. Es soll die
> Applikation gestartet werden und aus dieser auf Anweisung der
> Bootloader.
>
> Außer ihr kennt noch einen anderen eleganteren Weg?
>
> Gruß,
> Georg.

Na dann - wie oben schon erwähnt - ein Kennzeichen im Eeprom setzen, den 
Bootloader grundsätzlich starten und bei gesetztem EEprom-Kennzeichen 
sofort die Application starten.

Am Anfang der Application Kennzeichen zurücksetzen, wenn bootloader 
aufgerufen werden soll: Kennzeichen setzen und booten per watchdog.

Nur mal so interessehalber: Wofür brauchst Du den Bootloader, wenn Du 
ihn gar nicht vewenden willst?

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.