3. EEPROM
EEPROM is a small non-volatile memory inside the microcontroller.
Unlike SRAM:
- SRAM loses data when power is removed
- EEPROM keeps data even after reset or power loss
EEPROM is commonly used to store:
- Settings
- Calibration values
- System state
EEPROM has limited write endurance, so it should only be used sparingly
EEPROM Registers
EEPROM operations are controlled using dedicated I/O registers.
EEARH:EEARL — EEPROM Address Register
Stores the memory address to be accessed.
EEDR — EEPROM Data Register
Stores the data to be written or read.
EECR — EEPROM Control Register
Controls read and write operations.
Important control bits:
| Name | Bit | Function |
|---|---|---|
| EERE | 0 | EEPROM Read Enable |
| EEWE | 1 | EEPROM Write Enable |
| EEMWE | 2 | EEPROM Host Write Enable |
EEPROM Write Operation
Writing EEPROM requires a specific sequence:
- Wait until EEWE becomes ‘0’.
- Write new EEPROM address to EEAR (optional).
- Write new EEPROM data to EEDR (optional).
- Write a logical ‘1’ to the EEMWE bit while writing a ‘0’ to EEWE in EECR.
- Within four clock cycles after setting EEMWE, write a logical ‘1’ to EEWE.
; Writes R21 to EEPROM address in 0x0052
EEPROM_write:
SBIC EECR, 1
RJMP EEPROM_write
LDI R22, hi8(0x0052)
OUT EEARH, R22
LDI R22, lo8(0x0052)
OUT EEARL, R22
OUT EEDR, R21
SBI EECR, 2
SBI EECR, 1
RET
EEPROM Read Operation
Reading EEPROM is simpler:
- Load address into EEAR
- Start read operation by setting EERE
- Read data from EEDR
; Read R21 from EEPROM address in 0x0052
EEPROM_read:
SBIC EECR, 1
RJMP EEPROM_read
LDI R22, hi8(0x0052)
OUT EEARH, R22
LDI R22, lo8(0x0052)
OUT EEARL, R22
SBI EECR, 0
IN R21, EEDR
RET
No comments to display
No comments to display