前言
最近在使用乐鑫官方ESP32模组时,遇到了一个令人头疼的问题:更换两块模组,烧录依然失败,错误提示从 Wrong boot mode 到 Invalid head of packet,再到 Manufacturer: ff 无法识别Flash。一度怀疑买到假货,但最终发现元凶竟是底板电路设计!
本文将分享如何通过"飞线法"快速定位问题,并成功烧录。无论你是DIY玩家还是工程师,这个方法都能帮你避开90%的烧录坑。
一、典型故障现象
-
硬件是通过ESP-Prog-2,PROG 1.27 mm连接器连接ESP32模组
-
使用自己设计的底板或开发板,烧录时卡在
Connecting...超时 -
错误提示:
-
Wrong boot mode detected (0x1f/0x3f) -
Invalid head of packet (0x69) -
Failed to communicate with the flash chip -
Manufacturer: ff, Device: ffff
-
-
更换模组无效
二、为什么底板会导致烧录失败?
ESP32模组虽然内部集成了芯片和Flash,但它的Strapping引脚 (启动配置引脚)和电源完全依赖底板。底板上的任何错误设计都可能让模组"瘫痪":
| 引脚 | 功能 | 错误底板设计 |
|---|---|---|
| GPIO0 | 下载模式使能 | 没有上拉电阻、被外设拉高、按键电路错误 |
| GPIO12 | Flash电压选择(1.8V/3.3V) | 错误上拉至3.3V → 导致1.8V模式,Flash不工作 |
| GPIO2 | 启动日志/波特率 | 接LED或上拉电阻导致高电平 |
| GPIO15 | 启动日志输出 | 错误上拉 |
| 3.3V电源 | 模组供电 | 电流不足、纹波大、电容缺失 |
结论:多数烧录失败,不是模组坏了,而是底板"坑"了模组。
三、飞线法:最小系统快速验证
飞线法是指跳过底板,仅用杜邦线将模组的关键引脚直接连接到烧录器(如ESP-Prog2、USB转TTL),排除底板干扰。
3.1 所需工具
-
ESP32模组(建议焊好排针或引脚)
-
烧录器:ESP-Prog2(或任意USB转TTL,支持DTR/RTS可选)
-
杜邦线(母对母,若干)
-
10kΩ电阻(用于下拉GPIO12),最好下拉也可悬空。
-
3.3V电源(烧录器提供)
3.2 飞线接线表
将烧录器与ESP32模组按下表连接:
| ESP-Prog2 引脚 | 连接至 ESP32模组 | 作用 |
|---|---|---|
| VDD (3.3V) | 3.3V | 供电 |
| GND | GND | 共地 |
| ESP_TXD | RX (U0RXD) | 烧录器发送,模组接收 |
| ESP_RXD | TX (U0TXD) | 模组发送,烧录器接收 |
| ESP_IO0 | GPIO0 | 下载模式控制 |
| ESP_EN | EN | 复位控制 |
| 额外:GPIO12通过10kΩ电阻下拉到GND | 强制低电平 | 确保Flash工作在3.3V |
⚠️ 关键点 :GPIO12必须接地(或下拉),否则上电后会进入1.8V Flash模式,导致 Manufacturer: ff。
3.3 接线示意图(文字描述)
底板按此顺序接线是正确的,包含TX和RX按此是正确无误的,即TX就是接在TXD。
ESP-Prog-2接线是端子,直接连接即可。

3.4 烧录步骤
-
按上述接线连接好所有杜邦线。
-
打开Arduino IDE,选择正确的串口号。
-
点击上传。
-
观察IDE下方日志:
-
正常会显示
Connecting....然后识别芯片、MAC、烧录进度。 -
若失败,检查接线或手动进入下载模式(见下文)。
-
3.5 手动进入下载模式(备用)
如果自动复位失败,可以手动操作:
-
按住模组上的BOOT键(若无按键,用杜邦线短接GPIO0到GND)。
-
点按一下EN键(或短接EN到GND瞬间断开)。
-
松开BOOT键。
-
立即点击IDE上传。
四、成功标志与验证
飞线烧录成功后,你会看到类似输出:
Connecting....
Chip is ESP32-D0WD-V3 (revision v3.1)
...
Writing at 0x00010000... (100 %)
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
验证Flash通信 :运行以下命令,应正确读出Flash ID(非 ff):
python -m esptool --port COM13 flash-id
预期输出:
Manufacturer: 5e
Device: 4014
Detected flash size: 4MB
Flash voltage set by a strapping pin: 3.3V

在此补充说明一些信息:
1.如果出现MAC地址,则说明UART通讯正确,如果没出现需要检查电源、TX、RX接线。
2.如果出现MAC地址,但是Device: 内容是0000或者ffff,均是失败信息。需要检查IO2,IO12的电压。
3.如果失败,建议将通讯频率降低至最低,我的是115200进行测试。
4.Flash voltage set by a strapping pin: 3.3V此处电压应是3.3V,如果是1.8V就是IO12的引脚拉高了,需要拉低。
五、常见问题与解决方法
| 问题现象 | 可能原因 | 解决办法 |
|---|---|---|
一直 Connecting.... 无反应 |
TX/RX接反 | 交换TX和RX线 |
Wrong boot mode (0x1f) |
GPIO0未拉低 | 检查IO0线是否接好,手动进入下载模式 |
Invalid head of packet |
电源不稳或波特率太高 | 降低上传速度至115200,独立供电 |
Manufacturer: ff |
GPIO12为高电平 | 将GPIO12下拉到GND,重新上电 |
| 烧录成功但程序不运行 | GPIO0在运行时未拉高 | 检查GPIO0上拉电阻(10kΩ到3.3V) |
六、飞线成功后的下一步
飞线成功证明模组是好的,问题出在底板。你需要:
-
检查底板电路:
-
GPIO0是否有10kΩ上拉电阻?烧录时是否能被拉低?
-
GPIO12是否被错误上拉?应下拉或悬空(内部弱下拉)。
-
GPIO2、GPIO15是否符合Strapping要求?
-
3.3V电源是否足够(峰值300mA以上,电容≥10μF+0.1μF)?
-
-
对比飞线与底板差异:
-
底板是否在SPI引脚(GPIO6~11)上接了外设?这些引脚必须悬空。
-
底板是否有长走线或电容导致信号畸变?
-
-
修改底板设计后,重新焊接模组,再次验证。
七、总结
飞线法是定位硬件问题的金标准。它用最简单的方式验证模组本身是否正常,排除底板干扰。当烧录失败时,不要急于更换模组,先用飞线法试试------往往能救回"假死"的模块,节省大量时间和金钱。
记住关键三点:
-
GPIO0 烧录时必须低电平
-
GPIO12 必须低电平(3.3V Flash模式)
-
电源 必须稳定(独立供电更佳)
希望这篇教程能帮助你快速解决ESP32烧录难题。如果仍有疑问,欢迎在评论区留言交流!