Skip to main content
ivancolla9
Associate III
March 2, 2016
Question

Programmatically erase flash memory block

  • March 2, 2016
  • 3 replies
  • 1414 views
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
This topic has been closed for replies.

3 replies

Erwan YVIN
ST Technical Moderator
April 8, 2016
Posted on April 08, 2016 at 10:46

Hello Ivan ,

sorry for the late answer,

Did you solve the issue ?

Could you confirm the device used ?

you can find the flash driver in the SPC5Studio Eclipse marketplace.

(cf screenshot)

often , after generating an internal erase sequence , you have to wait for completion

/* Waiting completion then stopping operation.*/

  while (!DFLASH.MCR.B.DONE)

  ;

   Best regards

                 Erwan

In order to give better visibility on the answered topics, please click on 'Best answer' on the reply which solved your issue or answered your question.
Erwan YVIN
ST Technical Moderator
April 8, 2016
In order to give better visibility on the answered topics, please click on 'Best answer' on the reply which solved your issue or answered your question.
ivancolla9
Associate III
May 3, 2016
Posted on May 03, 2016 at 17:39

Hello Erwan.

I found the driver of which you spoke and learned to use it. 

Now the issue is solved.

Thank you,

Ivan