最近在做一块 ESP32S3 + DW3000 的开发板。为了方便用户刷写,打算集成 USB 转串口芯片,实现自动 ISP 功能。
之前设计 ESP32S3 + DW3000 的基站时,为了成本考虑,最终用户也不会经常需要刷写固件,如果要升级,可以 OTA 刷固件。所以没加 USB 转串口芯片,自动 ISP 功能是放在外部,板子只引出了 EN/IO0/TX/RX/GND。我使用了一个 FT232RL USB 转串口小板,再找块洞洞板焊了2个 NPN 三极管和2个10K电阻在上面,接到RTS和DTR,我自己刷写固件时就这块小板。
几年前开始玩 ESP32 的时候,买过一块 FT232RL 小板,只是其 USB 接口是 Mini USB。从 Mini USB 接口就可以大致判断出这块小板已经是很有年头了。 去年底,因为要经常刷写几块 ESP32 基站板子,所以又买了几块 FT232RL 小板,发现淘宝上这种小板好便宜,比 FT232RL 芯片的价格还要低,很怀疑板上焊的 FT232RL 是假货。
所以我就打算自己做几块专用于刷写 ESP32 的 USB 转 TTL 小板。芯片选型时,查了一下 WCH 的网站,发现 WCH 的 CH34X 产品真是丰富。
这次做 ESP32S3 + DW3000 的开发板时,又查了 WCH 的网站,发现一个芯片 CH340X,看介绍,真是个好东西。
这是 WCH 网站上的 免外围电路的单片机串口一键下载方案。

看到没,只要另加一个电阻就可以了。
所以开发板就用它了。
收到 PCB 后,先焊了一片,发现 CH340X 能被识别到,也能刷写固件,但是似乎板子不工作。用串口调试工具看了一下,发现 ESP32S3 一直处于下载模式,并没有正常启动。
又焊了两片,还是一样的问题。测量了一下,IO0 的电压接近 0V。ESP32S3 要正常启动,IO0应该是高电平才对,但电路中给 IO0 有一个 10K 的上拉电阻啊。现在是低电平,说明有一个强下拉或者直接接 GND 了。
跟 Gemini 讨论了一下,在 IO0 与 3.3V 之间再接了一个 900R 电阻,这个上拉应该非常强了。但是 IO0 的电平还是低。
Gemini 认为是 CH340X 芯片问题。芯片 5# 和 6# 之间接的 4.7K 电阻,是让芯片在上电时一个很短的时间内判断 6# 脚应该处于什么工作模式。但是因为芯片不稳定,所以上电时判断错了,6#还是作为 TNOW,而不是 DTR。
后来东搞西搞,拆掉了 IO0 的对地电容(C7 100nF)。这个对地电容一般用来保证 IO0 不受干扰。这个电容拆掉后,ESP32S3 就正常了。


3 块板,把 IO0 对地电容 C7 拆掉后,都正常工作了。
Gemini 认为是 CH340X 在上电时对 6# 检测时间很短,虽然 IO0 有上拉电阻,但是那个 100nF 电容在上电时要充电,所以 6# 在上电那一瞬间并不是高电平,因为电容充电的原因,电压有一个上升过程。因为这个电容的存在,导致芯片没有把 6# 的工作模式切换为 DTR。
最后,为了保险,重新画板子,还是使用传统电路算了,保险一点。我不希望以后用户寄板子回来找我保修。 新板子使用 CH340K,再配一个 MMDT3904 双三极管。

如果你想买一块 ESP32S3+DW3000 的开发板,可以考虑选用我设计的这款。淘宝店:https://uwbhome.taobao.com