Internal Flash memory
ST10F271Z1
Then the operation can be resumed in the following way:
FCR0H |= 0x0800;
FCR0H |= 0x8000;
/*Set SER in FCR0H*/
/*Operation resume*/
Before resuming a suspended erase, FCR1H/FCR1L must be read to check if the erase is
already completed (FCR1H = FCR1L = 0x0000 if erase is complete). Original setup of select
operation bits in FCR0H/L must be restored before the operation resume, otherwise the
operation is aborted and bit RESER of FER is set.
Erase suspend, program and resume
A sector erase operation can be suspended in order to program (word or double word)
another sector.
Example: sector erase of sector B0F1 of IFlash module.
FCR0H |= 0x0800;
FCR1L |= 0x0002;
FCR0H |= 0x8000;
/*Set SER in FCR0H*/
/*Set B0F1*/
/*Operation start*/
Example: sector erase suspend.
FCR0H |= 0x4000;
/*Set SUSP in FCR0H*/
do
/*Loop to wait for LOCK=0 and WMS=0*/
{tmp1 = FCR0L;
tmp2 = FCR0H;
} while ((tmp1 && 0x0010) || (tmp2 && 0x8000));
Example: word program of data 0x5555AAAA at address 0x045554 in IFlash module.
FCR0H &= 0xBFFF;
/*Rst SUSP in FCR0H*/
FCR0H|= 0x2000;/*Set WPG in FCR0H*/
FARL = 0x5554;
/*Load Add in FARL*/
FARH = 0x0004;
/*Load Add in FARH*/
FDR0L = 0xAAAA;
/*Load Data in FDR0L*/
FDR0H = 0x5555;
/*Load Data in FDR0H*/
FCR0H |= 0x8000;
/*Operation start*/
Once the program operation is finished, the erase operation can be resumed in the following
way:
FCR0H|= 0x0800;/*Set SER in FCR0H*/
FCR0H|= 0x8000;/*Operation resume*/
Notice that during the program operation in erase suspend, bits SER and SUSP are low. A
word or double word program during erase suspend cannot be suspended.
In summary:
A sector erase can be suspended by setting SUSP bit.
● To perform a word program operation during erase suspend, firstly bits SUSP and SER
must be reset, then bit WPG and WMS can be set.
● To resume the sector erase operation bit SER must be set again.
● In any case it is forbidden to start any write operation with SUSP bit already set.
Set protection
Example 1: Enable write protection of sectors B0F3-0 of bank 0 in IFlash module.
40/185