Problem bei Zugriff auf Flash Memory

Gast #2215364
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren