ESP32之esptool.py 常用快捷命令

一条命令搞定芯片 ID、MAC 地址、Flash 备份与擦除,收藏这一篇就够了!

📌 前言

esptool.py 是乐鑫官方推出的 Python 工具,几乎所有玩 ESP8266 / ESP32 的朋友都离不开它。很多人只知道用 write_flash 烧录固件,却忽略了它还有一大批实用的 快捷命令:查看 Flash 型号、读取芯片 ID、备份整个 Flash、擦除指定区域......这些命令在调试、维修、数据备份时非常高效。

本文将系统介绍 esptool.py 中除 write_flash 外最常用的快捷命令,每个命令都配有实际示例和输出解读,让你快速上手。


🛠 准备工作

1. 安装 esptool.py

确保 Python 环境正常(建议 3.6+),然后执行:

复制代码
pip install esptool

验证安装:

复制代码
esptool.py --help

2. 连接开发板并确认串口号

将 ESP 开发板通过 USB 连接电脑,找到串口号:

  • WindowsCOM3, COM4 等(设备管理器查看)

注意 :执行快捷命令前,通常需要让开发板处于下载模式(按住 BOOT → 按一下 EN → 松开 BOOT)。不过大部分命令在芯片已经运行固件时也能自动复位进入下载模式,esptool 会自动处理。


📋 常用快捷命令一览表

命令 功能说明 典型输出
flash_id 读取 Flash 芯片的制造商 ID 和型号 Manufacturer: c8, Device: 4014
chip_id 读取 ESP 芯片的唯一 ID Chip ID: 0x12345678
read_mac 读取 Wi-Fi / 蓝牙 MAC 地址 MAC: 24:6F:28:AB:CD:EF
read_flash 将 Flash 内容备份到文件 生成 .bin 备份文件
erase_flash 擦除整个 Flash 芯片 无输出,成功即完成
erase_region 擦除 Flash 中指定地址区域 无输出,成功即完成
run 退出下载模式,运行 Flash 中的程序 无输出,芯片复位运行
image_info 查看固件文件内部信息(无需连接硬件) 固件入口点、段信息等
read_mem 读取指定内存地址的值(高级) 0x3ff4404c = 0x00000001
dump_mem 将一段内存内容保存为文件 生成内存镜像文件

下面我们逐一详解。

注意:如果命令不可用:

复制代码
esptool.py --port COM3 flash_id

可以用这种命令:

复制代码
python -m esptool --port COM3 flash_id

只需要将esptool.py替换成python -m esptool。下同。


1️⃣ flash_id -- 查看 Flash 芯片信息

用途:识别开发板上 Flash 的厂商和型号,判断容量和是否支持 Quad I/O 等。

命令

复制代码
esptool.py --port COM3 flash_id

示例输出

复制代码
Manufacturer: c8
Device: 4014
Detected flash size: 4MB

其中 Manufacturer 编码对应厂商(如 c8 = GigaDevice,ef = Winbond),Device 表示具体型号。通过查表可知道 Flash 的真实容量和性能。

常用场景 :怀疑 Flash 损坏、确认芯片是否为假冒、判断能否使用 dio/qio 模式。


2️⃣ chip_id -- 读取芯片唯一标识

用途:获取 ESP32/ESP8266 芯片的硬件 ID,常用于生成设备序列号、授权验证等。

命令

复制代码
esptool.py --port COM3 chip_id

示例输出

复制代码
Chip ID: 0x12345678

注意:ESP32 的 Chip ID 来源于 MAC 地址的哈希,ESP8266 则为芯片内部唯一 ID。

常见问题 :如果提示 Invalid chip id,可能是接线不良或芯片未进入下载模式。


3️⃣ read_mac -- 获取 MAC 地址

用途:读取 Wi-Fi 和蓝牙的 MAC 地址(ESP32 有两个 MAC,命令会一并显示)。

命令

复制代码
esptool.py --port COM3 read_mac

示例输出(ESP32):

复制代码
MAC: 24:6f:28:ab:cd:ef
MAC (Bluetooth): 24:6f:28:ab:cd:f0

小技巧:很多 IoT 平台需要填入 MAC 地址进行设备注册,用此命令最准确。


4️⃣ read_flash -- 备份整个 Flash 或指定区域

用途:将 Flash 内容读取出来保存为文件,可用于备份原厂固件、分析文件系统、恢复变砖设备。

命令格式

复制代码
esptool.py --port COM3 read_flash <起始地址> <读取大小(字节)> <输出文件>

示例 1:备份整个 Flash(以 4MB 为例)

复制代码
esptool.py --port COM3 read_flash 0x0 0x400000 backup_4MB.bin
  • 0x0:起始地址

  • 0x400000:4MB 的十六进制表示(4 * 1024 * 1024 = 4194304 = 0x400000)

示例 2:只备份分区表(通常位于 0x8000,大小 0x1000)

复制代码
esptool.py --port COM3 read_flash 0x8000 0x1000 partition_table.bin

示例 3:备份 MicroPython 文件系统(例如起始 0x200000,大小 1MB)

复制代码
esptool.py --port COM3 read_flash 0x200000 0x100000 filesystem.bin

注意 :读取大容量 Flash 时间较长,请耐心等待。建议用 --baud 921600 提高速度。


5️⃣ erase_flash -- 全片擦除

