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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren