ESP32 烧录问题
1.无法连接
Connecting......................................
A fatal error occurred: Failed to connect to ESP32: No serial data received.
这个表示通过串口连接esp32失败,可能存在多种原因,比如串口选择错误。
- 所选串口不是连接到esp32的串口,可以先观察已有串口再将esp32接入PC查看串口设备变化。
排查方法
连接失败应该先尝试连接串口,观察能否正常打印。
首先确定自己使用的烧录方式。
-
外置串口转usb模块烧录(一般需要手动进入下载模式)
-
使用esp32板载的串口芯片引出的usb接口烧录(一般有自动下载电路)
-
使用从esp32的usb引出的usb口,如果是jtag正常情况可以自动下载,如果是otg需要手动进入下载模式。
这种情况在esp32c3 esp32s2 等较便宜的核心板上比较常见,部分s3也可能没有板载串口芯片,同时新出的c6 h2含内置jtag可能存在从esp32的usb下载的情况。这种情况,需要esp32自身维持这个usb设备,无法在复位时保持与PC的连接,使用普通串口监视器无法查看rom打印,跳过下一步。
打开串口监视器观察rom打印
40M晶振的esp32(大部分使用40M晶振)使用115200波特率连接esp32。26Mhz晶振的esp32(比如esp32c2)使用74880波特率连接。
尝试是否能连接,比如在windows部分ch340驱动可能会冲突,可能需要重装驱动解决。
能正常连接后,按rst复位,观察rom能否正常打印,也可以排查是否是esp芯片。
当然烧录过efuse或者控制了rom打印相关引脚的电平,可能也导致按rst无打印,这个需要参考芯片数据手册排查。
尝试手动进入下载模式
如果可以正常连接,但可能由于没有自动下载电路或者使用外置的usb转串口烧录工具烧录以及另一个下载电平相关引脚电平异常,可以尝试手动进入下载模式。
此时不要断开串口监视器。
esp32的自动下载电路一般用串口芯片的RTS和DTR控制 boot引脚和 EN引脚,使得esp32在复位时读取启动模式相关引脚的电平,
判定进入下载模式,并在烧录完成之后再控制en引脚,重启进入SPI Boot模式。
正常情况,我们按住boot使得电平处于下载模式需要的电平,然后按一下rst使得esp复位,这个时候,电路正常,串口会有打印,已经启动到下载模式。
当我们正常操作进入下载模式会有如下打印。如果有这个打印,关闭串口监视器,然后进行烧录。
ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0x1 (POWERON),boot:0x3 (DOWNLOAD(USB/UART0))
waiting for download
如果确保boot引脚电平确实拉低,但复位后没有上述打印,可能存在一种情况是使用了另一个控制下载模式的引脚,使其处于不能进入下载模式的电平。
启动模式可以参考各个芯片的数据手册,定位这种问题先学会使用乐鑫官网找到对应芯片的数据手册。
-
esp32
启动模式 GPIO0 GPIO2 SPI Boot 1 任意值 下载模式 0 0
这里设计自动下载电路也只有GPIO0变化,而GPIO2默认下拉。如果你的电路拉高了GPIO2也会导致无法进入下载模式。
-
esp32s3/esp32s2
启动模式 GPIO0 GPIO46 SPI Boot 1 任意值 下载模式 0 0 这里设计自动下载电路也只有GPIO0变化,而GPIO46在复位时是弱下拉,一般不需要care。你的电路拉高了GPIO46也会导致无法进入下载模式。
-
esp32c3
启动模式 GPIO8 GPIO9 GPIO2 SPI Boot 任意值 1 1 下载模式 1 0 1 GPIO2并不控制启动模式,但官方建议上拉避免其毛刺问题。
GPIO2和GPIO8默认浮空,而GPIO9默认弱上拉。手动进入下载模式会把GPIO9下拉,但需要注意GPIO8的电平。
-
esp32c6/esp32c2/esp32h2
启动模式 GPIO8 GPIO9 SPI Boot 任意值 1 下载模式 1 0 GPIO8默认浮空,而GPIO9默认弱上拉,手动进入下载模式会把GPIO9下拉,但需要注意GPIO8的电平。
2.串口消失
很多同学使用esp32c3会遇到串口刚才可以烧录,后面串口消失了,或无法识别。如果使用esp32s3 esp32s2 esp32c6 也可能遇到这种问题。
这种情况是使用了esp32自己的usb,可能存在esp32自身程序运行故障不停复位,或者性能占用,线程调度问题,导致无法维持usb设备,或者程序占用了esp32的usb引脚。
解决办法
手动进入下载模式,可以则不会从flash加载程序,观察串口是否恢复。
操作步骤,按住boot使得电平处于下载模式需要的电平,然后按一下rst使得esp复位。
运行过程中串口消失排查方法
如果是程序不停复位问题,可以外接usb转串口模块到esp32的硬件串口0排查故障。或者使用jtag进行调试。软件故障可能存在各种原因,但有个可以快捷排查的情况是,esp32的usb引脚被占用。
- esp32s3 :GPIO19 GPIO20
- esp32s2 :GPIO19 GPIO20
- esp32c3 :GPIO18 GPIO19
- esp32c6 : GPIO12 GPIO13
- esp32h2 :GPIO26 GPIO27