12.1.4 Writing to Program Flash Memory
The programming write block size is specified as the number of table latch bytes, also referred to as holding registers, in the memory organization table. Word or byte programming is not supported. Table writes are used internally to load the holding registers needed to program the Flash memory. There are only as many holding registers as there are bytes in a write block.
Since the table latch (TABLAT) is only a single byte, the TBLWT
instruction needs to be executed multiple times for each programming operation. The write
protection state is ignored for this operation. All of the table write operations will
essentially be short writes because only the holding registers are written. NVMIF is not
affected while writing to the holding registers.
After all the holding registers have been written, the programming operation of that block of memory is started by configuring the NVMCON1 register for a program memory write and performing the long write sequence.
If the PFM address in the TBLPTR is write-protected or if TBLPTR points to an invalid location, the WR bit is cleared without any effect and the WRERR is signaled.
The long write is necessary for programming the internal Flash. CPU
operation is suspended during a long write cycle and resumes when the operation is
complete. The long write operation completes in one instruction cycle. When complete, WR is
cleared in hardware and NVMIF is set and an interrupt will occur if NVMIE is also set. The
latched data is reset to all ‘1
s’. WREN is not
changed.
The internal programming timer controls the write time. The write/erase voltages are generated by an on-chip charge pump, rated to operate over the voltage range of the device.
0
’ to a
‘1
’. When modifying individual bytes, it is not necessary to load all
holding registers before executing a long write operation.