Поддержка микросхем энергонезависимой памяти 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 байта.
Сохранение значений происходит только при изменении.
[IP]/configeeprom?read=режим_отображения&adr=адрес&len=длина
режим_отображения - text, hex, uint32 (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
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.
read_24cxx(i2c_адрес,адрес,массив,длина);
write_24cxx (i2c_адрес, адрес, массив, длина);
Пишем переменную 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 байта