TTL电平与RS232电平的区别

背后的故事

最近在调试全志A20的一块板子,找了个视频通话的安卓源码想在其上运行,但是一旦软件执行视频通话功能就会死掉,而在普通的手机里都能正常运行,所以就像看一下它的UART输出是怎样的,接着就去接A20的UART的。

面对实验室的条件只能说无语。没有串口线怎么搞?后来我从606拿过来两根,一根试了半天还不能用,恶心,另一根则是个锈迹斑斑的,插个杜邦线插的手疼,终于搞定电路问题后发现输出都是乱码?这个怎么理解?

原因分析

串口出现乱码可能是因为哪些原因呢?出现了乱码基本可以判断com口正确。其他可能原因如下:

  1. 驱动不对
  2. 串口和驱动的配置不对应(波特率、起始位、校验位、停止位)
  3. 串口调试助手的文字编码格式不对
  4. 数据线接触不良
  5. 电平逻辑不对

对于现在调的这块板子,驱动是全志做在系统中的,他们都是经过细心调试,而且时刻在用的工具,驱动应该没有问题,设置是按照全志提供的参数进行配置应该也没有问题。

对于串口调试助手我采用了两个,一个是友善的串口,里面没有对编码设置的情况,输出是乱码,另一个采用secureCRT,默认和utf-8都试了下,效果没有得到改善。

数据线接触不良的情况是全志的一位同事提出的,我没有遇到过这种情况,由于线比较老,不能排除这一点,但是我已经尽自己最大的努力让数据线接触良好,所以基本也可以排除。

最后就剩下一个电平逻辑不对。我为什么会怀疑这个问题呢?因为我看到SMDT论坛上说明UART的测试方法如下:

1. 先短路板子上的UART-TX和UART-RX,用ANDROID上的串口测试程序,采用自发自收的测试方式,是否能正常的数据通信
2. 再连接好TTL-RS232串口板,再短路串口板后端,再采用串口工具,同样的方式,测试是否正常
3. 再连接好外部设备,设置好波特率,串口号(一般为ttySx),测试是否正常
4.如果还是存在问题,可以先用PC来测试外部设备是否能正常通信的,如果是完全OK的,应该是设置波特率和串口号出问题,或者是232串口到外部设备这端需要把TX和RX交叉

这样就很明白问题所在。

这里有个问题:我采用RS232对接TTL为什么会产生乱码呢?

TTL与RS232的区别

我们再加上一个CMOS电平,看看下面的表格:

电平名称 输出L 输出H 输入L 输入H
TTL <0.8V >2.4V <1.2V >2.0V
RS232 +3~+15V -3~-15V +3~+15V -3~-15V
CMOS <0.1*Vcc >0.9*Vcc <0.3*Vcc >0.7*Vcc

TTL与RS232

我们先看TTL与RS232两行,现在我们A20板子上的输出是TTL电平,然后我采用RS232接口进行衔接(GND–GND | TXD–RXD | RXD–TXD),看看会出现什么结果:

TTL输出<0.8v为低电平(应该不会为负),rs232则进行检测这个电压接近于0v,这样是无效??如果ttl输出>2.4V,RS232检测这个电压最有可能为逻辑0,这样的结果也就是说RS232只能将TTL输出的高电平检测为低电平,TTL输出的低电平作为无效,这样为什么会出现乱码呢?

有两种可能:

  1. 停止位设置为0,这样可能停止,就可以正常接收乱码数据,如果都是0数据应该也比较有规律,从乱码来看,这个是不正确的。
  2. RS232将TTL <0.8V的低电平检测为RS232的高电平,这样也就是和RS232和TTL的电平完全反过来进行接受,完全乱码,这样是很有可能的,就是我的这个假设是否成立不确定。
我们通常说的UART串口的RXD、TXD等一般直接与处理器芯片的引脚相连,其为TTL电平,而RS232串口的RXD、TXD等一般需要经过电平转换(通常由Max232等芯片进行电平转换)才能接到处理器芯片的引脚上,否则这么高的电压很可能会把芯片烧坏。(事实上我就是这样接的,没有烧坏芯片,反而是出现乱码)
我们平时所用电脑的串口是RS232的,当我们在做电路工作时,应该注意下外设的串口是UART类型的还是RS232类型的,如果不匹配,应当找个转换线(通常这根转换线内有块类似于Max232的芯片做电平转换工作的),可不能盲目地将两串口相连。

TTL与CMOS

  1. 电平的上限和下限定义不一样,CMOS具有更大的抗噪区域。同是5伏供电的话,TTL一般是1.7V和3.5V的样子,CMOS一般是2.2V,2.9V的样子,不准确,仅供参考。
  2. 电流驱动能力不一样,TTL一般提供25毫安的驱动能力,而CMOS一般在10毫安左右。
  3. 需要的电流输入大小也不一样,一般ttl需要2.5毫安左右,CMOS几乎不需要电流输入。
  4. 很多器件都是兼容TTL和CMOS的,datasheet会有说明。如果不考虑速度和性能,一般器件可以互换。但是需要注意有时候负载效应可能引起电路工作不正常,因为有些ttl电路需要下一级的输入阻抗作为负载才能正常工作。

TTL和CMOS的逻辑电平转换
CMOS电平能驱动TTL电平,TTL电平不能驱动CMOS电平,需加上拉电阻。

常用逻辑芯片特点

系列 类型 输入 输出
74LS系列 TTL TTL TTL
74HC系列 CMOS CMOS CMOS
74HCT系列 CMOS TTL CMOS
CD4000系列 CMOS CMOS CMOS