基于CH340G的一键下载

很多时候,我们并不想通过专用的下载器来给单片机烧录程序,而是希望通过串口来给单片机下载程序。下面以IAP下载时的情况为例。
利用CH340G实现程序的下载时,我们往往会遇到这样一个问题,那就是每次下载时都需要手动复位,非常麻烦,尤其是当板子离操作者有一定距离时。也有人遇到无法正常下载的情况。下面我给出一种解决方案。
基于CH340G的一键下载
图为给AVR单片机一键下载用的电路。在TXD引脚串联一个二极管是为了防止CH340G给单片机供电而使单片机不能正常断电,从而导致程序下载失败。网络标号PE0连接的是单片机的RXD。这里着重说一下DTR引脚通过一个10uF的电容连接到单片机RESET的作用。

当不加电容时或加的电容很小时(如0.1uF):
CH340G的RTS,DTR,DCD,RI,SDR,CTS都是MODEM联络信号。我没学过通信,对此一点也不了解。但是,这些引脚的电平变化肯定是有规律的,于是我用示波器测试了下载时DTR引脚电平变化情况,结果如下:
基于CH340G的一键下载
我的单片机下载bootloader后,第一次IAP下载是不需要手动复位的,第二次开始每次都要手动复位才能正常下载,原因未知。上图为第一次下载时DTR引脚的波形。在开始下载的一瞬间,波形出现一个负脉冲,并在持续一小段高电平后保持为低电平,同时程序开始下载,下载完成后DTR电平回到高电平。
下面再说说第二次下载而不手动复位时的情况。我没有截图,这里就直接描述了。从开始下载时刻起,DTR从高电平跳变为低电平并一直保持下去,等待单片机复位。如果你及时按下了复位键,程序将正常下载。如果你错过了时机,之后再按复位键,程序也不会正常下载。

所以我们现在的目标是,在下载的时间点,让单片机自动复位。故我们引入了10uF电容。电容对于上升沿和下降沿来说,由于充电需要时间,在跳变的瞬间相当于导线,而在充满电后相当于断路。电感和他相反。充电时间由时间常数决定,电容的时间常数为RC,R这里基本是固定不变的(导线及芯片内部电阻),故我们可以通过改变C来改变充电时间,从而改变低电平的时间。我的单片机是低电平复位。在下载一瞬间,DTR为低电平,VCC开始给电容充电(单片机正常工作室reset脚接的就是VCC),RESET脚的电压将随着电容充电的程度而改变。我们希望这个电压维持在低电平范围内的时间能足够大,使得单片机能完成复位。故我们希望充电时间能足够长,于是我们选择较大的电容。考虑到单片机的复位电路常用的电容就是10uF,这里我们选择10uF电容,如果还不行的话就选择更大的电容。加了10uF电容后,单片机实现了一键下载,不需要手动复位,RESET脚波形如下:
基于CH340G的一键下载
充电过程很明显,不过下载完毕后出现了一个高达8v的正脉冲,原因未知,没有对下载造成影响。