Chapter 17 Flash Memory
MPC5602P Microcontroller Reference Manual, Rev. 4
374
Freescale Semiconductor
LMS
= 0x00000006;
/* Set LSL2-1 in LMS: Select Sectors */
UT0
= 0x80000002;
/* Set AIE in UT0: Operation Start */
do
/* Loop to wait for AID=1 */
{ tmp
= UT0;
/* Read UT0 */
} while ( !(tmp & 0x00000001) );
data0
= UMISR0;
/* Read UMISR0 content*/
data1
= UMISR1;
/* Read UMISR1 content*/
data2
= UMISR2;
/* Read UMISR2 content*/
data3
= UMISR3;
/* Read UMISR3 content*/
data4
= UMISR4;
/* Read UMISR4 content*/
UT0
= 0x00000000;
/* Reset UTE and AIE in UT0: Operation End */
17.3.8.1.3.2 Margin read
The Margin read procedure (either Margin 0 or Margin 1) can be run on unlocked blocks in order to
unbalance the Sense Amplifiers with respect to standard read conditions so that all the read accesses reduce
the margin vs. 0 (UT0[MRV] = 0) or vs. 1 (UT0[MRV] = 1). Locked sectors are ignored by MISR
calculation and ECC flagging.
The results of the margin reads can be checked by comparing the checksum value in UMISR[0:4].
Since Margin reads are done at voltages that differ than the normal read voltage, the lifetime expectancy
of the Flash macrocell is impacted by the execution of Margin reads.
Repeated Margin reads will result in degradation of the Flash array, and will shorten the expected lifetime
experienced at normal read levels.
For these reasons, Margin reads are allowed only at the factory. Margin reads are forbidden for use by user
applications.
In any case the charge losses detected through the Margin mode cannot be considered failures of the device
and no failure analysis will be opened on them.
The Margin Read Setup operation consists of the following sequence of events:
1. Set UTE in UT0 by writing the related password in UT0.
2. Select the block(s) to be checked by writing 1s to the LMS register.
Note that Lock and Select are independent. If a block is selected and locked,
no Array Integrity Check will occur.
3. Set UT0[AIS] bit for a sequential addressing only.
4. Change the value in the UT0[MRE] bit from 0 to 1.
5. Select the Margin level: UT0[MRV] = 0 for 0s margin, UT0[MRV] = 1 for 1s margin.
6. Write a logic 1 to the UT0[AIE] bit to start the Margin Read.
7. Wait until the UT0[AID] bit goes high.
8. Compare UMISR[0:4] content with the expected result.
9. Write a logic 0 to the UT0[AIE], UT0[MRE] and UT0[MRV] bits.
10. If more blocks are to be checked, return to step 2.
It is mandatory to leave UT0[AIS] at 1 and use the linear address sequence (that also takes less time).