Datasheet

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 effective 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 essential that the page address used in both the page erase and
page write operations are addressing the same page. Refer to 30.2.5 Simple Assembly Code Example
for a Boot Loader.
31.8.1 Performing Page Erase by SPM
To execute page erase, set up the address in the Z-pointer, write “0x0000011” to Store Program Memory
Control and Status Register (SPMCSR), and execute SPM within four clock cycles after writing SPMCSR.
The data in R1 and R0 is ignored. The page address must be written to PCPAGE in the Z-register. Other
bits in the Z-pointer will be ignored during this operation.
Page erase to the RWW section: The NRWW section can be read during the page erase.
Page erase to the NRWW section: The CPU is halted during the operation.
31.8.2 Filling the Temporary Buffer (Page Loading)
To write an instruction word, set up the address in the Z-pointer and data in [R1:R0], write “0x00000001”
to SPMCSR, and execute SPM within four clock cycles after writing SPMCSR. The content of PCWORD
([Z5:Z1]) in the Z-register is used to address the data in the temporary buffer. The temporary buffer will
auto-erase after a page write operation or by writing the RWWSRE bit in SPMCSR
(SPMCSR.RWWSRE). It is also erased after a system reset. It is not possible to write more than one time
to each address without erasing the temporary buffer.
If the EEPROM is written in the middle of an SPM page load operation, all data loaded will be lost.
31.8.3 Performing a Page Write
To execute page write, setup the address in the Z-pointer, write “0x0000101” to SPMCSR, and execute
SPM within four clock cycles after writing SPMCSR. The data in R1 and R0 is ignored. The page address
must be written to PCPAGE ([Z5:Z1]). Other bits in the Z-pointer must be written to zero during this
operation.
Page write to the RWW section: The NRWW section can be read during the page write
Page write to the NRWW section: The CPU is halted during the operation
31.8.4 Using the SPM Interrupt
If the SPM interrupt is enabled, the SPM interrupt will generate a constant interrupt when the SPMEN bit
in SPMCSR is cleared (SPMCSR.SPMEN). This means that the interrupt can be used instead of polling
the SPMCSR register in software. When using the SPM interrupt, the interrupt vectors should be moved
to the Boot Loader Section (BLS) section to avoid that an interrupt is accessing the RWW section when it
is blocked for reading. How to move the interrupts is described in Interrupts chapter.
Related Links
16. Interrupts
31.8.5 Consideration While Updating Boot Loader Section (BLS)
Special care must be taken if the user allows the Boot Loader Section (BLS) to be updated by leaving
Boot Lock bit11 unprogrammed. An accidental write to the boot loader itself can corrupt the entire boot
loader, and further software updates might be impossible. If it is not necessary to change the boot loader
ATmega48PA/88PA/168PA
Boot Loader Support – Read-While-Write Self-...
© 2018 Microchip Technology Inc.
Datasheet Complete
DS40002011A-page 353