AVR Internal EEPROM
EEPROM은 전기적 신호를 통해 데이터를 지우고 저장할 수 있는 메모리입니다. ATmega328p의 경우 1 KB 사이즈의 EEPROM을 내장하고 있습니다. 비휘발성 메모리이므로 전원이 인가되지 않아도 데이터를 기억하고 있습니다. 설정을 위해 기억하고 있어야 하는 데이터를 저장할 때 주로 쓰입니다.
It is organized as a separate data space, in which single bytes can be read and written. The EEPROM has an endurance of at least 100,000 write/erase cycles
쓰기의 경우 100,000 번으로 횟수가 제한됩니다. 데이터를 저장할 때, 지우고 저장하는 것(write) 보다 저장된 값을 확인하고 확인된 값과 비교하여 다른 경우에만 지우고 저장하는 것(update)을 권장합니다.
<avr/eeprom.h>
read/update
eeprom_update_word((uint16_t *)0, (uint16_t)0x1234);
uint16_t var = eeprom_read_word((uint16_t *)0);
eeprom_update_word((uint16_t *)0, (uint16_t)-1234);
int16_t var = eeprom_read_word((uint16_t *)0);