上一篇文章系统的讲了一下通信的分类,包括并行通信,串行通信。串行通信的分类,包括同步通信,异步通信。
这篇文章我们主要讲一下 UART
串口编程,我们并不陌生。之前讲过RS485通信,参看:UNIX再学习 -- RS485 串口编程
再者,参看:日常生活小技巧 -- UART 回环测试
一、基本概念
参看:UART -- 维基百科
UART 是 Universal Asynchronous Receiver/Transmitter,通用异步收发器(异步串行通信口)的英文缩写,它包括了RS232、RS449、RS423、RS422和RS485等接口标准规范和总线标准规范,即UART是异步串行通信口的总称。 而RS232、RS449、RS423、RS422和RS485等,是对应各种异步串行通信口的接口标准和总线标准,它规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。实际上是属于通信网络中的物理层(Physical Layer)的概念,与通信协议没有直接关系。而通信协议,是属于通信网络中的资料链接层(Data Link Layer)的概念。 COM是PC(个人计算机)上,异步串行通信口的简写。由于历史原因,IBM的PC外部接口配置为RS232,成为实际上的PC界默认标准。所以,现在PC机的COM均为RS232。若配有多个异步串行通信口,则分别称为COM1、COM2... 。
二、UART数据传输格式
在讲之前先感慨两句,UART这部分的总结,真真的网上看了好多的资料。但都讲的很零碎,没有个所以然。看的我很纠结,不知道从何讲起。
还好我们之前有讲过串口编程,并非对 UART一无所知。那就从 TTL 和 RS232 电平说起。
(1)TTL 和 RS232 电平
RS232 电平
逻辑1:-3V~-15V
逻辑0:+3V~+15V
TTL 电平
逻辑1:+2V~+5V
逻辑0:+0V~+0.8V
TTL 电平和 RS232 电平我会再开一篇详细来讲。这里就是要了解一下SP3232 芯片。
我们查看原理图,串口电路部分:
你能区分 SP3232 芯片引脚哪边是TTL电平,哪边是 RS232 电平吗?(傻纸问题,哈哈)
我们介绍UART基本概念的时候,也提到了现在PC机的COM均为RS232,但是单片机的电平是TTL电平。
所以要用一个电平转化芯片 SP3232,然后使得单片机和PC通过串口进行通信。
上图标的很清楚啦,PC_TXD0、PC_RXD0 在PC端,为RS232电平。
(2)数据传输格式
空闲位: 从一个字符的停止位结束到下一个字符的起始位开始,表示线路处于空闲状态,为逻辑 1。
起始位:必须是持续1bit时间的逻辑 0 电平,标志着传输一个字符的开始,接收方可用起始位使自己的接收时钟与发送方的数据同步。
数据位:紧跟在起始位之后,是通信中的真正有效信息。数据位的位数可以由通信双方共同约定,一般可以是5位、6位、7位或8位,标准的ASCII码是0~127(7位),扩展的ASCII码是0~255(8位)。传输数据时先传送字符的低位,后传送字符的高位。
这里有几个知识点需要知道:
ASCII 码,参看:C语言再学习 -- ASCII码表(转)
MSB 和 LSB,参看:C语言再学习-- 大端小端详解(转)
思考:
传输数据时先传送字符的低位,后传送字符的高位。
因为通常我们的PC是小端的,如果没有另外说明,通常可以假定数据首先传输最低有效位(LSB)。
在标准ASCII码中 127 转化成二进制为 0111 1111,即最有效高位一直为 0。只需传输 7 位即可
在扩展ASCII码中 255 转化成二进制为 1111 1111,需要传输 8 位。
校验位:奇偶校验位仅占一位,用于进行奇校验或偶校验,奇偶检验位不是必须有的。如果是奇校验,需要保证传输的数据总共有奇数个逻辑高位;如果是偶校验,需要保证传输的数据总共有偶数个逻辑高位。
这里有几个知识点需要知道:
校验位可分为NONE(无校验位)、ODD(奇校验)、EVEN(偶校验),一般多为无校验位。
奇偶校验,参看:奇偶校验 -- 百度百科
奇偶校验位是一个表示给定位数的二进制数中 1 的个数是奇数还是偶数的二进制数。奇偶校验位是最简单的错误检 测码。奇偶校验位有两种类型:偶校验位与奇校验位。如果一组给定数据位中 1 的个数是奇数,那么偶校验位就置为 1,从而使得总的 1 的个数是偶数;如果给定一组数据位中 1 的个数是偶数,那么奇校验位就置为 1,使得总的1 的个数保持奇数不变。
举个栗子:假设传输的数据位为 01001100,如果是奇校验,则奇校验位为0(要确保总共有奇数个1),如果是 偶校验,则偶校验位为1(要确保总共有偶数个1)
校验位在数据位后面,当实际数据中“1”的个数为偶数的时候,这个校验位就是“1”,否则这个校验位就是“0”,这样就可以保证传送数据满足奇校验的要求。在接收方收到数据时,将按照奇校验的要求检测数据中“1”的个数,如果是奇数,表示传送正确,否则表示传送错误。
停止位:可以是是1bit、1.5bit或2bit,可以由软件设定。它一定是逻辑 1 电平,标志着传输一个字符的结束。
由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供 计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
(3)举例说明TTL电平和RS232电平数据传输格式的不同
上面我们提到了 TTL 电平和 RS232 电平的逻辑电平是不同的,那么接下来我们举个栗子。
例如,对于16进制数据55aaH,当采用8位数据位、1位停止位传输时,无校验位。(先传第一个字节55,再传第二个字节aa,每个字节都是从低位向高位逐位传输)。我们来看它在一下 TTL 电平和 RS232 电平的信号线上的波形。
《1》TTL电平的串行数据帧格式
对于正逻辑的 TTL 电平,起始位是逻辑 0 为低电平;停止位和空闲位是逻辑 1 为高电平。
《2》RS-232电平的串行数据帧格式
对于正逻辑的 RS232 电平,起始位是逻辑 0 为高电平;停止位和空闲位是逻辑 1 为低电平。
上面提到 UART 包括了RS232、RS449、RS423、RS422和RS485等接口标准规范和总线标准规范。
我们最常见的是 RS232、RS485、RS422 这三个。下面我们一一的来详细讲解一下。
三、RS232
(1)接口标准
RS-232是美国电子工业联盟(EIA)制定的串行数据通信的接口标准,原始编号全称是EIA-RS-232(简称232,RS232)。它被广泛用于计算机串行接口外设连接。
RS-232-C接口(又称EIARS-232-C)是目前最常用的一种串行通讯接口。(“RS-232-C”中的“-C”只不过表示RS-232的版本,所以与“RS-232”简称是一样的)。
RS-232采取不平衡传输方式,即所谓单端通讯。由于其发送电平与接收电平的差仅为2V至3V左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大为约15米,最高速率为20kb/s。RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为3~7kΩ。所以RS-232适合本地设备之间的通信。
(2)常见连接器
常见的有 DB9 和 DB25,并且连接器分公/母头。
《1》DB9
首先它相关器件有很多。这里只是介绍最常见的。
DB9针串口鱼叉式公头母头:
DB9针串口焊板式公座母座:
串口线延长母对母/公对母/公对公:
讲到串口线,它有交叉线与直通线之分:
1:串口交叉线
串口线两头都一样都相同。都是公对公或者母对母串口线,这种线必须是交叉线。一端的第二针与另一端的第三针是通路的,说明此线是交叉线。
以下是判断方法:
2:串口直通线
如果用户串口设备与串口服务器连接使用公对母串口线,那必须使用公对母直通线。
一端公头的2对应,另一端母头的2,一端母头的3对应另一端公头的3.
DB9针串口焊板式PCB元件封装:
最后示例分析串口直通和交叉之分:
以联想台式机为例,通常PC上的串口为公头的:
或者笔记本电脑,通常用的 USB转串口线,也是公头的:
1:串口交叉线
2:串口直通线
引脚定义:
公头:
母头:
Pin2 TXD
Pin3 RXD
Pin5 GND
《2》DB25
(3)RS232收发器
这类芯片也有不少,我们就讲上面提到的 SP3232,查看相关手册和原理图。
《1》特性
满足EIA/TIA-232-F标准,工作电压为+3.0V到+5.5V
满载最小数据速率:120Kbps
1uA的低功耗关断模式,接收器(SP3222E)有效
可与RS-232共同使用,电源低至+2.7V
增强型ESD规范:
±15kV人体放电模式
±15kV IEC1000-4-2气隙放电
±8kV IEC1000-4-2接触放电
《2》封装
《3》引脚说明
《4》相关电路图
四、RS485
(1)接口标准
电子工业协会(EIA)于1983 年制订并发布RS-485 标准,并经通讯工业协会(TIA)修订后命名为TIA/EIA-485-A,习惯地称之为RS-485 标准。
它是从RS-422基础上发展而来的,所以RS-485许多电气规定与RS-422相仿。如都采用平衡传输方式、都需要在传输线上接终接电阻等。RS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信,而采用四线连接时,与RS-422一样只能实现点对多的通信,即只能有一个主(Master)设备,其余为从设备,但它比RS-422有改进,无论四线还是二线连接方式总线上可多接到32个设备。
RS-485与RS-422的不同还在于其共模输出电压是不同的,RS-485是-7V至+12V之间,而RS-422在-7V至+7V之间,RS-485接收器最小输入阻抗为12kΩ、RS-422是4kΩ;由于RS-485满足所有RS-422的规范,所以RS-485的驱动器可以在RS-422网络中应用。
RS-485与RS-422一样,其最大传输距离约为1219米,最大传输速率为10Mb/s。平衡双绞线的长度与传输速率成反比,在100kb/s速率以下,才可能使用规定最长的电缆长度。只有在很短的距离下才能获得最高速率传输。一般100米长双绞线最大传输速率仅为1Mb/s。[2]
RS-485 标准是为弥补RS-232 通信距离短、速率低等缺点而产生的。RS-485 标准只规定了平衡发送器和接收器的电特性,而没有规定接插件、传输电缆和应用层通信协议。
RS-485 标准与RS-232 不一样,数据信号采用差分传输方式(Differential Driver Mode),作用是可以抑制共模干扰。
(2)485转232接口
上面提到了,标准没有规定接插件,所以一般都是引出四根线:VCC,GND,TXD,RXD
常用的还有 485转232转换器
(3)RS485收发器
这里主要讲一下 SP3485
《1》特性
RS-485和RS-422收发器
工作电压为+3.3V
可与+0.5V的逻辑电路共同工作
驱动器/接收器使能 z
低功耗关断模式(SP3481)
-7V~+12V的共模输入电压范围
允许在同一串行总线上连接32个收发器
与工业标准75176管脚配置兼容
驱动器输出短路保护
《2》电路图和引脚
引脚说明:
Pin1-RO-接收器输出。
Pin2-RE-接收器输出使能(低电平有效)。
Pin3-DE-驱动器输出使能(高电平有效)。
Pin4-DI-驱动器输入。
Pin5-GND-连接地。
Pin6-A-驱动器输出/接收器输入(同相)。
Pin7-B-驱动器输出/接收器输入(反相)。
Pin8-Vcc
注意:将AB间120欧姆去掉,如果采用阻抗匹配的电缆,300米以内几乎可以不用加终端电阻。加终端电阻的缺点就是增大了线路的无用功耗,尤其是电池系统供电时,降低了电池的续航能力。我一开始没有将它去掉,导致只能发送数据,无法接收数据。
五、RS422
我用的并不多,所以只是简单简绍一下:
标准全称是“平衡电压数字接口电路的电气特性”,它定义了接口电路的特性。典型的RS-422是四线接口。实际上
还有一根信号地线,共5根线。其DB9连接器引脚定义。由于接收器采用高输入阻抗和发送驱动器比RS232更强的驱动能力,故允许在相同传输线上连接多个接收节点,最多可接10个节点。即一个主设备(Master),其余为从设备(Slave),从设备之间不能通信,所以RS-422支持点对多的双向通信。接收器输入阻抗为4k,故发端最大负载能力是10×4k+100Ω(终接电阻)。RS-422四线接口由于采用单独的发送和接收通道,因此不必控制数据方向,各装置之间任何必须的信号交换均可以按软件方式(XON/XOFF握手)或硬件方式(一对单独的双绞线)实现。
RS-422的最大传输距离为1219米,最大传输速率为10Mb/s。其平衡双绞线的长度与传输速率成反比,在100kb/s速率以下,才可能达到最大传输距离。只有在很短的距离下才能获得最高速率传输。一般100米长的双绞线上所能获得的最大传输速率仅为1Mb/s。
六、三者比较
参看:串行通信的基础知识- RS-232C / RS-422 / RS-485 -
七、需要了解的小知识点
双绞线,参看:双绞线 -- 百度百科
差分布线,参看:Altium Designer -- 差分布线原则
如何差分布线,参看:Altium Designer -- 精心总结
八、总结
扩展阅读:
Universal Asynchronous Receiver/Transmitter (UART)
这篇文章,写了好久。查阅相关资料应该是最多的一次了。最后发现还是有很多东西没有写,也是无语。
最近诸事不顺,搞的很焦虑。真的感觉人是很脆弱的,放宽心开心健康过好每一天,是多么珍贵。