This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

page_erase() problem

I need to store my boards network ID into nonvolatile memory. I have been using the page_erase() and write_flash_chk():


page_erase(PAGE_START, 0xFF, FDM);
write_flash_chk(PAGE_START, NewAddr, FDM);


where
 PAGE_START = 0x0400 
and my timing is set up as

//FLASH WRITE CONFIGURATION
USEC = 0x0C;	//tFWT = 32.5 us
MSECH = 0x4E;	//MSEC for tFET = 10 ms
MSECL = 0x20;	// @32 MHz
FTCON = 0xFF;	//FWR = 0x0F & FER = 0x0F

That worked fine until I changed my Serial ISR to implement a ring buffer, which has nothing to do with my memory writing function.

I know it is diffucult to debug a problem without seeing the code, but can anyone suggest things to look out for or a better way to store variables in flash memory?

Thanks

  • Turning off those interrupts was a cure of symptoms. The problem is that you're erasing a page, which contains not only data, but also code. You can't seriously be surprised that erasing part of the code of your program in mid-operation makes the system somewhat less than reliably.

    As I said: the solution is to tell the linker not to put any code in that area, period. And even then you may have to turn off interrupts for the time being, depending on whether that EEROM is capable of reading from one page while writing/erasing another.