Datasheet
PIC18F6585/8585/6680/8680
DS30491D-page 90 2003-2013 Microchip Technology Inc.
5.5.1 FLASH PROGRAM MEMORY WRITE
SEQUENCE
The sequence of events for programming an internal
program memory location should be:
1. Read 64 bytes into RAM.
2. Update data values in RAM as necessary.
3. Load table pointer with address being erased.
4. Do the row erase procedure.
5. Load table pointer with address of first byte
being written.
6. Write the first 8 bytes into the holding registers
with auto-increment.
7. Set the EECON1 register for the write operation:
• set EEPGD bit to point to program memory;
• clear the CFGS bit to access program memory;
• set WREN to enable byte writes.
8. Disable interrupts.
9. Write 55h to EECON2.
10. Write 0AAh to EECON2.
11. Set the WR bit. This will begin the write cycle.
12. The CPU will stall for duration of the write (about
5 ms using internal timer).
13. Execute a NOP.
14. Re-enable interrupts.
15. Repeat steps 6-14 seven times to write 64 bytes.
16. Verify the memory (table read).
This procedure will require about 40 ms to update one
row of 64 bytes of memory. An example of the required
code is given in Example 5-3.
EXAMPLE 5-3: WRITING TO FLASH PROGRAM MEMORY
Note: Before setting the WR bit, the Table
Pointer address needs to be within the
intended address range of the eight bytes
in the holding register.
MOVLW D’64 ; number of bytes in erase block
MOVWF COUNTER
MOVLW high(BUFFER_ADDR) ; point to buffer
MOVWF FSR0H
MOVLW low(BUFFER_ADDR)
MOVWF FSR0L
MOVLW upper(CODE_ADDR) ; Load TBLPTR with the base
MOVWF TBLPTRU ; address of the memory block
MOVLW high(CODE_ADDR)
MOVWF TBLPTRH
MOVLW low(CODE_ADDR)
MOVWF TBLPTRL
READ_BLOCK
TBLRD*+ ; read into TABLAT, and inc
MOVF TABLAT, W ; get data
MOVWF POSTINC0 ; store data
DECFSZ COUNTER ; done?
BRA READ_BLOCK ; repeat
MODIFY_WORD
MOVLW high(DATA_ADDR) ; point to buffer
MOVWF FSR0H
MOVLW low(DATA_ADDR)
MOVWF FSR0L
MOVLW low(NEW_DATA) ; update buffer word
MOVWF POSTINC0
MOVLW high(NEW_DATA)
MOVWF INDF0
18F8680.book Page 90 Tuesday, January 29, 2013 1:32 PM