用途:彻底清空 Flash 所有数据。当固件出现奇怪问题、或需要刷入全新系统时,先擦除可以避免残留配置干扰。

命令

复制代码
esptool.py --port COM3 erase_flash

执行过程

复制代码
Erasing flash (this may take a while)...
Chip erase completed successfully.

⚠️ 警告:此操作不可逆!会清除校准数据、WiFi 配置、设备证书等。擦除后必须重新烧录完整固件。


6️⃣ erase_region -- 指定区域擦除

用途:只擦除 Flash 中的某一段,保留其他数据。例如只清除用户设置区,而不动引导加载程序。

命令格式

复制代码
esptool.py --port COM3 erase_region <起始地址> <大小(字节)>

示例:擦除地址 0x10000 开始的 0x20000 字节(通常为应用程序区)

复制代码
.py --port COM3 erase_region 0x10000 0x20000

注意:擦除的单位必须按扇区对齐(通常 4096 字节),否则命令会报错。


7️⃣ run -- 运行 Flash 中的程序

用途:让芯片退出下载模式,复位并执行 Flash 中已有的固件。

命令

复制代码
esptool.py --port COM3 run

执行后,你会看到串口打印出固件启动日志(如果连接了串口监视器)。这个命令常用于烧录完成后验证设备是否正常启动,而不用重新上电。


8️⃣ image_info -- 查看固件文件详情(离线命令)

用途 :无需连接硬件,直接分析一个 .bin 固件文件的内部结构,比如入口地址、段大小、校验和等。

命令

复制代码
esptool.py image_info my_firmware.bin

示例输出

复制代码
Image version: 1
Entry point: 0x400800a4
Segments:
  Segment 1: addr 0x1000, size 0x6a4c
  Segment 2: addr 0x2000, size 0x1234
...
Checksum: 0x88 (valid)

用途:判断固件是否损坏、确认编译是否正确、检查固件类型(ESP8266 或 ESP32)。


9️⃣ read_mem & dump_mem -- 高级内存调试

这两个命令属于进阶功能,用于调试底层硬件或分析芯片运行状态。

read_mem:读取单个 32 位内存地址的值

复制代码
esptool.py --port COM3 read_mem 0x3FF4404C

输出类似:0x3ff4404c = 0x00000001

dump_mem:将一段内存区域保存为文件

复制代码
esptool.py --port COM3 dump_mem 0x3FF44000 0x1000 mem_dump.bin

这会把 0x3FF44000 开始的 4096 字节保存下来,可用于分析堆栈或外设寄存器。


🧰 实用技巧:批量操作与提速

1. 提高波特率

绝大多数命令都支持 -b 参数:

复制代码
esptool.py --port COM3 -b 921600 flash_id

read_flasherase_flash 速度也会明显提升。

2. 将常用端口设为环境变量

在命令行中设置:

  • Windows (cmd)set ESPTOOL_PORT=COM3

之后可省略 --port 参数,直接写 esptool.py flash_id

3. 自动进入下载模式

有些开发板不支持自动下载电路,如果连接失败,请手动操作:按住 BOOT → 短按 EN → 松开 BOOT 再运行命令。


🐛 常见错误及解决方法

错误信息 可能原因 解决方法
Failed to connect 串口号错误、驱动未装、未进入下载模式 检查设备管理器,手动进入下载模式
Permission denied (Linux) 当前用户无串口访问权限 sudo usermod -a -G dialout $USER 后重启
Read timeout 波特率过高或线路不稳定 降低波特率(如 -b 115200
Invalid head of packet 芯片未正确复位 按一下 EN 键重试
Erase region not aligned 地址未按扇区(4KB)对齐 起始地址和长度必须是 4096 的倍数

📚 总结

esptool.py 的快捷命令虽然简单,却能解决开发中的许多实际问题:

  • flash_id / chip_id / read_mac 快速获取硬件信息;

  • read_flash 备份原厂固件,防止变砖;

  • erase_flash / erase_region 清除异常配置;

  • run 无需重新上电即可测试固件;

  • image_info 离线分析固件文件。

掌握这些命令,你在调试 ESP 设备时会更加得心应手。如果你还有想了解的命令或技巧,欢迎在评论区留言讨论!

相关推荐
NULL指向我2 小时前
TMS320F28379D笔记1:主控-从核双核架构认识
笔记·单片机
sweetone2 小时前
用一个电阻及一段胶带修复 VORWERK (福维克) THERMOMIX(美善品) TM5-1食品料理机 不工作故障
经验分享·单片机·嵌入式硬件
星宇笔记2 小时前
我做了一个本地网页版嵌入式调试工具:支持 Serial / TCP / UDP、实时曲线、HEX 发送
单片机·嵌入式硬件·网络协议·tcp/ip·udp·开源软件
时空自由民.2 小时前
显示屏关键参数
单片机
LS_learner2 小时前
DDRPHY、DDRPHYIO、DDR颗粒三者的关系以及带宽增大对三者功耗的影响
嵌入式硬件
Fang_pi_dai_zhi3 小时前
物联网onenet的token算法
单片机·物联网
时空自由民.3 小时前
ST7701和ST7701S区别
单片机
菠萝地亚狂想曲3 小时前
FreeRTOS heap4
c语言·stm32·嵌入式开发
The Mr.Nobody3 小时前
基于STM32F407的 TFTP Server
arm开发·stm32·嵌入式硬件