ESP8266 SPI Запись и чтение в энерго независимую память
Пытаюсь разобраться с (адресами) чтением и записью в память ESP8266. Вот есть код
char copy[1000];
spi_flash_erase_sector(0x7c); //Очистка зачем она нужна непонятно но без нее не работает
spi_flash_write(0x7c000, (uint32 *)©, sizeof(copy)); //Непосредствено запись
...
char ssidAp[1000];
spi_flash_read(0x7c000, (uint32 *)&ssidAp, sizeof(ssidAp)); //Чтение
Все работает но если указываю в очистке адрес не 0x7c а 0x7c000 Как и в других местах не работает запись. Цифра вроде одинакова должна быть. В чем проблема и как исправить может кто то знает. (Хочу перевести адреса в десятичною систему, но пока не решу данный вопрос ето не возможно)
===Структурирую Ответ===
Спасибо ответу разобраться Все заработало как нужно.
7C000 = 507904 (Байта)
7C = 124 (Просто Номер)
Размер сектора в байтах = 4096
Байт с которого начинается запись = 507904 Номер сектора который будит стерт = 124
Получилось начальный сектор с которого начинаться стирание = Номер * Размер = 124 * 4096;
В таком случаи с в десятичной системе это будит так
spi_flash_erase_sector(124);
spi_flash_write(507904, (uint32 *)©, sizeof(copy));
или
int Num = 124;
spi_flash_erase_sector(Num);
spi_flash_write(Num * 4096, (uint32 *)©, sizeof(copy));
Ответы (1 шт):
spi_flash_erase_sector - просит номер сектора, а не байта.
Размер сектора 4096 == 0x1000
Сектор с адресом 0x7c000 соответсвенно имеет адрес 0x7c000 // 0x1000
Стирается до 0x7cfff - учитывай это, если хранишь какие-то данные ещё в этом секторе. Стирание требуется потому что так организованна SPI флешка. Если нужно хранить какие-то данные - лучше подпаять нанд. SPI не предназназначенна для постоянных перезаписей.