Почему скетч ESP32 не помещается, хотя флеш-памяти 4 МБ?
Обновлено Редакция GAW
Флеш-память модуля ESP32 делится на разделы по таблице разделов. Приложение живёт в своём разделе, и Arduino IDE сравнивает размер скетча именно с ним. Для ESP32 Dev Module предел по умолчанию — 1 310 720 байт, даже если на модуле 4 МБ.
Схема по умолчанию
| Раздел | Размер | Для чего |
|---|---|---|
| nvs | 0x5000 (20 КБ) | настройки и данные Wi-Fi |
| otadata | 0x2000 (8 КБ) | какой слот загружать |
| app0 | 0x140000 (1,25 МБ) | приложение |
| app1 | 0x140000 (1,25 МБ) | второй слот для обновления по воздуху |
| spiffs | 0x160000 (1,375 МБ) | файловая система |
| coredump | 0x10000 (64 КБ) | дамп после сбоя |
Около двух третей памяти — 2,625 из 4 МБ — занимают второй слот для обновления OTA и файловая система. Если они не нужны, их место можно отдать программе.
Другие схемы для модуля 4 МБ
| Схема в меню Partition Scheme | Предел скетча | Чем платите |
|---|---|---|
| Default 4MB with spiffs | 1 310 720 байт | — |
| Minimal SPIFFS | 1 966 080 байт | SPIFFS всего 128 КБ |
| No OTA | 2 097 152 байт | нет обновления по воздуху |
| Huge APP | 3 145 728 байт | нет OTA, SPIFFS 896 КБ |
Данные — boards.txt и файлы схем ядра Arduino-ESP32. Размер SPIFFS у Huge APP — наш пересчёт: 0xE0000 байт.
Как выбрать
- Нужно обновление по Wi-Fi — Minimal SPIFFS: два слота по 1,9 МБ.
- OTA не нужна — No OTA или Huge APP, смотря сколько места нужно файлам.
- Модуль на 8 или 16 МБ — выберите в меню его объём и соответствующую схему; объём флеш-памяти модуля указан в его даташите, например у ESP32-WROOM-32E.
После смены схемы прошивайте заново целиком: адреса разделов меняются. Как устроены адреса загрузчика, таблицы и приложения, рассказано в статье «Прошивка ESP32».
Похожие вопросы
Пропадут ли данные SPIFFS при смене схемы разделов?
Скорее всего да: у разных схем раздел файловой системы начинается с другого адреса и имеет другой размер, поэтому старое содержимое окажется не на своём месте. Перед сменой схемы данные сохраняют, а после — записывают заново (наш вывод из сравнения файлов схем).
Можно ли сделать свою схему разделов в Arduino IDE?
Да. По документации Arduino-ESP32 файл partitions.csv в папке скетча автоматически заменяет встроенную схему. Смещения разделов должны быть кратны 4 КБ, а разделов приложения — 64 КБ; первый раздел начинается с 0x9000, первое приложение — с 0x10000.
Что выбрать, если нужна и большая программа, и обновление по Wi-Fi?
Схему Minimal SPIFFS: два слота по 1 966 080 байт для OTA и всего 128 КБ под файловую систему. Если модуль с флеш-памятью 8 или 16 МБ, выбирают схему для большего объёма — у схемы «8M with spiffs» на приложение отведено 3 342 336 байт.
Источники
- Espressif. arduino-esp32: boards.txt и tools/partitions/*.csv (ветка master, 2026-10-24) — ESP32 Dev Module: upload.maximum_size 1310720; default.csv — nvs 0x5000, otadata 0x2000, app0 и app1 по 0x140000, spiffs 0x160000, coredump 0x10000; huge_app — app0 0x300000 без второго слота (maximum_size 3145728); no_ota — app0 0x200000 (2097152); min_spiffs — app0 и app1 по 0x1E0000, spiffs 0x20000 (1966080)
- Espressif. Arduino-ESP32 documentation: Partition Table — схему выбирают в меню Tools → Partition Scheme; файл partitions.csv в папке скетча заменяет встроенные схемы; OTA требует двух разделов ota_x и раздела otadata 0x2000; смещения кратны 4 КБ, приложения — 64 КБ
- Espressif. ESP-IDF Programming Guide v6.1: Partition Tables (ESP32) — таблица по смещению 0x8000; сборка проверяет, что образ приложения помещается в раздел app
Нашли ошибку?
Смотрите также
- Таблица разделов ESP32Карта флеш-памяти ESP32: где приложение, NVS, OTA и данные
- OTA (обновление по воздуху)Обновление прошивки ESP32 из работающей программы по сети
- Прошивка ESP32Загрузчик ПЗУ, GPIO0 и автосброс, write-flash и адреса, ошибки esptool и питание
- ESP32-WROOM-32E: выводы модуля38 выводов: GPIO и функции, занятые и невыведенные, варианты, питание