Forum: Mikrocontroller und Digitale Elektronik Problem bei Zugriff auf Flash Memory


von Philipp (Gast)


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

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
Noch kein Account? Hier anmelden.