Gast
#2215364
Hallo,
Ich versuche, einen Bootloader für xMegas zu bauen. Zum testen verwende
ich den x16a4.
Beim Versuch, die Application Section zu löschen läuft zwar die Schleife
(s.u.) durch, aber es passtiert nichts, die NVMBUSY-Flag wird nicht
gesetzt.
Der Code:
for (uint32_t i = 0; i < APP_SECTION_END; i += APP_SECTION_PAGE_SIZE) {
SP_EraseApplicationPage(i);
SP_WaitForSPM();
NVM.CMD = NVM_CMD_NO_OPERATION_gc;
}
Ich verwende den SP_driver.h von atmel aus der Application Note 1316
Self Programming.
Ohne den Treiber hatte ich mal eine Schleife, die so aussah
for (uint32_t i = 0; i < APP_SECTION_END; i += APP_SECTION_PAGE_SIZE) {
NVM.ADDR0 = lo(APP_SECTION_START);
NVM.ADDR1 = mi(APP_SECTION_START);
NVM.ADDR2 = hi(APP_SECTION_START);
NVM.CMD = NVM_CMD_ERASE_APP_gc;
CCP = CCP_SPM_gc;
NVM.CTRLA = NVM_CMDEX_bm;
NVM.CMD = NVM_CMD_NO_OPERATION_gc;
}
wobei lo, mi und hi Makros sind, die aus der 24-bit-Addresse das
jeweilige byte wählen, allerding mit dem selben Problem.
Der Code liegt in jedem Fall in der Bootloader Section
Wenn jemand ne Idee hat was ich falsch mache, meldet euch bitte.
Gruß
Philipp