问题

ESP32-DevKit是设计了自动下载电路的,利用了串口的DTRRTS信号来控制ENIO0引脚以进入下载模式(尽管DTRRTS本身的设计的作用不是这样)
image.png

这样设计的好处在于:通过板载的Micro USB接口下载程序时,既不需要按复位键,也不需要按BOOT键。
但实际使用时还是需要按BOOT键才能正常进入下载模式,工科男孙老师对这个问题做了具体的理论分析,其结论是:DTR和RTS信号有一定的延时,复位后**EN**/**IO0**信号拉低时间太短导致采样为高电平。
ESP32技术规格书中的 2.4 Strapping管脚 章节中有对复位时管脚采样的说明。可见应该在**EN**信号的上升沿保持**IO0**信号稳定。

在芯片的系统复位(上电复位、RTC 看门狗复位、欠压复位)放开的过程中,Strapping 管脚对电平采样并存储到锁存器中,锁存为“0”或“1”,并一直保持到芯片掉电或关闭。

image.png

回头翻看了一下开发板的说明文档,发现了有关 C15 的提示,这说明开发板设计时其实是考虑了采样时间太短的问题,而特意设计了电容用来延长信号的上升时间,但由于存在一些BUG,在实际生产的开发板中默认将C15移除了,观察一下开发板C15确实没有焊接。
image.png

实验波形

未焊接C15

image.png
image.png
image.png

焊接C15

image.png
image.png
image.png

结论

可以看到即使焊接了C15也只是滤除了干扰信号,但是EN上升沿采样时IO0还是没来得及拉低(晚了4.7us)。亲测还是无法自动下载。