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.
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
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
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.
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.
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
ja, das Updateprogramm in App-Flash, nur der SPM muss im Loaderbereich sein
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.