![](http://datasheet.mmic.net.cn/90000/M44C090-XXX-FL16_datasheet_2360652/M44C090-XXX-FL16_272.png)
272
Atmel ATmega16/32/64/M1/C1 [DATASHEET]
7647K–AVR–12/13
25.9.4 SPI Serial Programming Characteristics
Table 25-17. Serial Programming Instruction Set
Instruction
Instruction Format
Operation
Byte 1
Byte 2
Byte 3
Byte4
Programming enable
1010 1100 0101 0011
xxxx xxxx
xxxx xxxx Enable serial programming after RESET goes low.
Chip erase
1010 1100
100x xxxx
xxxx xxxx
xxxx xxxx Chip erase EEPROM and flash.
Read program memory
0010 H000 000a aaaa bbbb bbbb oooo oooo
Read H (high or low) data o from program memory
at word address a:b.
Load program memory page
0100 H000 000x xxxx bbbb bbbb
iiii iiii
Write H (high or low) data i to program memory
page at word address b. Data low byte must be
loaded before Data high byte is applied within the
same address.
Write program memory page
0100 1100 aaaa aaaa
bb
xx xxxx
xxxx xxxx Write program memory page at address a:b.
Read EEPROM memory
1010 0000 000x xxaa bbbb bbbb oooo oooo
Read data o from EEPROM memory at address
a
:b.
Write EEPROM memory
1100 0000
000x xxaa bbbb bbbb
iiii iiii
Write data i to EEPROM memory at address a:b.
Load EEPROM memory page
(page access)
1100 0001 0000 0000 0000 00bb
iiii iiii
Load data i to EEPROM memory page buffer. After
data is loaded, program EEPROM page.
Write EEPROM memory page
(page access)
1100 0010
00xx xxaa bbbb bb00 xxxx xxxx Write EEPROM page at address a:b.
Read lock bits
0101 1000 0000 0000
xxxx xxxx
xxoo oooo
Read lock bits. “0” = programmed,
for details.
Write lock bits
1010 1100
111x xxxx
xxxx xxxx
11ii iiii
Write lock bits. Set bits = “0” to program lock bits.
Read signature byte
0011 0000
000x xxxx
xxxx xxbb oooo oooo Read signature byte o at address b.
Write fuse bits
1010 1100 1010 0000
xxxx xxxx
iiii iiii
Set bits = “0” to program, “1” to unprogram.
Write fuse high bits
1010 1100 1010 1000
xxxx xxxx
iiii iiii
Set bits = “0” to program, “1” to unprogram. See
Write extended fuse bits
1010 1100 1010 0100
xxxx xxxx
xxii iiii
Set bits = “0” to program, “1” to unprogram. See
Read fuse bits
0101 0000 0000 0000
xxxx xxxx oooo oooo
Read Fuse bits. “0” = programmed,
“1” = unprogrammed.
Read fuse high bits
0101 1000 0000 1000
xxxx xxxx oooo oooo
Read fuse high bits. “0” = programmed,
for details.
Read extended fuse bits
0101 0000 0000 1000
xxxx xxxx oooo oooo
Read extended fuse bits. “0” = programmed,
“1” = unprogrammed. See
Read calibration byte
0011 1000
000x xxxx
0000 0000 oooo oooo Read calibration byte
Poll RDY/BSY
1111 0000
0000 0000
xxxx xxxx
xxxx xxxo
If o = “1”, a programming operation is still busy. Wait
until this bit returns to “0” before applying another
command.
Note:
a
= address high bits, b = address low bits, H = 0 - Low byte, 1 - High Byte, o = data out, i = data in, x = don’t care