PlatformIO ESP32: генерация полного образа памяти для прошивки Печать
Добавил(а) microsin   

Проект, компилируемый под управлением PlatformIO-плагина VScode для ESP32, сохраняет конечный двоичный код в отдельных файлах для загрузчика, приложения, таблицы разделов и других файлов.

[PlatformIO]

Например, образ flash-памяти может состоять из следующих файлов:

Файл Смещение Описание
bootloader.bin 0x1000 Двоичный код загрузчика.
partitions.bin 0x8000 Таблица разделов FLASH.
boot_app0.bin 0xe000 Не нашел, для чего нужен этот файл. Некоторая информация есть в статье [2].
firmware.bin 0x10000 Двоичный код приложения.

Информация этой таблицы находится в файле idedata.json проекта (этот файл присутствует в каталоге .pio/build/esp32dev/). Информация закодирована в объектах JSON примерно в таком виде:

{"flash_images": [
{"offset": "0x1000", "path": "./.pio/build/esp32dev/bootloader.bin"},
{"offset": "0x8000", "path": "./.pio/build/esp32dev/partitions.bin"},
{"offset": "0xe000", "path": "/.platformio/packages/framework-arduinoespressif32/tools/partitions/boot_app0.bin"} ],
"application_offset": "0x10000"}

В документации esptool [1] описывается, как с помощью команды merge-bin можно сгенерировать из этих файлов один общий файл образа merged-flash.bin, который впоследствии прошивается в память чипа:

$ esptool.py --chip ESP32 merge-bin -o merged-flash.bin\
 --flash-mode dio --flash-size 4MB\
 0x1000 bootloader.bin\
 0x8000 partitions.bin\
 0x10000 firmware.bin\
 0xE000 boot_app0.bin

[ESP-IDF]

Если у вас используется веб-сервер, построенный на платформе ESP-IDF, на котором веб-странички берутся из flash-раздела www, то у вас может быть такой файл таблицы разделов partitions_example.csv (например, в проекте микроконтроллера ESP32-C3):

# Name,   Type, SubType, Offset,  Size, Flags
nvs,      data, nvs,     0x9000,  0x6000,
phy_init, data, phy,     0xf000,  0x1000,
factory,  app,  factory, 0x10000, 0x110000,
www,      data, spiffs,  ,        256K,
storage,  data, fat,     ,        528K,

В этом случае полный файл прошивки формируется следующим образом (запуск из корневого каталога проекта):

esptool.py --chip esp32c3 merge_bin \
  --flash_mode dio --flash_freq 80m --flash_size 4MB \
  0x0 ./build/bootloader/bootloader.bin \
  0x10000 ./build/rterm.bin \
  0x8000 ./build/partition_table/partition-table.bin \
  0x120000 ./build/www.bin \
  -o ./bin/merged-flash.bin

Проверка полного образа прошивки может быть проведена следующим образом.

Стирание памяти:

esptool.py --port /dev/ttyACM0 --chip esp32c3 erase_flash

Прошивка, новый синтаксис esptool:

esptool.py --port /dev/ttyACM0 --chip esp32c3 --flash_mode dio \
  --flash_freq 80m --flash_size 4MB \
  write_flash 0x0 bin/merged-flash.bin

Прошивка, старый синтаксис esptool (для esptool.py v4.7.0):

esptool.py --port /dev/ttyACM0 --chip esp32c3 write_flash \
  -fm dio -ff 80m -fs 4MB 0x0 bin/merged-flash.bin

[Ссылки]

1. esptool: Merge Binaries for Flashing.
2. No need of boot_app0.bin flashing since many years site:openmqttgateway.com.