Question
Programmatically erase flash memory block
Posted on March 02, 2016 at 15:57
Good morning to everyone.
I am trying to erase a flash memory block. I am try not to use the drivers. As now, I managed to program individual memory cells of the flash memory with storage data, following the Reference Manual at page 6 Now, in order to store new values, I want to programmatically erase a flash memory block following the guide at page 6 I use the following code:CFLASH.MCR.R = CFLASH.MCR.R | 0x4; /* Change the value of MCR[ERS] bit from 0 to 1. */
CFLASH.HBS.B.HSL = 0b01; /* Select H0 flash memory block: High Address Space starting at 0x0008_0000*/
*(ULONG*)0x00080000 = 1; /* Interlock writing as per RM pag 6*/
CFLASH.MCR.R = CFLASH.MCR.R | 0x1; /* Set MCR[EHV] to 1, in order to start an internal erase sequnece. */
/*... unreachable code. */
The problem is that, after setting MCR[EHV] to 1, the micro go in error. The strange thing is that MCR[RWE] is set to 1, indicating a Read While Write Event Error. I don't understand why this is the case.
I am trying the operation on a block where there is no program code (only a stored value) and I am doing the actions prescribed by the RM. The block is not locked: the corresponding bit in HBL register is set to 0.
Resets using other tools work, so is not a problem of the flash, but of the code.
Someone has some idea regarding this code snippet?
Thank you,
Ivan
#flash-erase