Internal Flash memory
ST10F272
Suspend and resume
Word Program, Double Word Program, and Sector Erase operations can be suspended in
the following way:
FCR0H |= 0x4000;
/*Set SUSP in FCR0H*/
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:
42/179