Forum: Mikrocontroller und Digitale Elektronik Page in Bootloadersection von Applicationsection aus löschen/schreiben


von del (Gast)


Lesenswert?

Hallo,

ich habe einen ATmega16 mit einer Bootloadersection von 2Kb und einer 
Applicationsection von 14Kb und möchte von der Applicationsection aus 
den Bootloader austauschen.

Leider löscht der Befehl boot_page_erase(0x3800); mir nicht die Page in 
der Bootloadersection. Die Lockbits habe ich nicht verändert, laut 
AvrStudio sind keine Locks gesetzt (0xFF).

int main(void) {
  for (;;) {
    boot_page_erase(0x3800);
    boot_spm_busy_wait();
  }
  return (0);
}

Wenn ich statt der Adresse 0x3800 0x0000 angebe wird auch in der 
Applicationsection die Page nicht gelöscht.

Den obigen Code habe so weit reduziert das nur noch das wesentliche 
enthalten ist. Mein Code wird Fehler und Warnungsfrei compilliert.

Ich hoffe Ihr könnt mir hier weiterhelfen. Vielen Dank für Euere 
Bemühungen.

von DerDan (Gast)


Lesenswert?

Hallo,

schau mal nach, ich glaube die Programmierbefehle funktionieren nur, 
wenn sie selber in der Bootloader Sektion drinne stehen.


Wahrscheinlich müßtest du dein Flash in drei Bereiche aufteilen.

1. Applikation
2. Austauschbarer Boot Bereich
3. Konstanter Bootbereich mit den Flash Routinen für 1. und 2.

mfg

DerDan

von weinbauer (Gast)


Lesenswert?

SPM geht nur vom Bootloaderbereich aus, den Loaderbereich kann man 
meines Wissens nach beim M16 M32 vom Programmemory aus nicht 
beschreiben, geht soweit mir bekannt erst ab M64

von weinbauer (Gast)


Lesenswert?

Datenblatt Seite 246:

Application Section
The Application section is the section of the Flash that is used for 
storing the application code.
The protection level for the application section can be selected by the 
Application Boot Lock bits (Boot Lock bits 0), see Table 96 on page 249. 
The Application section can never store any Boot Loader code since the 
SPM instruction is disabled when executed from the Application section.

BLS – Boot Loader Section
While the Application section is used for storing the application code, 
the The Boot Loader software must be located in the BLS since the SPM 
instruction can initiate a programming when executing from the BLS only. 
The SPM instruction can access the entire Flash, including the BLS 
itself. The protection level for the Boot Loader section can be selected 
by the Boot Loader Lock bits (Boot Lock bits 1), see Table 97 on page 
249

Also, der Bootloaderbereich kann vom Bootloaderbereich selbst 
überschrieben werden, der BL vom Applicationbereich nicht, der 
Applicationbereich vom BL-Bereich auch.

von del (Gast)


Lesenswert?

Vielen Dank für die ausführlichen Antworten.

Kann ich dann meinen Bootloader selbst überhaupt irgendwie austauschen?

In der Bootloadersection hab ich nur noch geringfügig Platz.

von DerDan (Gast)


Lesenswert?

Hallo,

wie ich schon geschrieben habe: drei Teile.
Nur der Teil mit den Flash Routinen muss auch in der Boot Sektion sein.

zur Not kannst du auch dein Applikationsbereich in zwei Teile 
aufsplitten um deine Applikation und deinen austauschbaren Bootloader 
unterzubringen.

mfg

DerDan

von Weingut P. (weinbauer)


Lesenswert?

ja, das Updateprogramm in App-Flash, nur der SPM muss im Loaderbereich 
sein

von del (Gast)


Lesenswert?

Hallo,

Vielen Dank.

Im Moment ist es so das ich Mikrocontroller fest verbaut hab und 
Bootloader sich mit knapp 2000Byte im Bootloadersector befindet.

Aktuell kann er mit seinen Flash-Routinen die Application im 
Applicationsector austauschen.

Da sich also nicht genügend freier Platz im Bootloadersector befindet 
muss ich wohl nochmal per isp an die Mikrocontroller ran.

Was mich allerdings noch etwas grübeln lässt ist das ich damals bei 
meinen ersten Tests mit dem Bootloader diesen versehentlich noch in der 
Applicationsection stehen hatte und trotzdem in der Lage war eine 
Application damit die Applicationsection zu schreiben, wobei der 
Bootloader dadurch überschrieben wurde.

Naja ... da werd ich mir wohl was einfallen lassen müssen wie ich den 
Bootloader etwas kleiner krieg.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.