Перейти к содержанию

EEPROM

EEPROM — энергонезависимая память, которую можно перезаписывать по одному байту. В неё сохраняют настройки, калибровку и счётчики, которые должны пережить выключение питания. Главные ограничения — конечное число циклов записи и время записи в миллисекунды.

Обновлено Редакция GAW

EEPROM (electrically erasable programmable read-only memory, электрически стираемое перепрограммируемое ПЗУ) — энергонезависимая память, в которой можно стирать и записывать отдельные байты. В отличие от флеш-памяти, которая стирается страницами или секторами, EEPROM удобна для небольших часто обновляемых данных: настроек, калибровочных коэффициентов, счётчиков моточасов.

Встроенная и внешняя EEPROM

ATmega328P (встроенная)24LC256 (внешняя, I²C)
Объём1 КБ256 Кбит (32 КБ)
Ресурсне меньше 100 000 цикловбольше 1 000 000 циклов
Время записиоколо 3,3 мс на байтдо 5 мс на страницу 64 байта
Хранение данных20 лет при 85 °C, 100 лет при 25 °C—

Значения — из даташитов Microchip DS40002061B и DS20001203W. Внешнюю EEPROM подключают по I²C и обращаются к ней по адресу I²C — подробнее на странице EEPROM с интерфейсом I²C. Встроенная EEPROM AVR — отдельное адресное пространство, к которому программа обращается через регистры EEAR, EEDR и EECR; об организации памяти — в статье об архитектуре AVR.

Как не испортить EEPROM

  • Ресурс. Каждая запись расходует ресурс ячейки. Значение, которое меняется каждую секунду, исчерпает 100 000 циклов меньше чем за 28 часов: пишите только при изменении, реже или по кругу в разные ячейки.
  • Питание. Запись при пониженном напряжении может испортить данные. Microchip рекомендует включить детектор пониженного питания, чтобы микроконтроллер находился в сбросе, пока напряжения недостаточно (DS40002061B, раздел 8.4.2).
  • Время. Запись длится миллисекунды — её не стоит выполнять в обработчиках прерываний и в критичных по времени участках программы.

Частые вопросы

Сколько раз можно записать EEPROM?

У встроенной EEPROM ATmega328P ресурс не меньше 100 000 циклов записи/стирания на ячейку, у внешней 24LC256 — больше миллиона. Флеш-память программы ATmega328P рассчитана всего на 10 000 циклов. Если записывать значение каждую секунду, 100 000 циклов закончатся меньше чем за 28 часов — поэтому часто меняющиеся данные пишут реже или распределяют по разным ячейкам.

Сколько длится запись в EEPROM?

Миллисекунды: у ATmega328P запись байта из программы — около 3,3 мс, у 24LC256 цикл записи — до 5 мс, но за один цикл можно записать страницу до 64 байт. Чтение быстрое. Пока идёт запись, микросхема 24LC256 не отвечает на шине I2C, а AVR не начнёт следующую запись в EEPROM.

Почему портятся данные в EEPROM?

Чаще всего из-за записи при пониженном напряжении питания: процессор при недостаточном напряжении может выполнить команды неверно, а сама запись требует минимального напряжения. Microchip рекомендует держать микроконтроллер в сбросе при недостаточном питании — включить детектор пониженного питания.

Источники

  1. Microchip. ATmega48A/PA/88A/PA/168A/PA/328/P Data Sheet (DS40002061B) — 8.4 — EEPROM 1 КБ, ресурс не меньше 100 000 циклов; табл. 8-2 — запись 3,3 мс; разд. 4 — хранение 20 лет при 85 °C и 100 лет при 25 °C; флеш — 10 000 циклов
  2. Microchip. 24AA256/24LC256/24FC256 Data Sheet (DS20001203W) — 256 Кбит, страница 64 байта, время записи до 5 мс, больше миллиона циклов стирания/записи

Нашли ошибку?