24Cxx EEPROM (обновлено: 25 Feb 2023, 07:57:20)

Поддержка микросхем энергонезависимой памяти EEPROM 24Cxx.

Функция используется для хранения некоторых данных прошивки, а так же для пользовательских данных в конструкторе кода 


Микросхемы EEPROM 24Cxx используются для энергонезависимого хранения данных с максимальным количеством перезаписи до 1 млн раз,

что значительно превышает по параметрам SPI памяти, использующейся в ESP8266/ESP32.

Микросхема 24C32(4 кб) имеется на готовых платах RTC модулях  DS3231.






Даташит на 24С32/64 двухбайтовая адресация

Даташит на 24С01 по 16 однобайтовая адресация. Требуется включение опции в шестеренке

Теоретически, но пока не тестировалось должно работать и на FRAM чипах памяти (до 1 миллиарда циклов чтения/записи). Наименования микросхем содержат в начале FM, например FM24С16. Однобайтовая адресация  у 16, а у 32 и выше двухбайтовая адресация.

Расшифровка данных микросхемы:

24Cxx, где xx - количество килобит в микросхеме, например 24C32 означает, что на чипе 32 кбита, что соответствует 4 килобайтам(32/8=4).

Подключение:


1 - выбор адреса. если 1, 2 и 3 - на GND - то будет адрес 0х50, если на VCC - то будет  0х57.

2 - выбор адреса,

3 - выбор адреса,

4 - GND,

5 - SDA,

6 - SCL,

7 - GND,

8 - VCC 1.8-5v.

В зависимости от размера памяти у микросхем с однобайтовой адресацией выводы установки I2C адреса могут не использоваться.

Зарезервированные ячейки для опций прошивки

0-15 - счетчики (работа с прерываниями). 0, 4, 8, 12 - номера ячеек соответствуют номерам счетчиков 1, 2, 3, 4.

с 16  - переменные Interpreterа. Размер занимаемого места зависит от установленного количества переменных в шестеренке Interpreterа. На каждую переменную приходится 4 байта.

Сохранение значений происходит только при изменении.

Чтение и запись через GET запросы

Чтение:

[IP]/configeeprom?read=режим_отображения&adr=адрес&len=длина

режим_отображения -  texthexuint32 (4 байта), uint16 (2 байта), uint8 (1 байт).

адрес - это адрес ячейки памяти, учитывайте длину данных для расчета хранения следующего значения.

длина - длина данных, требуется только для hex и text режима отображения. text обрезается и выводится до кода окончания строки (0х00)


Запись:

[IP]/configeeprom?write=режим_отображения&adr=адрес&data=значение

Все параметры аналогичны чтению, но необходимо указывать значение в соответствующем формате. Указывать длину не требуется.


Пример записи и чтения текста:

http://192.168.1.248/configeeprom?write=text&adr=100&data=testmsg

http://192.168.1.248/configeeprom?read=text&adr=100&len=100


Пример записи и чтение hex:

http://192.168.1.248/configeeprom?write=hex&adr=100&data=AA112233

http://192.168.1.248/configeeprom?read=hex&adr=100&len=4


Пример чтение и записи чисел:

http://192.168.1.248/configeeprom?write=uint32&adr=100&data=678999

http://192.168.1.248/configeeprom?read=uint32&adr=100

Аналогично пишутся и читаются и uint8 и uint16.


Чтение и запись через конструктор кода

По порядку передаются следующие параметры: i2c адрес, адрес ячейки, uint8_t массив, длина данных

Чтение:

read_24cxx(i2c_адрес,адрес,массив,длина);

Запись:

write_24cxx (i2c_адрес, адрес, массив, длина);


Пример чтения и записи uint32 чисел:

Пишем переменную dataint:  uint32_t dataint=5555; write_24cxx(0x57,116,(uint8_t*)&dataint,4);

Читаем переменную dataint: uint32_t dataint; read_24cxx(0x57,116,(uint8_t*)&dataint,4); 

Аналогично пишутся и читаются и uint8_t и uint16_t, но указываем соответствующую длину 1 или 2 байта