|
Проект, компилируемый под управлением 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. |