AnsweredAssumed Answered

Programmatically erase flash memory block

Question asked by colla.ivan on Mar 2, 2016
Latest reply on May 3, 2016 by colla.ivan
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 614.

Now, in order to store new values, I want to programmatically erase a flash memory block following the guide at page 616.

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 617.*/
 
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

Outcomes