logo
+7 (495) 997-37-74
Москва, ул.Международная, 15





08.09.2019

Увеличение памяти ESP32

( ESP32 )

Увеличение памяти ESP32

Если вы занимаетесь программированием ESP32 в Arduino IDE, то могли столкнуться с проблемой нехватки памяти для скетча.

У нас возникла подобная проблема, когда мы создали проект с широким функционалом и задействовали в нём беспроводные каналы связи Wi-Fi и Bluetooth.

У нас встал вопрос: почему из 4 МБ памяти нам доступно меньше половины? Разгадка заключается в разметке памяти ESP32.

Для того, чтобы изменить разметку по умолчанию, нужно найти на компьютере папку

<LOCATION_OF_ARDUINO_ESP32>/tools/partitions

и создать в ней новый файл, например с именем max.csv. Далее копируем туда следующее содержимое:

# Name,   Type, SubType, Offset,  Size, Flags
nvs,      data, nvs,     0x9000,  0x5000,
otadata,  data, ota,     0xe000,  0x2000,
app0,     app,  ota_0,   0x10000, 0x1E0000,
app1,     app,  ota_1,   0x1F0000,0x1E0000,
eeprom,   data, 0x99,    0x3F0000,0x1000,
spiffs,   data, spiffs,  0x3F1000,0xF000,

Значение 0x1E0000 говорит компилятору, что в нашем распоряжении теперь 1966080 байт флеш-памяти для скетча. Далее нам необходимо найти файл

<LOCATION_OF_ARDUINO_ESP32>/boards.txt

и внести исправления в него. Сделайте копию описания платы, для которой вы хотите изменить размер памяти. В этом примере мы скопировали модуль ESP32 Dev и переименовали все вхождения «esp32» в «esp32max».

Было:

esp32.name=ESP32 Dev Module
...
esp32.upload.maximum_size=1310720
...
esp32.build.partitions=default
...

Стало:

esp32max.name=ESP32 Dev Max
...
esp32max.upload.maximum_size=1966080
...
esp32max.build.partitions=max
...

Далее нужно сохранить изменения, перезапустить среду разработки Arduino IDE и выбрать новую плату ESP32 Dev Module Max.

После компиляции кода мы увидим:

Archiving built core (caching) in: C:\Users\BeeGee\AppData\Local\Temp\arduino_cache_147130\core\core_espressif_esp32_esp32max_FlashMode_qio,FlashFreq_80,FlashSize_4M,UploadSpeed_921600,DebugLevel_none_af83d5f1a3fa262478237a470cbae092.a
Sketch uses 1504054 bytes (79%) of program storage space. Maximum is 1966080 bytes.
Global variables use 70308 bytes (23%) of dynamic memory, leaving 224604 bytes for local variables. Maximum is 294912 bytes.

Таким образом, проблема с памятью решена. Но это не предел! Есть возможность еще больше расширить память.

# Name,   Type, SubType, Offset,  Size, Flags
nvs,      data, nvs,     0x9000,  0x5000,
otadata,  data, ota,     0xe000,  0x2000,
app0,     app,  ota_0,   0x10000, 0x3С0000,
eeprom,   data, 0x99,    0x3F0000,0x1000,
spiffs,   data, spiffs,  0x3F1000,0xF000,

Это позволит получить для программы 3932160 байт памяти, но этот вариант мы еще не проверяли на практике.