Chapter 17 Flash Memory
MPC5602P Microcontroller Reference Manual, Rev. 4
Freescale Semiconductor
373
The internal MISR calculator is a 32-bit register.
The 128-bit data, the 16-bit ECC data, and the single and double ECC errors of the two double words are
therefore captured by the MISR through five different read accesses at the same location.
The whole check is done through five complete scans of the memory address space:
1. The first pass scans only bits 31:0 of each page.
2. The second pass scans only bits 63:32 of each page.
3. The third pass scans only bits 95:64 of each page.
4. The fourth pass scans only bits 127:96 of each page.
5. The fifth pass scans only the ECC bits (8 + 8) and the single and double ECC errors (2 + 2) of both
double words of each page.
The 128-bit data and the 16-bit ECC data are sampled before the eventual ECC correction, while the single
and double error flags are sampled after the ECC evaluation.
Only data from existing and unlocked locations are captured by the MISR.
The MISR can be seeded to any value by writing the UMISR0–4 registers.
The Array Integrity Self Check consists of the following sequence of events:
1. Set UT0[UTE] 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 eventually UT0[AIS] bit for a sequential addressing only.
4. Write a logic 1 to the UT0[AIE] bit to start the Array Integrity Check.
5. Wait until the UT0[AID] bit is set.
6. Compare the contents of the UMISR0–4 registers with the expected results.
7. Write a logic 0 to the UT0[AIE] bit.
8. If more blocks are to be checked, return to step 2.
It is recommended to leave UT0[AIS] at 0 and use the proprietary address sequence that checks the read
path more fully, although this sequence takes more time.
NOTE
During the execution of the Array Integrity Check operation it is forbidden
to modify the content of Block Select (LMS) and Lock (LML, SLL)
registers, otherwise the MISR value can vary in an unpredictable way.
While UT0[AID] is low and UT0[AIE] is high, the user may clear UT0[AIE], resulting in an Array
Integrity Check termination.
UT0[AID] must be checked to know when the terminating command has completed.
Example 17-5. Array Integrity Check of sectors B0F1 and B0F2
UT0
= 0xF9F99999;
/* Set UTE in UT0: Enable User Test */