USB DFU Bootloader

OP (Firma: Selbst ist der Mann) #3210173
Hallo Forum,
Ich habe vor, den USB Bootloader von Atmel über Flip in den 
ATXMega128AU3U zu integrieren.
Jetzt meine Frage, da die Hardware der Anwendung schon fertig ist wollte 
ich die Möglichkeit nutzen, den Bootloader aus der Applikation heraus 
anzuspringen.
Wäre es möglich, bei dem entsprechenden Pin (E3) des Xmega den Pulldown 
zu setzen und dann den Reset über die Software auszulösen, oder wird der 
Pulldown beim Reset wieder gelöst?

Danke für Eure Ideen
VG Daniel
Gast #3210991
> Wäre es möglich, bei dem entsprechenden Pin (E3) des Xmega den Pulldown
> zu setzen und dann den Reset über die Software auszulösen, oder wird der
> Pulldown beim Reset wieder gelöst?
Der Reset dient dazu die Register in einen definierten Zustand zu 
versetzen - IO-Register gehören i.d.R. ebenfalls dazu (das Datenblatt 
kann's dir sagen, ob's bei deinem Controller auch so ist).
Ich kenne die (X)Mega's nicht im Detail, aber soweit ich weiss 
implementieren diese eine Bootloader-Fuse, d.h. wenn du die setzt 
springt der Controller beim Reset erstmal in die Bootloader-Sektion.
Du könntest einen Bootloader schreiben, der dann den Pin prüft und 
entsprechend agiert.
Zusätzlich könntest du nette Features wie eine Integritätsprüfung des 
Firmware-Images etc. einbauen uswusf.

Ralf
OP (Firma: Selbst ist der Mann) #3211537
Vielen Dank Timmo :-)

Das nüsste sich doch dann so realisieren lassen, oder?
1
void (* boot_loader) (void);
2

3
boot_loader = (BOOT_SECTION_START >> 1) + (0x1FC >> 1);
4

5
boot_loader();
(Code im Forum gefunden und etwas angepasst)
Danke.
Daniel
OP (Firma: Selbst ist der Mann) #3214280
Ich habe noch etwas recherchiert und im ASF etwas Beispielcode gefunden.
Funktioniert perfekt :-)
Die Bootloader Fuse ist auf "Application" gesetzt.
1
void(* start_bootloader)(void) = (void (*)(void))(BOOT_SECTION_START/2+0x1FC/2);
2

3
void UpdateFW(void)
4
{
5
  udc_stop();
6
  EIND = BOOT_SECTION_START>>17;
7
  start_bootloader();
8
}

Danke nochmal an die Mithelfer :-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.