• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено Пример записи и чтения память(flash)

de1m

New member
Код:
static void ICACHE_FLASH_ATTR test() {
   os_printf("SDK version:%s\n", system_get_sdk_version());
    struct wConf
    {
       char ssid[32];
       char passwd[64];
    };
    struct wConf wifiApConf;
    char const ssid_str[32] = "CO2";
    char const pass_str[64] = "co2passwd";
    os_memcpy(wifiApConf.ssid, &ssid_str, sizeof (ssid_str));
    os_memcpy(wifiApConf.passwd, &pass_str, sizeof (pass_str));

    struct wConf ssidAp;
    int i = spi_flash_erase_sector(0x8c);
    os_printf("spi_flash_erase_sector: %d\n", i);
    int o = spi_flash_write(0x8c000, (uint32 *)&wifiApConf, sizeof(wifiApConf));
    os_printf("spi_flash_write: %d\n", o);
    int p = spi_flash_read(0x8c000, (uint32 *)&ssidAp, sizeof(ssidAp));
    os_printf("spi_flash_read: %d\n", p);
    os_printf("result ssid: %s\n", ssidAp.ssid);
    os_printf("result password: %s\n", ssidAp.passwd);
}
Проблему с перезагрузкой я походу решил, пример заработал, только когда я адрес сменил с "0х8с" на "0х7с"

Собственно у меня ещё есть вопрос, я как-то не до конца понимаю, сколько места я могу использовать и и какие адреса у этих мест. Я использую esp12e c 4МБ места, в принципе я туда довольно таки много записать смогу.

Подскажите что читать и куда смотреть, пдф я почитал, но там тоже не всё ясно(может быть только мне не ясно)
 

Garmin

Member
У вас при прошивке отображаются адреса записи?
У меня пишет адрес и процент записи при target Flash
Оттуда и пляшу. Хотя есть программа чтения ID флешки и определения размера, я собирался писать в конце флеша перед пользовательскими настройками, но что-то не срослось. Сейчас пишу в дырку между бинами.
 
Последнее редактирование:

de1m

New member
Оттуда и пляшу. Хотя есть программа чтения ID флешки и определения размера, я собирался писать в конце флеша перед пользовательскими настройками, но что-то не срослось. Сейчас пишу в дырку между бинами.
Вот тут нашел свою память - Winbond W25Q32BV, ну и даташит для неё тоже не проблема найти. Но как-то мне это сильно не помогает. Если посмотерть AT прошику, то последний "blank.bin" пишется с адреса 0x7e000 и занимает 4KБ, то есть идёт до 0x7F000, потом до esp_init_data 0x3fc000 получается пусто и я могу теоретически что-то писать, но если я что-то пишу по адресу 0х8С000, то данные пишутся и читаются, но чип уходит в ребут.
Сейчас я записал данные немного подальше 1с0*4096 = 1835008, вроде работает.

Можно посчитать(с запасом) и начать писать данные после первых 800КБ - (800*1024)/4096 = 200 = 0xC8

Но это конечно на esp12, где память целых 4МБ и можно с 800КБ начать. В версиях помладше (с 512КБ), там надо более точнее считать, но я думаю можно тупо вместо "blank.bin" писать, во всяком случае у меня работало.
 

Garmin

Member
У меня первый файл называется 0x00000.bin, пишется с адреса 0000 и имеет длину 38 кБайт, а второй файл 0x10000.bin пишется с адреса 10000 и имеет длину 254 кБайт
Я взял сектор 0x0D, это адрес 0xD000, и пишу туда. Это дырка между двумя записями во флеш (user data). Как я говорил, у меня ESP-12 с 1Мбайтом памяти, и вначале я использовал сектор 0xFF8. Но такой адрес (может по совсем другой причине) вызывал ошибку записи. Я остановился на секторе 0x00D и всё работает.
 

de1m

New member
Я помечу тему как "Решено". Я забыл написать ещё один момент, при прошивке надо указывать сколько память и метод записи (если я правильно понял) если этого не указывать, то запись всегда происходит с ошибкой.
Возможно это надо указывать только если используется "esptool". В общем это выгдит вот так для модели с 4МБ памяти:
esptool --port /dev/ttyUSB0 write_flash 0x00000 workspace/esp-hello-world/firmware/0x00000.bin 0x40000 workspace/esp-hello-world/firmware/0x40000.bin -fm dio -fs 32m
 
Сверху Снизу