利用 flash_download_tool 快速部署 PlatformIO 编译的 ESP32 固件

张开发
2026/4/6 20:46:31 15 分钟阅读

分享文章

利用 flash_download_tool 快速部署 PlatformIO 编译的 ESP32 固件
1. 为什么需要 flash_download_tool 部署 ESP32 固件用 VSCode PlatformIO 开发 ESP32 项目确实很方便但当你需要把程序分享给其他人时问题就来了。每个人的开发环境配置不同直接分享源代码经常会出现各种编译错误。这时候最稳妥的办法就是直接分享编译好的二进制文件bin 文件。但 PlatformIO 默认只会生成一个 firmware.bin 文件而 ESP32 实际上需要多个 bin 文件才能正常运行。这就是 flash_download_tool 发挥作用的地方 - 它可以把所有需要的 bin 文件一次性烧录到 ESP32 中。我遇到过很多次这种情况同事拿到我的代码后编译失败最后都是通过直接分享 bin 文件解决的。2. 准备工作获取必要的工具和文件2.1 下载 flash_download_tool首先需要从乐鑫官网下载 flash_download_tool。这个工具是 ESP32 官方推荐的烧录工具支持 Windows、Linux 和 macOS 系统。下载后解压就能直接使用不需要安装。2.2 编译 PlatformIO 项目在 VSCode 中打开你的 PlatformIO 项目确保项目能够正常编译。编译成功后PlatformIO 会在项目的 .pio/build 目录下生成多个 bin 文件但默认只显示 firmware.bin 的位置。3. 获取完整的 bin 文件信息3.1 使用详细编译命令要获取所有需要的 bin 文件信息需要在 PlatformIO 终端中运行以下命令pio run -v -t upload这个命令会输出详细的编译和上传信息。关键是要连接你的 ESP32 开发板因为命令会尝试上传固件从而显示完整的 bin 文件信息。3.2 解析输出信息在命令输出中你需要找到类似这样的信息[...] Configuring upload protocol... Available ports: /dev/cu.usbserial-1410 Looking for upload port... Auto-detected: /dev/cu.usbserial-1410 Uploading .pio/build/esp32dev/firmware.bin esptool.py v3.0-dev Serial port /dev/cu.usbserial-1410 Connecting........_ Chip is ESP32-D0WDQ6 (revision 1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: 24:0a:c4:ee:ef:48 Uploading stub... Running stub... Stub running... Configuring flash size... Flash params set to 0x0220 Compressed 15872 bytes to 10319... Wrote 15872 bytes (10319 compressed) at 0x00001000 in 0.9 seconds (effective 141.1 kbit/s)... Hash of data verified. Compressed 3072 bytes to 128... Wrote 3072 bytes (128 compressed) at 0x00008000 in 0.0 seconds (effective 341.3 kbit/s)... Hash of data verified. Compressed 8192 bytes to 47... Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.0 seconds (effective 1587.8 kbit/s)... Hash of data verified. Compressed 144672 bytes to 69453... Wrote 144672 bytes (69453 compressed) at 0x00010000 in 6.1 seconds (effective 190.3 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin... [...]从输出中可以看到多个 bin 文件被上传每个文件都有对应的烧录地址。这是关键信息需要记录下来。4. 收集所有需要的 bin 文件4.1 常见的 bin 文件类型根据我的经验ESP32 项目通常需要以下 bin 文件bootloader.bin启动引导程序partitions.bin分区表文件firmware.bin主程序固件boot_app0.binOTA 相关文件如果启用了 OTA4.2 定位 bin 文件路径在 PlatformIO 的输出信息中可以找到这些 bin 文件的具体路径。它们通常位于项目的 .pio/build/{环境名称} 目录下。例如.pio/build/esp32dev/bootloader.bin.pio/build/esp32dev/partitions.bin.pio/build/esp32dev/firmware.bin建议把这些文件复制到一个单独的文件夹中方便后续使用 flash_download_tool 时快速选择。5. 使用 flash_download_tool 烧录固件5.1 配置 flash_download_tool打开 flash_download_tool首先需要选择正确的芯片类型ESP32和烧录模式通常选择Develop模式。然后按照以下步骤配置为每个 bin 文件添加一行配置指定文件路径设置正确的烧录地址从之前的输出信息中获取选择正确的 SPI 速度和模式通常保持默认即可5.2 典型配置示例以下是一个典型的配置示例文件路径烧录地址文件类型bootloader.bin0x1000bootloaderpartitions.bin0x8000datafirmware.bin0x10000app5.3 开始烧录配置完成后点击START按钮开始烧录。烧录过程中工具会显示进度和状态。如果一切正常你会看到烧录成功的提示。6. 常见问题与解决方案6.1 烧录失败的可能原因在实际使用中我遇到过几种常见的烧录失败情况烧录地址设置错误这是最常见的问题务必确保每个 bin 文件的地址与 PlatformIO 输出信息一致串口权限问题在 Linux/macOS 上可能需要给串口设备添加读写权限开发板未进入下载模式ESP32 需要按住 BOOT 按钮再按 RESET 按钮进入下载模式6.2 如何验证烧录结果烧录完成后可以通过以下方式验证观察开发板的 LED 指示灯是否按预期工作通过串口监视器查看启动日志如果程序有网络功能检查是否能正常连接网络7. 进阶技巧自动化脚本如果你经常需要烧录固件可以创建一个简单的脚本来自动完成这个过程。以下是一个示例脚本#!/bin/bash # 编译项目 pio run # 复制需要的 bin 文件到指定目录 cp .pio/build/esp32dev/bootloader.bin ./release/ cp .pio/build/esp32dev/partitions.bin ./release/ cp .pio/build/esp32dev/firmware.bin ./release/ # 使用 esptool 直接烧录 esptool.py --chip esp32 --port /dev/cu.usbserial-1410 \ --baud 921600 \ --before default_reset \ --after hard_reset write_flash \ -z --flash_mode dio \ --flash_freq 80m \ --flash_size detect \ 0x1000 release/bootloader.bin \ 0x8000 release/partitions.bin \ 0x10000 release/firmware.bin这个脚本可以节省大量时间特别适合需要频繁烧录的场景。

更多文章