EEPROM — работа с энергонезависимой памятью (Arduino)

Arduino UNO и NANO содержат 1024 байт EEPROM – энергонезависимой памяти, в которой можно хранить данные, которые будут доступны после отключения питания.

В Arduino IDE по умолчанию уже имеется библиотека EEPROM которая позволяет проводить операции с энергонезависимой памятью.

Память EEPROM обладает гарантированным жизненным циклом 100 000 операций записи/стирания. Время затраченное на одну операцию записи в EEPROM составляет примерно 3,3 мс.

Чтение EEPROM

EEPROM.read(address)

raed (byte) — содержимое ячейки памяти, address — порядковый номер ячейки памяти.

Если ячейка памяти ни когда не перезаписывалась, то ее чтение вернет значение 255. Номер ячейки памяти начинается с 0 и заканчивается 1023 (int).

В следующем примере произведем поочередное чтение всех ячеек памяти:

#include <EEPROM.h>

int address;// начальный адрес памяти EEPROM
byte value; // значение EEPROM

void setup()
{
  Serial.begin(9600);
}
void loop()
{
  value = EEPROM.read(address); // считываем значение по текущему адресу EEPROM
  Serial.print(address);
  Serial.print(" = ");
  Serial.println(value);
  address++ ;
  if (address==1024){address=0;}
  delay(100);
}

 

Запись EEPROM

EEPROM.write(address, value)

Функция записывает один байт со значением value в EEPROM по адресу address.
address — адрес ячейки для записи (int), начинается с 0, value — значение записываемого байта (byte), от 0 до 255.

В следующем примере запишем значение 200 по адресу 0 и прочитаем ячейку памяти с адресом 0:

#include <EEPROM.h>

byte value; // значение EEPROM

void setup()
{
  Serial.begin(9600);
  EEPROM.write(0,200);// запишем значение 200 в ячейку памяти под номером 0
}
void loop()
{
  value = EEPROM.read(0); // считываем значение по текущему адресу EEPROM
  Serial.print(0);
  Serial.print(" = ");
  Serial.println(value);
  
  delay(1000);
}

Обновление EEPROM

EEPROM.update(address, value)

Функции update() аналогична write() и является предпочтительной в использовании, так как значение записывается только тогда, когда оно отличается от уже записанного. Данная функция позволяет продлить жизнь EEPROM.

Обновим значение ячейки под номером 0:

#include <EEPROM.h>

byte value; // значение EEPROM

void setup()
{
  Serial.begin(9600);
  EEPROM.update(0,100);// обновим содержимое ячейки памяти под номером 0
}
void loop()
{
  value = EEPROM.read(0); // считываем значение по текущему адресу EEPROM
  Serial.print(0);
  Serial.print(" = ");
  Serial.println(value);
  
  delay(1000);
}

Добавить комментарий

Войти с помощью: