I'm using arduino-cli to program an ESP32-S2. If I compile my sketch using the default partition scheme
> arduino-cli compile -b esp32:esp32:esp32s2 sketch
a lot of space is allocated for SPIFFS and OTA, which I don't use.
Sketch uses 646558 bytes (49%) of program storage space. Maximum is 1310720 bytes.
Global variables use 39540 bytes (12%) of dynamic memory, leaving 288140 bytes for local variables. Maximum is 327680 bytes.
Thus. I'd like to use the huge_app
scheme, as defined in the boards.txt:
esp32s2.menu.PartitionScheme.huge_app=Huge APP (3MB No OTA/1MB SPIFFS)
esp32s2.menu.PartitionScheme.huge_app.build.partitions=huge_app
esp32s2.menu.PartitionScheme.huge_app.upload.maximum_size=3145728
However, selecting it doesn't have any effect:
> arduino-cli compile -b esp32:esp32:esp32s2 sketch --build-property build.partitions=huge_app
Sketch uses 646558 bytes (49%) of program storage space. Maximum is 1310720 bytes.
Global variables use 39540 bytes (12%) of dynamic memory, leaving 288140 bytes for local variables. Maximum is 327680 bytes.
Is my command line incorrect? Why is arduino-cli not using the specified partition scheme?
2 Answers 2
So, it turns out I have to add another build property:
> arduino-cli compile --build-property build.partitions=huge_app --build-property upload.maximum_size=3145728 sketch
where the upload.maximum.size
is from the boards.txt
file. Indeed, a maze of twisty little files, all alike.
An alternative solution is to append menu options to the fully qualified board name (FQBN), with the first separated by another colon (:) and the remainder separated with commas.
e.g.
arduino-cli compile -b esp32:esp32:esp32s3:PartitionScheme=huge_app,DebugLevel=verbose
The ordering doesn't matter, just match the menu section names (as key) to the subsection names (as value).
Find the entries in boards.txt from arduino-esp32, or with something like
arduino-cli board details --fqbn=esp32:esp32:esp32s3 --config-file C:\Users\tyeth\.arduinoIDE\arduino-cli.yaml
(you can add board manager urls as args but config file is easier and often already there).
--additional-urls="https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json,https://adafruit.github.io/arduino-board-index/package_adafruit_index.json,http://arduino.esp8266.com/stable/package_esp8266com_index.json,https://sandeepmistry.github.io/arduino-nRF5/package_nRF5_boards_index.json,https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json"
The other bit that threw me in the past was if using a custom build of arduino-lib-builder for esp then your FQBN begins espressif:
not esp32:
build.custom_partitions
the value is the selected partitioning from boards.txtcustom_partitions
as well. Unfortunately, it didn't help:arduino-cli compile sketch --build-property build.custom_partitions=huge_app
results inSketch uses 646558 bytes (49%) of program storage space. Maximum is 1310720 bytes.