Перейти к содержанию

Почему скетч ESP32 не помещается, хотя флеш-памяти 4 МБ?

Обновлено Редакция GAW

Флеш-память модуля ESP32 делится на разделы по таблице разделов. Приложение живёт в своём разделе, и Arduino IDE сравнивает размер скетча именно с ним. Для ESP32 Dev Module предел по умолчанию — 1 310 720 байт, даже если на модуле 4 МБ.

Схема по умолчанию

РазделРазмерДля чего
nvs0x5000 (20 КБ)настройки и данные Wi-Fi
otadata0x2000 (8 КБ)какой слот загружать
app00x140000 (1,25 МБ)приложение
app10x140000 (1,25 МБ)второй слот для обновления по воздуху
spiffs0x160000 (1,375 МБ)файловая система
coredump0x10000 (64 КБ)дамп после сбоя

Около двух третей памяти — 2,625 из 4 МБ — занимают второй слот для обновления OTA и файловая система. Если они не нужны, их место можно отдать программе.

Другие схемы для модуля 4 МБ

Схема в меню Partition SchemeПредел скетчаЧем платите
Default 4MB with spiffs1 310 720 байт—
Minimal SPIFFS1 966 080 байтSPIFFS всего 128 КБ
No OTA2 097 152 байтнет обновления по воздуху
Huge APP3 145 728 байтнет OTA, SPIFFS 896 КБ

Данные — boards.txt и файлы схем ядра Arduino-ESP32. Размер SPIFFS у Huge APP — наш пересчёт: 0xE0000 байт.

Как выбрать

  1. Нужно обновление по Wi-Fi — Minimal SPIFFS: два слота по 1,9 МБ.
  2. OTA не нужна — No OTA или Huge APP, смотря сколько места нужно файлам.
  3. Модуль на 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 байт.

Источники

  1. 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)
  2. Espressif. Arduino-ESP32 documentation: Partition Table — схему выбирают в меню Tools → Partition Scheme; файл partitions.csv в папке скетча заменяет встроенные схемы; OTA требует двух разделов ota_x и раздела otadata 0x2000; смещения кратны 4 КБ, приложения — 64 КБ
  3. Espressif. ESP-IDF Programming Guide v6.1: Partition Tables (ESP32) — таблица по смещению 0x8000; сборка проверяет, что образ приложения помещается в раздел app

Нашли ошибку?