Datasheet
199
ATmega8A [DATASHEET]
8159E–AVR–02/2013
Figure 24-3. Addressing the Flash during SPM
(1)
Notes: 1. The different variables used in the figure are listed in Table 24-8 on page 204.
2. PCPAGE and PCWORD are listed in Table 25-5 on page 210.
24.8 Self-Programming the Flash
The Program memory is updated in a page by page fashion. Before programming a page with the data stored in
the temporary page buffer, the page must be erased. The temporary page buffer is filled one word at a time using
SPM and the buffer can be filled either before the page erase command or between a page erase and a page write
operation:
Alternative 1, fill the buffer before a page erase.
• Fill temporary page buffer.
• Perform a page erase.
• Perform a page write.
Alternative 2, fill the buffer after page erase.
• Perform a page erase.
• Fill temporary page buffer.
• Perform a page write.
If only a part of the page needs to be changed, the rest of the page must be stored (for example in the temporary
page buffer) before the erase, and then be rewritten. When using alternative 1, the boot loader provides an effec-
tive Read-Modify-Write feature which allows the user software to first read the page, do the necessary changes,
and then write back the modified data. If alternative 2 is used, it is not possible to read the old data while loading
since the page is already erased. The temporary page buffer can be accessed in a random sequence. It is essen-
tial that the page address used in both the page erase and page write operation is addressing the same page. See
“Simple Assembly Code Example for a Boot Loader” on page 202 for an assembly code example.
PROGRAM MEMORY
0115
Z - REGISTER
BIT
0
ZPAGEMSB
WORD ADDRESS
WITHIN A PAGE
PAGE ADDRESS
WITHIN THE FLASH
ZPCMSB
INSTRUCTION WORD
PAGE
PCWORD[PAGEMSB:0]:
00
01
02
PAGEEND
PAGE
PCWORDPCPAGE
PCMSB
PAGEMSB
PROGRAM
COUNTER