一、准备说明

本文记录 ESP32-S3 + 16MB Flash 项目中,使用 flash_download_tool_3.9.5 合并 Arduino 编译固件并烧录的完整流程,适用于 LVGL 等 ESP32-S3 项目的批量烧录场景。

编译文件说明

使用 Arduino IDE 编译 ESP32-S3 项目后,会生成 3 个核心文件:

  • 文件名.ino.bootloader.bin:二级引导程序(系统引导启动入口)
  • 文件名.ino.partitions.bin:分区表(定义 Flash 空间分配)
  • 文件名.ino.bin:主应用固件(你的主程序)

二、关键配置(ESP32-S3 16MB Flash 专用)

1. 核心烧录地址(已验证)

ESP32-S3 的 bootloader 必须烧录到 Flash 起始地址 0x0,而非 ESP32 通用的 0x1000,否则会启动失败。正确地址如下:

表格

文件烧录地址
bootloader.bin0x0
partitions.bin0x8000
文件名.ino.bin0x10000

2. Flash 参数配置

  • SPI SPEED40MHz(与硬件晶振匹配,工具自动检测为 40MHz)
  • SPI MODEDIO(兼容性最好的通用模式)
  • FLASH SIZE16MB(工具自动识别为 QUAD;16MB
  • 勾选 DoNotChgBin:保持固件原始参数,避免工具修改 SPI 配置

三、步骤 1:多文件烧录(验证固件有效性)

先直接按照地址烧录 3 个文件,确认固件能正常运行,再进行合并操作。

  1. 打开 ESP32S3 FLASH DOWNLOAD TOOL V3.9.5,左上角芯片类型选择 ESP32S3
  2. SPIFlashConfig 区域,按上面的参数配置 SPI 选项。
  3. Download PathConfig 区域,添加 3 个文件并填写地址:
    • 第 1 行:选择 文件名.ino.bootloader.bin,地址填 0,勾选✅
    • 第 2 行:选择 文件名.ino.partitions.bin,地址填 0x8000,勾选✅
    • 第 3 行:选择 文件名.ino.bin,地址填 0x10000,勾选✅
  4. 下方 COM 选择你的串口(如 COM24),波特率保持默认 115200
  5. 点击 START 按钮,等待界面显示 FINISH 完成,此时开发板会自动重启,验证你的程序是否正常运行。


四、步骤 2:合并为单个固件 target.bin

确认多文件烧录正常后,将 3 个文件合并为单个固件,方便批量烧录。

  1. 保持步骤 1 中的文件和地址配置不变,全部勾选。
  2. 点击工具中间的 CombineBin 按钮。
  3. 在弹出的窗口中,选择合并文件的保存路径(如 download_tool_3.9.5\combine\target.bin),点击保存,一般会自动保存到此目录。
  4. 工具会自动按地址偏移,将 3 个文件合并为一个完整的 target.bin 文件。


五、步骤 3:烧录合并后的单个固件

合并完成后,直接烧录单个 target.bin,一次性完成所有分区写入。

  1. 取消步骤 1 中 3 个文件的勾选,清空所有行。
  2. Download PathConfig 区域添加一行:
    • 文件路径:选择合并好的 target.bin
    • 地址填 0,勾选✅
  3. 保持 SPI 配置和串口设置不变,点击 START 按钮。
  4. 等待烧录完成,开发板会自动重启,效果与分开烧录完全一致。

六、避坑指南

  1. bootloader 启动失败:ESP32-S3 必须将 bootloader.bin 烧录到 0x0,不要直接套用 ESP32 通用的 0x1000 地址。
  2. 烧录后程序不运行:检查 FLASH SIZE 是否选择与硬件一致的 16MB,避免工具自动截断固件。
  3. 合并后无法烧录:保持 DoNotChgBin 勾选,防止工具修改固件的 SPI 参数。


七、总结

核心要点:

  • 地址配置:bootloader0x0,分区表放 0x8000,主程序放 0x10000
  • Flash 参数:16MB + DIO + 40MHz,保持与硬件一致
  • 先验证再合并:分开烧录正常后,再合并为单个固件,避免合并后无法排查问题

合并后的单个固件可直接用于批量生产,大幅提升烧录效率。

更多推荐