Энергонезависимая память или EEPROM хороша тем, что позволяет хранить информацию даже при полностью выключенном устройстве. Это является полезной особенностью в случаях, когда нужно сохранить, а потом в случае чего восстановить какие-либо настроечные параметры системы. Конечно, у EEPROM имеются некоторые недостатки вроде малого объема и ограниченного количества циклов записи, но она ценна именно тем, что позволяет впоследствии восстановить данные даже после полного исчезновения питания.

Радиомодули NRF24LE1 также имеют энергонезависимую память. И в этом материале будет показано, как с ней работать.
В NRF24LE1 имеется 1.5 КБ памяти EEPROM. Работа с памятью осуществляется преимущественно с помощью четырех функций, речь о которых пойдет ниже.
Функцией для записи одного байта в энергонезависимую память является lib_eeprom_byte_write(). В качестве аргумента она принимает только 8-битный адрес и один байт (8 бит) данных. Для записи ряда байтов используется функция lib_eeprom_bytes_write(). Она принимает 8-битный адрес, 8-битный указатель на поле данных и 8-битную переменную, в которой записано количество байтов для записи.
Чтение байта данных организуется с помощью функции lib_eeprom_byte_read(). Она возвращает 8 бит данных при чтении из 8-битного адреса, указанного в качестве аргумента. А несколько байтов можно прочитать, используя функцию lib_eeprom_bytes_read(). Она не возвращает какого-либо значения сама по себе, поскольку в качестве аргумента она принимает 8-битный адрес, куда нужно будет записать прочтенные данные, 8-битный указатель поля записанных в памяти байтов и 8-битную переменную, в которой записано количество байтов для чтения.
Для понимания работы энергонезависимой памяти EEPROM в NRF24LE1 продемонстрируем несложный пример. Сначала мы запишем данные в EEPROM, затем перезагрузим модуль и проверим, прочитав эти данные из EEPROM. Схема и код проекта представлены ниже.

#include "reg24le1.h"
#include "lib_eeprom.h"
#include "hal_delay.h"
void main()
{
P1DIR = 0; // настраиваем Порт 1 на выход
P1 = 0; // все линии Порта 1 в низкий лог. уровень
P1 = lib_eeprom_byte_read(0x00); // загружаем 8 бит данных из EEPROM по адресу 0x00
delay_ms(2000); // задержка 2 секунды
while(1) // бесконечный цикл
{
P10 = 0; // линия 0 Порта 1 в низкий лог. уровень
P11 = 0; // линия 1 Порта 1 в низкий лог. уровень
lib_eeprom_byte_write(0x00, P1); // записываем данные регистра P1 в EEPROM
delay_ms(2000); // задержка 2 секунды
lib_eeprom_byte_write(0x00, P1); // записываем данные регистра P1 в EEPROM
P10 = 1; // линия 0 Порта 1 в высокий лог. уровень
P11 = 0; // линия 1 Порта 1 в низкий лог. уровень
lib_eeprom_byte_write(0x00, P1); // записываем данные регистра P1 в EEPROM
delay_ms(2000); // задержка 2 секунды
P10 = 0; // линия 0 Порта 1 в низкий лог. уровень
P11 = 1; // линия 1 Порта 1 в высокий лог. уровень
lib_eeprom_byte_write(0x00, P1); // записываем данные регистра P1 в EEPROM
delay_ms(2000); // задержка 2 секунды
P10 = 1; // линия 0 Порта 1 в высокий лог. уровень
P11 = 1; // линия 1 Порта 1 в высокий лог. уровень
lib_eeprom_byte_write(0x00, P1); // записываем данные регистра P1 в EEPROM
delay_ms(2000); // задержка 2 секунды
}
}
© digitrode.ru