ATXmega Bootloader und eigentliche Firmware

Gast #5537881
Lesenswert?
• ▲
▼
Du musst den Bootloader gar nicht laden, weil er schon "da" ist. Der 
gesamte Inhalt des Flash Speichers ist immer sofort ohne Verzögerung 
verfügbar.

Initial sind alle Flash Zellen leer, und haben den Wert 0xFFFF. Darauf 
kannst du den Speicherinhalt testen.
#5537941
Lesenswert?
• ▲
▼
Ron C. schrieb:
> uint16_t *applicationPtr = ( uint16_t *)0x0000;
>   if ( *applicationPtr != 0xFFFF )
>   {
>     uartPutStr( "Es ist bereits eine Firmware vorhanden..\r\n" );
>   }
>
> so geht es nicht oder?

Xmega ist Harvard. Also zumindest ein LPM wird irgendwie vorkommen 
müssen.
In der avr-libc gibt's dafür die progmem includes. Den Funktionen/Makros 
kann man beliebige Adressen übergeben
(Firma: Vescomp) #5537972
Lesenswert?
• ▲
▼
Ron C. schrieb:
>
1
>   uint16_t *applicationPtr = ( uint16_t *)0x0000;
2
>   if ( *applicationPtr != 0xFFFF )
3
>   {
4
>     uartPutStr( "Es ist bereits eine Firmware vorhanden..\r\n" );
5
>   }
6
>
> so geht es nicht oder?

 Gehen tut es schon, nur hat dein Bootloader nix davon, da er so nicht
 wissen kann was im Flash ist, nur dass der Flash nicht gelöscht ist.

 Ausserdem kannst du Flashinhalt nicht so deklarieren, bzw. man kann
 nicht so aus dem Flash lesen, das meinte der Max D.
#5538241
Lesenswert?
• ▲
▼
Den Inhalt von $0000 zu checken ist nur die halbe Miete. Was ist wenn 
während des ersten Uploads der Anwendung jemand am Stecker gewackelt hat 
und die Übertragung abgebrochen ist? Dann denkt der Bootloader beim 
nächsten Start daß alles OK ist und lädt die Anwendung (die dann 
abstürzt). Und dann ist es gebrickt.

Am sichersten wäre es eine Prüfsumme zu errechnen und irgendwo an einem 
festen Offset Länge und Prüfsumme hinzuschreiben, dann kann der 
Bootloader bei jedem Start schnell die Prüfsumme ausrechnen und 
daraufhin entscheiden ob eine gültige Anwendung existiert oder nicht.

Alternativ könnte der Bootloader auch die Prüfsumme nur einmal prüfen 
(unmittelbar nachdem er die Anwendung ins Flash geschrieben hat) und 
dann bei Erfolg im letzten Flash-Sektor in den letzten paar Bytes noch 
ein Magic hinschreiben an dem er später erkennen kann daß alles OK ist, 
dann geht die Überprüfung nach dem Einschalten schneller.

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.