esptool 使用教程:ESP32 固件烧录、Flash 加密与 OTP 编程,5 个命令 esptool 是乐鑫Espressif官方维护的 ESP32 底层命令行工具ESP-IDF 与 Arduino 的烧录流程底层都调用它。但多数开发者只用到了它的write_flash烧录命令实际上它还能完成 Flash 加密、eFuse 编程、多固件合并、读回校验等操作覆盖从开发到量产的全流程。本文基于 esptool 官方文档整理 5 个常用命令的用法说明各自的适用场景与注意事项。一、安装与环境esptool 是一个 Python 包通过 pip 安装即可pipinstallesptool安装完成后可通过esptool.py或esptool命令调用。它支持 ESP8266、ESP32 以及 ESP32-S2/S3/C2/C3/C6 等全系列芯片命令基本格式为esptool.py--port串口--chip芯片型号子命令[参数]其中--chip可选esptool 通常能自动检测芯片型号--port指定串口设备Linux 下通常是/dev/ttyUSB0。二、工作原理esptool 不经过操作系统或 RTOS而是直接与芯片 ROM 中固化的 bootloader 通信。芯片上电后 ROM bootloader 最先执行通过检测 GPIO0 电平决定进入下载模式还是正常启动。下载模式下esptool 经串口发送 SLIP 编码的命令帧由 bootloader 接收执行。这意味着 esptool 运行在操作系统之前——无论 Flash 中烧录了何种固件都无法阻止其工作。只要 ROM bootloader 完好刷成砖的板子也能通过 esptool 恢复。三、5 个常用命令1. 读回校验read_flashesptool.py--port/dev/ttyUSB0 read_flash0ALL firmware_backup.bin0 ALL表示从地址 0 读到 Flash 末尾。烧录完成后用该命令读回内容与本地固件执行diff可确认烧录是否发生静默损坏。这是量产线每批次都应执行的校验步骤。2. Flash 加密burn_efuse write_flash --encrypt# 第一步生成 Flash 加密密钥并烧入 eFuse一次性、不可逆esptool.py--port/dev/ttyUSB0 burn_efuse FLASH_CRYPT_CNT# 第二步以加密模式烧录此后 Flash 内容由芯片内部透明加解密esptool.py--port/dev/ttyUSB0 write_flash--encrypt0x1000 firmware.bin启用 Flash 加密后Flash 中固件为密文外部编程器无法直接读取ESP32 内置硬件 AES 引擎负责透明解密运行时性能不受影响该操作不可逆FLASH_CRYPT_CNTeFuse 一旦烧录无法回退务必先在开发板验证流程3. 固件合并merge_binesptool.py--chipesp32 merge_bin\--outputfactory.bin\--flash_modedio--flash_size4MB\0x1000 bootloader.bin\0x8000 partition_table.bin\0x10000 app.bin量产线通常只需要单一固件文件。merge_bin将 bootloader、分区表、应用固件按地址拼合为一个文件同时固化 flash mode 与 flash size 参数产线无需再传多组参数。4. 读取芯片信息chip_id / flash_id / read_macesptool.py--port/dev/ttyUSB0 chip_id# 芯片唯一 IDesptool.py--port/dev/ttyUSB0 flash_id# Flash 厂商与容量esptool.py--port/dev/ttyUSB0 read_mac# MAC 地址这三个命令可用于来料检验一次确认芯片是否为正品、Flash 容量是否被缩减、MAC 地址段是否符合预期。5. 区域擦除erase_region# 仅擦除 OTA 数据分区保留固件与 NVSesptool.py--port/dev/ttyUSB0 erase_region 0xD000 0x2000erase_flash为全片擦除erase_region为区域擦除。WiFi 连接异常时往往是 NVS 中的配置损坏此时仅擦除 NVS 区域即可无需重刷固件。四、注意事项esptool 不是调试器它只能烧录与读取 Flash无法设置断点。调试需使用 OpenOCD GDB或 probe-rs。eFuse 操作不可逆任何burn_efuse操作前先执行esptool.py summary_efuse确认当前 eFuse 状态。Flash 加密并非银弹它防的是外部直接读 Flash无法抵御物理攻击电压毛刺、电磁分析等仍可能提取密钥。安全敏感产品应叠加 Secure Boot 与 Flash 加密两层防护。五、总结esptool 是 ESP32 开发中使用频率最高、也最常被低估的工具。多数开发者仅使用write_flash一个子命令而量产校验read_flash、固件管理merge_bin、来料检验chip_id/flash_id/read_mac、安全防护burn_efuse--encrypt等场景均有对应命令支撑。项目进入量产阶段前建议先熟悉这 5 个命令。