Блог
Прошивка и данные ESP32: разделы флеша и файлы
Прошивка, разделы и файлы, прячущиеся во флеше: что прошивать, куда оно ложится, как вычитать обратно. Браузерный симулятор повторяет ту же раскладку.
Как читать раздел флеша ESP32 из C?
Используйте API esp_partition: esp_partition_find_first() находит раздел по типу и метке, esp_partition_read() копирует байты — и вы читаете флеш из C без esptool. Адреса считаются от начала раздела, а не от флеша. Вопрос «как прочитать таблицу разделов esp32» обычно означает esptool.py read_flash 0x8000 0x1000 pt.bin, расшифрованный через gen_esp32part.py.
Как прошить прошивку ESP32?
Прошивка в строгом смысле — это образ приложения: esptool.py write_flash 0x10000 firmware.bin. Заметьте: 0x10000, а не 0x0 — прошивка приложения по 0x0 это классическая ошибка «молчаливого цикла перезагрузки», и я её совершал.
Как прошить BIN-файл в ESP32?
.bin — это просто прошивка в файле, так что команда та же write_flash с адресом, соответствующим содержимому файла: 0x1000 для загрузчика, 0x8000 для таблицы разделов, 0x10000 для приложения. Исключение — объединённые заводские образы из установщиков Espressif, начинающиеся с 0x0. Неверный адрес: цикл перезагрузки, а загрузка отчитается об успехе.
Как скачать файл с сервера на ESP32 в Arduino?
HTTPClient: http.begin(url), http.GET(), читаете тело. Вот как скачать файл с сервера esp32 arduino за десять строк, и тот же клиент делает POST, когда нужно обратное — как отправить данные с esp32 на сервер. Для прошивки используйте вместо этого класс Update: Update.begin(size), затем Update.writeStream(stream) безопасно ставит .bin. Классический грабли — TLS: HTTPS требует корневого сертификата; его отсутствие выглядит как проблема сети. Обычный HTTP в вашей локалке в основном работает.
Как извлечь код из ESP32?
Исходники — нет, машинный код — да. esptool.py read_flash 0x0 0x400000 dump.bin вытаскивает весь флеш, и та же команда отвечает на вопрос «как прочитать код с esp32»: байты там есть, читаемого исходника нет. Чтобы опознать образ прошивки без платы, esptool.py image_info сообщает чип и режим флеша — так определяют сборки прошивок esp32.
Есть ли у ESP32 EEPROM?
Физического EEPROM нет — он эмулируется во флеше. И EEPROM.h, и библиотека Preferences пишут в раздел NVS — небольшую область «ключ-значение» в SPI-флеше. Практический ответ: да, только платите вы выносливостью флеша вместо отдельного чипа. Хотите узнать, как очистить eeprom на esp32? Preferences.clear() делает это одним вызовом.
Что где лежит во флеше?
Раскладка по умолчанию на 4 МБ: загрузчик 0x1000, NVS 0x9000 (Wi-Fi-пароли, настройки), приложение 0x10000, файловая система данных ближе к концу. Таблица разделов по адресу 0x8000 — это карта; наша база знаний содержит полный справочник по платам.
Как сделать полный дамп флеша?
esptool.py read_flash 0x0 0x400000 backup.bin на чипе 4 МБ, с --verify для проверки целостности; восстановление — write_flash по тем же адресам. Полный дамп — единственная настоящая страховка перед экспериментальной прошивкой: я делаю его перед каждой платой, которую планирую терзать, и он уже спас две из них.
SPIFFS или LittleFS?
LittleFS: быстрее, лучше переживает пропадание питания и поставляется вместе с ядром Arduino-ESP32. SPIFFS — устаревший, но ещё нормально работает со статическими данными, и оба загружаются одним и тем же плагином Sketch Data Upload. Официальные доки туманны насчёт миграции, так что отформатируйте новую файловую систему при первом запуске и скопируйте файлы.
Можно ли обновлять прошивку по Wi-Fi?
Да — OTA. Класс Update принимает тот же .bin-поток из ответа про скачивание с сервера и пишет в раздел OTA, пока приложение работает. Это практический путь к вопросу «как получить доступ к esp32 откуда угодно»: устройство само звонит домой, вместо того чтобы вам настраивать проброс портов. app.sensbench.com проверяет этот процесс в браузере.
Проекты по этой теме запускаются прямо в бесплатном симуляторе sensbench: схема уже собрана, прошивка включена — без аккаунта и установки.