Page in Bootloadersection von Applicationsection aus löschen/schreiben

Gast #2697000
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.
Gast #2697183
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
Gast #2697196
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
Gast #2697208
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.
Gast #2697307
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.
Gast #2697371
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
Gast #2697713
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 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.