最近在重构一款嵌入式项目 , 用 PlatformIO 开发 Arduino 的 ESP32 项目. 在这些嵌入式项目进入生产流程中 , 通常需要去批量烧录 , 这个时候需要去借用一些工具或者脚本去完成

本文大量参考【ESP32之旅】ESP32 PlatformIO 固件单独烧录

准备

首先代码编译 , 若成功则会在 .pio/build/{开发板}/ 目录下生成对应的编译文件

这里比较需要到的就是

  • bootloader.bin
  • firmware.bin
  • partitions.bin

这里还需要一个二级 boot 跳转文件 ,在 ESP32 SDK 安装目录下 , 参考路径

C:\Users\用户\.platformio\packages\framework-arduinoespressif32\tools\partitions\boot_app0.bin

可以将以上4个文件拷贝到一个新目录

烧录

在不清楚烧录命令配置的情况下 , 可以直接用编译器的烧录配置 . 直接 pio run -v -t upload 然后查看日志输出的命令 , 这里提出了笔者自己的命令 , 然后对应使用上面准备的文件 , 整合命令

1
esptool --chip esp32s3 --port "COM7" --baud 460800 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 8MB 0x0000 bootloader.bin 0x8000 partitions.bin 0xe000 boot_app0.bin 0x10000 firmware.bin

这里的 esptool 是需要安装 python 并且安装 esptool库

这里附上笔者的分区表

1
2
3
4
5
6
7
# Name,   Type, SubType, Offset,      Size,      Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x180000,
app1, app, ota_1, 0x190000, 0x180000,
spiffs, data, spiffs, 0x310000, 0xCE000,
coredump, data, coredump, 0x3DF000, 0x10000

因为这里固件大小约1.3M , 还需要做 OTA ,因为给两个 APP分区都是1.5M.

其它

通常在生产烧录中还有一个需求 , 就是给每台程序烧录一个唯一的序列号 . 这个时候可以通过单独划一个分区如 custom 然后将ID烧录入 custom 分区 , 然后和以上bin文件一起烧录