目前供电部分已经设计完成,而对于数据的处理还未结束。通过Type-C的数据是USB传输协议的。与MCU使用的TTL通信协议不同。所以需要通过一颗USB转串口芯片进行转换。
通常使用CH340和CP2102。这里选择CH340。
打开CH340的数据手册,发现该芯片有很多的型号,那应该如何选择呢?
最显著的区别是引脚数量:
G/C/B:16个引脚。 T:20个引脚。 K/E/X:10个引脚。 N:8个引脚。
G型号推出时间最早,不内置时钟;C型号兼容G,内置时钟;N/K/E/B也内置时钟;B型号兼容G,内置EPROM用于配置序列号;E型号使用MSOP微小外形封装;K型号内置三只二极管用于防止独立供电时 MCU 通过 I/O 引脚对 CH340 电流倒灌,K有个0引脚,它是GND,是可选连接;T型号带有USB状态指示引脚ACT和串口发送指示引脚TNOW;N型号引脚最少,可节约PCB使用面积。
因为之前并未做过CH340的设计,通过一些模块设计发现CH340C和CH340N的使用很多。
这两款芯片都不需要外接时钟晶振。C比N多了8个引脚。分别是:7引脚NC、8引脚OUT#/DTR#、15引脚R232、13引脚DTR#、12引脚DCD#、11引脚RI#、10引脚DSR#、9印尼叫CTS#。
查阅数据手册,多出来的9~13这6个引脚是和一个叫MODEM联络的有关。7引脚是空脚,必须悬空。8引脚是MODEM 通用输出信号,软件定义, 低有效。部分批次 CH340C 可选切换为第二 DTR#,即批号 4 开头且末 3 位大于 B40,则可为 8#引脚加 4.7KΩ 下拉电阻将其改为 DTR#。
这时发现它俩的主要差别在于MODEM联络。
调制解调器(英语:Modem,modulator-demodulator的英文缩写)是一个将数字信号调变到模拟信号上进行传输,并解调收到的模拟信号以得到数字信号的电子设备。它的目标是产生能够方便传输的模拟信号并且能够通过解码还原原来的数字信号。根据不同的应用场合,调制解调器可以使用不同的手段来传送模拟信号,比如使用光纤,射频无线电或电话线等。
引脚 | 功能 |
VCC | 正电源输入端,支持3.3V和5V。需要外接 0.1uF 电源退耦电容 |
GND | 公共地 |
V3 | 在3.3V 电源电压时连接VCC输入外部电源,在5V电源电压时外接容量为0.1uF退耦电容 |
UD+和UD- | 分别连接USB的D+和D- |
TXD | 串行数据输出端 |
RXD | 串行数据输入端 |
R232 | 用于辅助RS232使能,高电平有效。R232 为高电平时 RXD 引脚输入自动反相 |
RTS# | MODEM 联络输出信号,请求发送,低(高)有效 |
DTR# | MODEM 联络输出信号,数据终端就绪,低(高)有效 |
DCD# | MODEM 联络输入信号,载波检测,低(高)有效 |
RI# | MODEM 联络输入信号,振铃指示,低(高)有效 |
DSR# | MODEM 联络输入信号,数据装置就绪,低(高)有效 |
CTS# | MODEM 联络输入信号,清除发送,低(高)有效 |
OUT# |
MODEM 通用输出信号,软件定义,低有效。部分批次 CH340C 可选切换为第二 DTR# |
NC | no connect,空脚 |
注意:
DTR和RTS这两个MODEM联络信号是由计算机应用程序控制并定义其用途的,在软件下发点击下载按钮后,通常会给DTR拉低、RTS拉高,然后延时一段时间后,拉高DTR#,RTS#恢复到低电平。
TXD输出电平电压和RXD的电平电压与VDD供电电压一致。
前面文章中,已经将5V降压为3.3V。而后面的MCU我选的是ESP8266,他的供电电压为3.3V。所以这里的VCC为3.3V。
注意这里TXD和RXD接了二极管和电阻。他们的作用是什么呢?
在实际应用中,当CH340与MCU一同使用时,如果串口直连的双方器件有一方不需要供电工作时,要注意电流倒灌导致未供电的芯片继续工作的情况。或者是在串口下载时,当MCU需要复位以实现下载时,发现复位不成功,可能也是由于该原因造成的。
通过反向二极管的原理是:在CH340发送数据时,发送高电平时二极管截止,但是由于对端RXD默认上拉也是高电平不会有采样问题,而发送低电平时二极管导通,对端RXD接收到低电平,因此可以正常通讯。并防止了CH340的TXD发送引脚将电流倒灌到MCU。
通过限流电阻的原理是:倒灌电流让芯片由于引脚电流过大超过了芯片设计时容忍的上限,导致芯片内部电路出现异常。因此加一个限流电阻就可以了。
这里电阻和三极管的组合可以使用一个集成芯片:UMH3N。图如下。
IO0连接的是ESP8266的GPIO0端口,该引脚功能为烧录固件或者运行模式控制端口。
ESP8266如何进入下载模式呢?概括来说下面两句话:
1.在复位上升沿时,GPIO0为1,则进入FLASH运行模式,此时内部程序正常运行。
2.在复位上升沿时,GPIO0为0,则进入BOOT模式,此时可通过串口下载程序。
分析RTS和DTR是如何影响IO0与RST的:
RTS=1,DTR=1。Q1截止,Q2截止。IO0、RST悬空,默认高电平。
RTS=0,DTR=0。Q1截止,Q2截止。IO0、RST悬空,默认高电平。
RTS=0,DTR=1。Q2导通,Q1截止。RST=0,IO0=1;
RTS=1,DTR=0。Q1导通,Q2截止。RST=1,IO0=0;
这里需要知道的是RTS和DTR状态可由程序决定。
// 自动下载代码
// 这里用变量Download表明程序下载按钮的状态
if( Download ) //下载动作为真
(
DTR = 1;
RTS = 0;
// 此时RST = 0,GPIO0 = 1
// 触发复位
Delay();
DTR = 0;
RTS = 1;
// 此时RST = 1,GPIO0 = 0
// RST通常会接电容,他的跳变延迟一会儿,就检测到了GPIO = 0;
// 即上跳变发生,GPIO = 0进入烧录。
Delay();
// 延时确保跳变的发生
DTR = 1;
// RST与GPIO悬空,不受自动下载电路影响
)
DownloadCode();
// 向MCU发送烧录程序
// 下载是否完成,电脑上的软件会提示
补充一下R3与R4,作用是分压与限流。防止三极管烧坏。