Arduino

и не только...

Instagram TikTok VK

Как расширить память под прошивку на esp32

Чаще всего на плате 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

  1. Откройте проект в среде PlatformIO.
  2. В корневом каталоге проекта найдите файл partitions.csv. Если его нет, создайте исходя из вышеописанных примеров.
  3. Произведите изменения с учетом нужд вашего проекта, изменяя размеры или структуру разделов.
  4. Настройте файл platformio.ini вашего проекта, указав путь к вашему partitions.csv в формате: board_build.partitions = partitions.csv.
  5. Сохраните изменения и заново скомпилируйте проект.

Расширение памяти в Arduino IDE

  1. Создайте кастомный файл для таблицы разделов в формате CSV.
  2. Сохраните файл в директории проекта Arduino или заранее подготовленном пути на вашем диске.
  3. В меню Arduino IDE выберите Tools -> Partition Scheme, измените на Custom и укажите путь к вашему кастомному файлу таблицы.
  4. Скомпилируйте и загрузите проект в ESP32.

Изменение таблицы разделов для ESP32 позволяет увеличить гибкость и возможность настройки устройства под специфичные нужды. Как в среде PlatformIO, так и Arduino IDE, процесс изменения прост и может быть выполнен в несколько шагов.