Hallo! Ich habe mir anhand von Atmel Application Notes einen Bootloader für meinen XMEGA128A4 geschrieben (nutze das Atmel ASF nvm_common_spm). Dieser funktioniert soweit auch einwandfrei. Nun wollte ich zusätzlich ein Updatemechanismus für den Bootloader implementieren. Dazu habe ich mir im Bootloader eine zweite Section erstellt in der ein Mini-Bootloader für den eigentlichen Bootloader liegt. Soweit sieht eigentlich alles gut aus, d.h. im lss liegen alle Funktionen da wo sie sollen und ich kann aus der Applikation in meine Bootloader-Update-Funktion springen. Diese ließt auch die neue Daten für den Bootloader (aus dem Applikationsbereich) jedoch schreiben tut sie nicht! Ich habe es nun auch schon ganz einfach versucht, d.h. mein Bootloader sieht wie folgt aus: int main (void) { nvm_common_spm(0x20000, NVM_CMD_ERASE_BOOT_gc); while (1) { PORTA.OUTTGL = 0x80; // toggle LED delay_ms(300); } } Eigentlich würde ich nun erwarten, dass sich der Bootloader selbst löscht und dann nichts mehr macht. Jedoch blinkt meine LED ganz munter... Gibt es noch etwas zu beachten um in die Bootloadersektion zu schreiben? Lock-Bits sind keine gesetzt... Vielen Dank.
:
Verschoben durch User
Hallo, ich habe mal in meinen Bootloader-Updater geschaut (basiert noch nicht auf ASF nvm_common_spm), aber den Routinen des NVM muß man normalerweise immer Wordadressen übergeben. Also versuchs mal mit 0x10000 beim 128k-Chip. Servus Wolfgang
Hallo Wolfgang, danke für deinen Hinweis, jedoch will die nvm_common_spm-Routine die Byte-Adresse. Mit Byte-Adressen funktioniert es auch wenn ich die Applikation neu schreibe. Trotzdem habe ich auch schon die Word-Adresse verwendet, aber es passiert einfach nichts. Gruß Martin
Hallo, 'zu Fuß' mache ich folgende Schritte:
1 | SP_LoadFlashPage(flash_data); |
2 | SP_EraseWriteApplicationPage(current_page); |
3 | SP_WaitForSPM(); |
wobei die Teilschritte aus sp_driver.s von Atmel kommen.
Hallo Wolfgang, danke für den Hinweis auf den sp_driver.s. Habe mir den nochmal angeschaut und habe dadurch bei mir was gefunden. Jetzt funktionierts. Grüße Martin
Martin Z. schrieb: > habe dadurch bei mir was gefunden Schön wäre es gewesen, wenn du geschrieben hättest, WAS du gefunden hast. Na gut wenigstens wissen wir, DASS du was gefunden hast und WIE du es gefunden hast...
Lothar Miller schrieb: > Martin Z. schrieb: >> habe dadurch bei mir was gefunden > Schön wäre es gewesen, wenn du geschrieben hättest, WAS du gefunden > hast. Na gut wenigstens wissen wir, DASS du was gefunden hast und WIE du > es gefunden hast... ...ich hätte auch sehr gerne geschrieben was es konkret war. Da ich, durch den hier erhaltenen Hinweis, dann noch mehr umgebaut hatte wie wahrscheinlich notwendig war, kann ich es nicht mehr so recht nachvollziehen. Meine Vermutung ist, da ich die Befehle aus der asf-Library etwas verkürzt hatte, dass mir zwischen NVM-Befehlen eine Überprüfung des Statusflag gefehlt hat...
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.