English
Language : 

PIC18LF2XK22 Datasheet, PDF (17/42 Pages) Microchip Technology – Flash Memory Programming Specification
PIC18(L)F2XK22/4XK22
3.2 Code Memory Programming
Programming code memory is accomplished by first
loading data into the write buffer and then initiating a
programming sequence. The write and erase buffer
sizes shown in Table 3-4 can be mapped to any
location of the same size beginning at 000000h. The
actual memory write sequence takes the contents of
this buffer and programs the proper amount of code
memory that contains the Table Pointer.
The programming duration is externally timed and is
controlled by PGC. After a Start Programming
command is issued (4-bit command, ‘1111’), a NOP is
issued, where the 4th PGC is held high for the duration
of the programming time, P9.
After PGC is brought low, the programming sequence
is terminated. PGC must be held low for the time
specified by parameter P10 to allow high-voltage
discharge of the memory array.
The code sequence to program a device is shown in
Table 3-5. The flowchart shown in Figure 3-4 depicts
the logic necessary to completely write the device. The
timing diagram that details the Start Programming
command and parameters P9 and P10 is shown in
Figure 3-5.
Note:
The TBLPTR register must point to the
same region when initiating the
programming sequence as it did when the
write buffers were loaded.
TABLE 3-4:
PIC18F23K22
PIC18F24K22
PIC18F25K22
PIC18F26K22
WRITE AND ERASE BUFFER SIZES
Devices
PIC18F43K22
PIC18F44K22
PIC18F45K22
PIC18F46K22
PIC18LF23K22
PIC18LF24K22
PIC18LF25K22
PIC18LF26K22
PIC18LF43K22
PIC18LF44K22
PIC18LF45K22
PIC18LF46K22
Write Buffer Size
(bytes)
64
Erase Size
(bytes)
64
TABLE 3-5: WRITE CODE MEMORY CODE SEQUENCE
4-bit
Command
Data Payload
Core Instruction
Step 1: Direct access to code memory.
0000
0000
0000
8E A6
9C A6
84 A6
BSF EECON1, EEPGD
BCF EECON1, CFGS
BSF EECON1, WREN
Step 2: Point to row to write.
0000
0000
0000
0000
0000
0000
0E <Addr[21:16]>
6E F8
0E <Addr[15:8]>
6E F7
0E <Addr[7:0]>
6E F6
MOVLW <Addr[21:16]>
MOVWF TBLPTRU
MOVLW <Addr[15:8]>
MOVWF TBLPTRH
MOVLW <Addr[7:0]>
MOVWF TBLPTRL
Step 3: Load write buffer. Repeat for all but the last two bytes.
1101
<MSB><LSB> Write 2 bytes and post-increment address by 2.
Step 4: Load write buffer for last two bytes and start programming.
1111
0000
<MSB><LSB> Write 2 bytes and start programming.
00 00
NOP - hold PGC high for time P9 and low for time P10.
To continue writing data, repeat steps 2 through 4, where the Address Pointer is incremented by 2 at each iteration of
the loop.
 2010 Microchip Technology Inc.
Advance Information
DS41398B-page 17