C8051F340/1/2/3/4/5/6/7/8/9/A/B/C/D
108
Rev. 1.3
12.1.3. Flash Write Procedure
Bytes in Flash memory can be written one byte at a time, or in groups of two. The FLBWE bit in register
PFE0CN (SFR Definition 10.1) controls whether a single byte or a block of two bytes is written to Flash
during a write operation. When FLBWE is cleared to ‘0’, the Flash will be written one byte at a time. When
FLBWE is set to ‘1’, the Flash will be written in two-byte blocks. Block writes are performed in the same
amount of time as single-byte writes, which can save time when storing large amounts of data to Flash
memory.During a single-byte write to Flash, bytes are written individually, and a Flash write will be per-
formed after each MOVX write instruction. The recommended procedure for writing Flash in single bytes is:
Step 1. Disable interrupts.
Step 2. Clear the FLBWE bit (register PFE0CN) to select single-byte write mode.
Step 3. Set the PSWE bit (register PSCTL).
Step 4. Clear the PSEE bit (register PSCTL).
Step 5. Write the first key code to FLKEY: 0xA5.
Step 6. Write the second key code to FLKEY: 0xF1.
Step 7. Using the MOVX instruction, write a single data byte to the desired location within the
512-byte sector.
Step 8. Clear the PSWE bit.
Step 9. Re-enable interrupts.
Steps 5-7 must be repeated for each byte to be written.
For block Flash writes, the Flash write procedure is only performed after the last byte of each block is writ-
ten with the MOVX write instruction. A Flash write block is two bytes long, from even addresses to odd
addresses. Writes must be performed sequentially (i.e. addresses ending in 0b and 1b must be written in
order). The Flash write will be performed following the MOVX write that targets the address ending in 1b. If
a byte in the block does not need to be updated in Flash, it should be written to 0xFF. The recommended
procedure for writing Flash in blocks is:
Step 1. Disable interrupts.
Step 2. Set the FLBWE bit (register PFE0CN) to select block write mode.
Step 3. Set the PSWE bit (register PSCTL).
Step 4. Clear the PSEE bit (register PSCTL).
Step 5. Write the first key code to FLKEY: 0xA5.
Step 6. Write the second key code to FLKEY: 0xF1.
Step 7. Using the MOVX instruction, write the first data byte to the even block location (ending in
0b).
Step 8. Write the first key code to FLKEY: 0xA5.
Step 9. Write the second key code to FLKEY: 0xF1.
Step 10. Using the MOVX instruction, write the second data byte to the odd block location (ending
in 1b).
Step 11. Clear the PSWE bit.
Step 12. Re-enable interrupts.
Steps 5–10 must be repeated for each block to be written.