Семейство чипов SPI флеш-памяти от компании Winbond. Могут использоваться, как EEPROM для микроконтроллеров (более 100 000 циклов перезаписи).
Далее только ключевые моменты.
STM32 Library: https://github.com/nimaltd/w25qxx
Memory structure
Pages (256 bytes) — > Sectors (4096 bytes) -> Blocks (65536 bytes)
Read
W25qxx_ReadByte(Buf(uint8_t), Addr(0-…));
uint8_t buf[64] = {0,};
W25qxx_ReadByte(&buf[0], 0);
W25qxx_ReadByte(&buf[1], 1);
W25qxx_ReadByte(&buf[2], 2);
…
Write
Перед записью данных необходимо стереть сектор
W25qxx_EraseSector(Addr(0-…));
W25qxx_EraseSector(0);
W25qxx_EraseSector(1);
Далее записываем Байты, страницу, сектор или блок.
Буфер записи 256 байт (1 страница).
1 byte to 4 byte INTEGER conversion
Так как чтение происходит побайтно, максимальное значение однобайтного (8-битного) числа = 256. Если требуется записать или прочитать 32-разрядное число, необходимо его преобразовать из/в массив из четырех 8-байтных чисел.
Чтобы получить 32 бит целое число из 4 отдельных байтов, можно произвести следующие расчеты
TestINT32 = pbuf[0]*16777216 + pbuf[1]*65536 + pbuf[2]*256 + pbuf[3];
Для разбития 32 разрядного числа на 4 байта расчеты выглядят так
pbuf[0] = TestINT32/16777216;
pbuf[1] = TestINT32/65536;
pbuf[2] = TestINT32/256;
pbuf[3] = TestINT32-pbuf[2]*256-pbuf[1]*65536-pbuf[0]*16777216;
