UART学习笔记
概述
串口通讯UART(Universal Asynchronous Receiver/Transmitter),又经常被称为点对点通讯或者PtP通讯,是工业设备中的一种非常通用的通讯方式,常用于获取相对远程采集设备的数据。
串行通信,通常利用RS232C或者RS485电气接口,实现ASCII码或者Modbus通讯;其特点是通信线路简单,成本较低,用于解决不同厂商产品之间节点少、数据量小、通讯速率低、实时性要求不高的场合。
为了实现设备相互通讯,通讯双方的通讯接口和通讯协议要一致,最基本的串行通讯的数据帧格式和波特率也要匹配。
同步通信
双方在同一个时钟信号的控制下,进行数据的接收和发送,来一个时钟,发送端发送,接收端接收,他们彼此之间的工作状态是一致的。同步通信的数据帧组成一般是:同步信号+若干数据。
在最前面是个同步信号,接收端接收数据分析出同步信号之后,就认为后边的数据都是实际传输的数据了。理论上来说同步通信一个数据帧里面的若干数据的位数是不受限制的。
同步通信中,数据之间是不能有间隔的,因为双方在同一个时钟下工作,这边接收的,必然是另一边发送的。在同步信号之后,认为所有的数据都是实际数据,所以当没有信息要传输时,同步信号要填上空数据。
异步通信
异步通信在发送数据时,所发送的数据之间的时间间隔可以是任意的。因为每一帧的数据都有开始和停止位,他们之间的数据位才是实际数据。所以接收方评判数据是否为完整的一帧数据的方式就是分析这一堆数据中的开始位和停止位。发送端可以在任意时刻开始发送数据,接收端必须时刻做好接收的准备。因为每传输一个数据帧都会有一个开始位和一个停止位,实际数据一般只占到5-8位,这就导致了异步通信的传输效率较低。
串行通信
定义:串行通信是指利用一条传输线将数据一位位地顺序传送。
传输方式:传输一个字节(8个位)的数据时,串口是将8个位排好队,逐个地在1条连接线上传输。
特点:通信线路简单,利用电话或电报线就可以实现通信,降低成本,适用于远距离通信,但传输速度慢。
并行通信
定义:并行通信是指利用多条传输线将一个数据的各位同时传送。
传输方式:传输一个字节(8个位)的数据时,并口是将8个位一字排开,分别在8条连接线上同时传输。
特点:传输速度块,适用于短距离通信。
串口为串行异步通信。
协议
传输方向
串口中的RS485为半双工传输,而RS422、RS232为全双工传输。
半双工传输
数据可以双向传输,但在某一时刻,只能单向传输。
全双工传输
数据可以同时进行双向传输,通信双方能同时接收和发送数据。
错误校验
校验是确保准确无误传输数据的关键,UART用的方法是奇偶校验。
奇偶校验: 奇偶校验指的是在发送数据时,利用数据中“1”的个数是奇数或偶数作为检测错误的标志。通常在数据位后面设置1位奇偶校验位(1或0),用它使这组代码中“1”的个数为奇数或偶数。
奇校验时,数据中“1”的个数与校验位“1”的个数之和应为奇数;
偶校验时,数据中“1”的个数与校验位“1”的个数之和应为偶数。
接收数据时,接收端对数据位“1”的个数进行校验,若发现发送端结果与不一致,则说明传输数据过程中出现了错误。此时接收端可以向发送端发送请求,要求重新发送一遍数据。
传输速率
UART常用波特率来表示数据传输的速率。 数据传输速率指通信线上传输信息的速度,有比特率和波特率两种表示方法。比特率也称为信号速率,是指单位时间内所传送的二进制位代码的有效位数,以每秒多少比特计算,即bit/s;波特率是指调制速率,是脉冲信号经过调制后的传输速率,以波特(Baud)为单位,通常用于表示调制器之间传输信号的速率。
比特率在数值上和波特率有这样的关系:
I
=
S
∗
l
o
g
2
N
I=S∗log2N
I=S∗log2N
其中I为比特率,S为波特率,N为每个符号承载的信息量(一个脉冲信号所表示的有效状态),而log2N以比特为单位。即波特率与比特率的关系:比特率=波特率*单个调制状态对应的二进制位数。
一个以X波特传送信号的线路,其传送二进制数据的速率不一定是X比特/秒,因为每个码元符号需要通过几个比特来表示,所以运送一个符号等于运送了几个比特。在二进制中脉冲(二电平)只有两种状态0或1,即 n=“2”,也就是说,信号速率与调制速率是一致的。如果使用多电平脉冲信号传输信息,信号速率与调制速率就不一致了。例如,若使用0、1、2、3、4、5、6、7共8个电平级,则需要,即3个比特来表示一个信号值,因而这种条件下比特率将是波特率的3倍。(当用二进制位表示一个码元时与比特率相等)
例如假设数据传送速率为120符号/秒(symbol/s)(也就是波特率为120Baud),又假设每一个符号为八相调制(单个调制状态对应3个二进制位),则其传送的比特率为(120symbol/s) * (3bit/symbol)=360bps。只有在每个符号只代表一个比特信息的情况、或一些简单的调制方式下,例如基带二进制信号调制方式等,波特率与比特率才在数值上相等。 具体而言, 两相调制(单个调制状态对应1个二进制位)的比特率等于波特率;四相调制(单个调制状态对应2个二进制位)的比特率为波特率的两倍;八相调制(单个调制状态对应3个二进制位)的比特率为波特率的三倍,依次类推。
在串行通信中,单个调制状态对应的1个二进制位,因此比特率和波特率往往相同。可以用”波特率”来描述数据的传输速率,即每秒钟传送的二进制位数。它是衡量串行数据速度快慢的重要指标。
时钟
在串行传输过程中,二进制数据序列是以数字信号波形的形式出现的,如何对这些数字波形定时发送出去或接收进来,以及如何对发/收双方之间的数据传输进行同步控制的问题就引出了发送/接收时钟的应用。
在发送数据时,发送器在发送时钟(下降沿)作用下将发送移位寄存器的数据按串行移位输出;在接收数据时,接收器在接收时钟(上升沿)作用下对来自通信线上串行数据,按位串行移入移位寄存器。可见,发送/接收时钟是对数字波形的每一位进行移位操作,因此,从这个意义上来讲,发送/接收时钟又可叫做移位始终脉冲。另外,从数据传输过程中,收方进行同步检测的角度来看,接收时钟成为收方保证正确接收数据的重要工具。为此,接收器采用比波特率更高频率的时钟来提高定位采样的分辨能力和抗干扰能力。
发送/接收时钟频率与波特率的关系:发/收时钟频率 =n*(发/收波特率 )
波特率因子
在波特率指定后,输入移位寄存器 / 输出移位寄存器在接收时钟 / 发送时钟控制下,按指定的波特率速度进行移位。一般几个时钟脉冲移位一次。要求:接收时钟/ 发送时钟是波特率的 16 、 32 或 64 倍。波特率因子就是发送/接收 1 个数据( 1 个数据位)所需要的时钟脉冲个数,其单位是个/位。如波特率因子为 16 ,则16 个时钟脉冲移位 1 次。 例:波特率 =9600bps ,波特率因子 =32 ,则接收时钟和发送时钟频率 =9600 × 32=297200Hz 。
RS232
RS-232在1970年发布,命名为EIA-232-E,作为工业标准,以保证不同厂家产品之间的兼容。RS-232-C是美国电子工业协会EIA(Electronic Industry AssociaTIon)制定的一种串行物理接口标准。RS是英文“推荐标准”的缩写,232为标识号,C表示修改次数。它的全名是“ 数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准”。
传统的RS-232-C总线标准采用标准25芯D型插头座(DB25),包含了两个信号通道,即主通道和副通道。利用RS- 232总线可以实现全双工通信,在多数情况下主要使用主通道。在一般应用中,使用3条~9条信号线就可以实现全双工通信,如采用三条信号线(接收线、发送线和信号地)能实现简单的全双工通信过程。
后来使用简化为9芯D型插座(DB9)现在应用中25芯插头座已很少采用。
为了保证码元畸变小于4%的要求,按RS-232-C标准规定,驱动器的负载电容应小于 2500pF。驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m(50英尺);若每米电缆的电容量减小,通信距离可以增加。传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。
RS-232采取不平衡传输方式,即所谓单端通讯。由于其发送电平与接收电平的差仅为2V至3V左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大为约15米,最高速率为20kb/s。RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为3~7kΩ。所以RS-232适合本地设备之间的通信。
目前RS-232是PC机与通信工业中应用最广泛的一种串行接口。RS-232被定义为一种在低速率串行通讯中增加通讯距离的单端标准。
RS232电气特性
在TXD和RXD数据线上:
(1)逻辑1的电平为-3V~-15V
(2)逻辑0的电平为+3~+15V的电压
在RTS、CTS、DSR、DTR和DCD等控制线上:
(1)信号有效(接通,ON状态)为+3~+15V的电压
(2)信号无效(断开,OFF状态)为-3~-15V的电压
规定逻辑“1”的电平为-5V~-15 V,逻辑“0”的电平为+5 V~+15 V。选用该电气标准的目的在于提高抗干扰能力,增大通信距离。RS -232的噪声容限为2V,接收器将能识别高至+3V的信号作为逻辑“0”,将低到-3 V的信号作为逻辑“1
以上规定说明RS-232C是用正负电压来表示逻辑状态。对于数据(信息码),逻辑1(传号)的电平低于-3V,逻辑0(空号)的电平高于+3V;对于控制信号,接通状态(ON)即信号有效的电平高于3V,断开状态(OFF)即信号无效的电平低于-3V。
也就是说,当传输电平的绝对值大于 3V时,电路可以有效地检查出来,介于-3~+3V之间的电压无意义,低于-15V或高于+15V的电压也认为无意义,因此,实际工作时,应保证电平在± (3~15) V之间。
RS485
RS485是一个定义平衡数字多点系统中的驱动器和接收器的电气特性的标准,该标准由电信行业协会和电子工业联盟定义。使用该标准的数字通信网络能在远距离条件下以及电子噪声大的环境下有效传输信号。RS-485使得连接本地网络以及多支路通信链路的配置成为可能。
RS485是从RS-422基础上发展而来的,所以RS-485许多电气规定与RS-422相仿。如都采用平衡传输方式、都需要在传输线上接终接电阻等。RS-485可以采用二线与四线方式:采用四线连接时,与RS-422一样只能实现点对多的通信,即只能有一个主(Master)设备,其余为从设备,但它比RS-422有改进,无论四线还是二线连接方式,总线上可最多接到32个节点;而采用二线制是,RS-485采用半双工工作方式,可实现真正的多点双向通信,此时任何时候只能有一点处于发送状态,因此,发送电路须由使能信号加以控制。
RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。加上总线收发器具有高灵敏度,能检测低至200mV的电压,故传输信号能在千米以外得到恢复。在要求通信距离为几十米到上千米时,广泛采用RS-485 串行总线标准。
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。
在RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。很多情况下,连接RS-485通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来,而忽略了信号地的连接,这种连接方法在许多场合是能正常工作的,但却埋下了很大的隐患,原因一是共模干扰:虽然RS-485接口采用差分方式传输信号方式,并不需要相对于某个参照点来检测信号,系统只需检测两线之间的电位差就可以,具有一定的抗共模干扰能力,但容易忽视了收发器有一定的共模电压范围。在通信控制领域,由于现场情况十分复杂,各个节点之间存在很高的共模电压,而RS-485收发器共模电压范围为-7到+12V,当共模电压超过RS-485接收器的极限接收电压,即大于+12 V或小于7V时,接收器就无法正常工作了,严重时甚至会损坏芯片和仪器设备;原因二是EMI的问题:发送驱动器输出信号中的共模部分需要一个返回通路,如没有一个低阻的返回通道(信号地),就会以辐射的形式返回源端,整个总线就会像一个巨大的天线向外辐射电磁波。
RS485电气特性
RS-485的电气特性与RS-422基本一样。RS-485总线标准规定了总线接口的电气特性标准,发送端:正电平在+2V~+6V之间,表示逻辑状态“1”;负电平在-2V~-6V之间,则表示逻辑状态“0”;接收器:(V+) - (V-) ≥0.2V,表示信号“0”;(V+) - (V-) ≤0.2V,表示信号“1”。
数字信号采用差分传输方式,能够有效减少噪声信号的干扰。但是RS-485总线标准对于通信网络中相关的应用层通信协议并没有做出明确的规定,则对于用户或者相关的开发者来说都可以建立对于自己的通信网络设备相关的所适用的高层通信协议标准。同时由于在工业控制领域的应用RS-485总线通信网络的现场中,经常是以分散性的工业网络控制单元的数量居多并且各个工业设备之间的分布较远为主,将会导致在现场总线通信网络中存在各种各样的干扰使得整个通信网络的通信效率可靠性不高,而在整个网络中数据传输的可靠性将会直接影响着整个现场总线通信系统的可靠性,因此研究RS-485总线通信系统的通信可靠性具有现实意义。
接口信号电平比RS-232-C降低了,就不易损坏接口电路的芯片, 且该电平与TTL电平兼容,可方便与TTL 电路连接。
UART
通用异步接收器/发送器(UART)外设通过对接收和发送的字符进行缓冲,可减轻 CPU 过多的软件开销。
接收器和发送器 FIFO 最多可存储 16 个字节,包括接收器 FIFO 每个字节的三个额外错误状态位。
UART 对从外围设备接收的数据进行串行到并行的转换,对从 CPU 接收的数据进行并行到串行的转换。
CPU 可以随时读取 UART 状态。 UART 包括控制能力和处理器中断系统,可进行定制以最大限度地减少通信链路的软件管理。
UART 包括一个可编程波特发生器,能够将 UART 输入时钟除以 1 至 65535 的整数,并为内部发送器和接收器逻辑提供 16 倍参考时钟或 13 倍参考时钟。
同步点是通过两个设备的相同波特率来管理的。
如果波特率不同,发送和接收数据的时序可能会受影响,导致数据处理过程出现不一致。
允许的波特率差异最大值为10%,超过此值,位的时序就会脱节。
UART协议格式
在 UART中,传输模式为数据包形式。数据包由起始位、数据帧、奇偶校验位和停止位组成,数据帧从5位到8位不等。
起始位
当不传输数据时, UART 数据传输线通常保持高电压电平。若要开始数据传输,发送UART会将传输线从高电平拉到低电平并保持1个时钟周期。
当接收 UART 检测到高到低电压跃迁时,便开始以波特率对应的频率读取数据帧中的位。
数据位
数据帧包含所传输的实际数据。如果使用奇偶校验位,数据帧长度可以是5 位到 8 位。如果不使用奇偶校验位,数据帧长度可以是9 位。在大多数情况下,数据以最低有效位优先方式发送。
奇偶校验位
奇偶性描述数字是偶数还是奇数。通过奇偶校验位,接收 UART判断传输期间是否有数据发生改变。电磁辐射、不一致的波特率或长距离数据传输都可能改变数据位。
校验位可以配置成 1 位偶校验或 1 位奇校验或无校验位。
接收UART 读取数据帧后,将统计数值为 1 的位,检查总数是偶数还是奇数。如果奇偶校验位为0 (偶数奇偶校验),则数据帧中的1或逻辑高位总计应为偶数。如果奇偶校验位为 1 (奇数奇偶校验),则数据帧中的1 或逻辑高位总计应为奇数。
当奇偶校验位与数据匹配时,UART 认为传输未出错。但是,如果奇偶校验位为0 ,而总和为奇数,或者奇偶校验位为 1 ,而总和为偶数,则UART 认为数据帧中的位已改变。
停止位
为了表示数据包结束,发送 UART 将数据传输线从低电压驱动到高电压并保持1 到 2 位时间。