Чаще всего на плате esp32 присутствует 4mb flash-памяти (есть платы с 8 и 16mb), и лишь около 1.25mb из них выделено под программный код.
Сразу скажу: есть способ выделить под код больше памяти, вплоть до 3.5mb.
В данной статье мы рассмотрим, как расширить память на модуле ESP32 для программного кода с помощью таблицы разделов. Мы изучим, что такое таблица разделов, назначение каждого раздела, а также как это сделать в среде PlatformIO и Arduino IDE.
Что такое таблица разделов?
Таблица разделов в ESP32 определяет структуру и размер различных логических разделов флэш-памяти. Это позволяет системе хранить и организовать необходимые данные и программные модули. Правильная настройка таблицы разделов позволяет оптимально использовать флэш-объем.
Назначение каждого раздела таблицы
- nvs: Непостоянное хранение (Non-Volatile Storage) — используется для хранения данных, которые должны сохраняться между перезагрузками устройства. Например, настройки Wi-Fi.
- otadata: Хранение данных Over-The-Air Firmware Update — этот раздел используется для хранения состояния процесса обновления прошивки 'по воздуху'.
- app0: Основной раздел для размещения пользовательского приложения. Именно в этом и аналогичных разделах вызывается программный код.
- spiffs: Используется для хранения файлов в формате SPIFFS (SPI Flash File System) — удобно для работы с файловой системой внутри устройства.
- coredump: Раздел для извлечения данных после сбоя системы — хранит дампы памяти, которые могут быть использованы для анализа ошибок и отладки.
Примеры таблиц разделов для ESP32
Таблица разделов определяет размер и расположение различных сегментов памяти:
Пример 1
# Название, Раздел, Подраздел, Адрес, Размер, Флаги nvs, data, nvs, 0x9000, 0x5000, otadata, data, ota, 0xe000, 0x2000, app0, app, ota_0, 0x10000, 0x300000, spiffs, data, spiffs, 0x310000,0xE0000, coredump, data, coredump,0x3F0000,0x10000,
Пример 2 - размер кода 3.5mb
# Название, Раздел, Подраздел, Адрес, Размер, Флаги nvs, data, nvs, 0x9000, 0x3000, app0, app, factory, 0x10000, 0x380000, spiffs, data, spiffs, 0x390000, 0x70000,
Расширение памяти в среде PlatformIO
- Откройте проект в среде PlatformIO.
- В корневом каталоге проекта найдите файл
partitions.csv
. Если его нет, создайте исходя из вышеописанных примеров. - Произведите изменения с учетом нужд вашего проекта, изменяя размеры или структуру разделов.
- Настройте файл
platformio.ini
вашего проекта, указав путь к вашемуpartitions.csv
в формате: board_build.partitions = partitions.csv. - Сохраните изменения и заново скомпилируйте проект.
Расширение памяти в Arduino IDE
- Создайте кастомный файл для таблицы разделов в формате CSV.
- Сохраните файл в директории проекта Arduino или заранее подготовленном пути на вашем диске.
- В меню Arduino IDE выберите
Tools -> Partition Scheme
, измените наCustom
и укажите путь к вашему кастомному файлу таблицы. - Скомпилируйте и загрузите проект в ESP32.
Изменение таблицы разделов для ESP32 позволяет увеличить гибкость и возможность настройки устройства под специфичные нужды. Как в среде PlatformIO, так и Arduino IDE, процесс изменения прост и может быть выполнен в несколько шагов.