STC 串口下载电路 – CH340G或CH340N USB转串口以及漏电隔离

是给一个STC15W408AS 的开发板用的,带有自动下载功能,不用每次手动断电复位。

USB接口部分

用了经典(古老)的mini-usb 接口,因为我不喜欢micro-usb,当年手机上经常坏。type-c 的又贵又复杂,体积比mini-usb 还大。而且正好手头的Arduino nano 用的也是mini-usb。一根能用的数据线也就几毛钱。

D+D- 数据线上串联的电阻说是可以提高信号质量,阻值我见过有用22、33的,似乎还有用47 的,也有干脆什么也不接。UD+UD- 连接到CH340G 的对应引脚。

这部分电路实物如图:

CH340G 外围电路


使用3V 供电时电路有所不同,参考沁恒官网上的文档。不过USB 上直接输出的就是5V,所以一般不用管。文档里明文提了右边一堆没用的引脚可以悬空,RTS# 信号用来连接到自动下载电路,也可以用DTR#

J-TXRX 插针用来引出串口信号,可以用来调试,或者把这个电路给其他板子用。

改用CH340N

感觉340G 一堆引脚完全用不上挺浪费,外置晶振配上去也有点麻烦,所以决定换成不用外置晶振的CH340N。340N 换成了SOP-8 封装,手工焊的时候说不定也会感觉轻松一点,只剩下必要的几个引脚。外围电路和CH340G 的接法差不多,只是去掉了晶振电路。

RTS# 信号引脚也还留着,所以整体上要改的地方很少。只不过据说波特率高了之后CH340N 会有问题,并不意外,大部分时候够用就行。

信号指示灯和隔离防漏电

STC 单片机使用串口编程时必须先断电然后再上电,从而进入上电复位状态。但是CH340G 的TXD 和RXD 如果直接连到单片机时会通过IO 引脚给单片机供电,虽然不足以让单片机正常工作,但是可以让单片机不能彻底断电,于是就不能进入下载状态,解决的方法就是所谓的隔离电路,这些在STC 的文档里也有。


如图,CH340G 的TXD 连接到单片机的RXD,而RXD 则连接到单片机的TXD。单片机的RXD 引脚只用来接受CH340G 输出的信号,且有内部上拉。用肖特基二极管D2 隔离后,当CH340G 的TXD 输出高电平时,二极管D2 截止,没有电流输出给单片机,从而实现隔离效果。单片机由于内部上拉,引脚读取到高电平。TXD 输出低电平时,经过D2 拉低单片机引脚,通信正常。CH340G 的RXD 引脚上就不用二级管隔离了,因为这边是单片机输出,CH340G 接收,本来也不会有什么电流,加上电阻R3 限流,保证不出意外。

用来指示信号的LED-TX 和LED-RX 阴极基本可以随便接,但是TXD 端是由CH340G 负责拉低的,所以放在二极管D2 的阴极更好一些,不然LED 点亮的时候后边还会多一个肖特基二极管的压降。一样的原因,RXD 端由于是单片机负责输出,当然LED 是由单片机驱动的,那么LED 的阴极应该连到电阻R3 靠近单片机这边。另外,这两个LED 用了共阳极接法,要注意两个LED 用相同颜色,不然LED 导通电压不一样会有问题。

关于为什么可以通过IO 引脚给单片机供电,一部分原因是和单片机的引脚保护钳位电路有关:

IO 引脚内部会用两个二极管把引脚与单片机的VCC 和地连起来,作用就是,当引脚上有高于VCC 的静电时,上面的二极管导通起到钳位作用,避免单片机内部损坏。同样,静电有可能是低于地电位的,此时下面的二极管导通钳位。这样一来,当单片机外部VCC 引脚断电时,如果IO 引脚上有高电平,就会通过二极管连接到单片机内部供电,于是造成单片机不能彻底断电。上面的隔离电路就是处理这个问题。

另一方面,除了CH340G,其他连接到IO 引脚的外部电路也可能给单片机供电,所以给IO 引脚加上限流电阻在这方面也会有作用。

自动下载

自动下载功能详细的参见另一篇STC 自动下载冷复位 – 三极管负脉冲电路,这里我把电路连接到了RTS# 信号,原理没区别。另外升级优化了一下这个电路,参见STC 纯硬件自动下载电路 V2


单片机的GND 引脚不直接接地,而是连接到C-Gnd,由MOS 管Q1 控制。遇到触发信号时,MOS 管Q1 会截止,于是单片机就会断电,之后自动下载电路会自动重新上电,让单片机完成上电复位,进入下载状态。STC15W408AS 的复位引脚默认是当IO 口来用的,不方便按照传统把复位按键连接到复位引脚,所以可以给Q1 栅极接一个按钮开关手动下拉,可以参考前一版电路里的SW-RST ,作用是手动触发单片机断电,放开按键后单片机上电复位。

另外,就像上一段说过的,IO 引脚上有供电的话可能导致单片机不能顺利断电。除了加限流电阻,还可以把可能给单片机供电的电路都连接到C-VCC,这样一来单片机断电的同时外部电路也会断,就没有问题了。不过CH340G 不能连到C-VCC,毕竟这个就是由它控制的

另外,虽然控制的是单片机的Gnd,依然有漏电的可能性,就是比如外面接了下拉电阻,或者有低电平输入之类的。使用这种自动下载电路的话上面说的二极管漏电隔离电路就不太适用了,可以直接把肖特基二极管D2 去掉,换成一个470Ω 的限流电阻,别的应该都不用变。

使用CH340N 的注意事项和电路改进

感谢评论区热心网友【滑稽】的测试反馈,CH340N 有个后备隐藏功能被这个电路意外触发了,如果上电时在RTS 引脚检测到低电平,CH340N 会枚举失败,也就是USB 连不上。

解决方案也可以参考他的设计,在RTS 上反向再串一个二极管,使RTS 引脚只能输出低电平,无法被外部拉低,之后再串联到延时电路D2 的阳极,也就是原来的UART-RTS 的输入位置;接着在这个位置加一个电阻上拉到VCC,因为不能用RTS 引脚的高电平输出给电容充电了,只能通过上拉电阻充电。

这种设计应该万无一失了,不管外面电路的状态,RTS 引脚不可能被拉低。不过我还是觉得只要上拉电阻就够了,只要电路参数取值合适,电容在上电后可以快速充电,避开CH340N 的电平检测。更多详情参考评论区。

物联沃分享整理
物联沃-IOTWORD物联网 » STC 串口下载电路 – CH340G或CH340N USB转串口以及漏电隔离

发表评论