微控制器通信协议之UART技术

通信网络

635人已加入

描述

  UART是一种通信协议,用于将数据从一个设备发送到另一个设备。在流行的微控制器通信协议(UART、SPI和I2C)中,UART是最先开发的。

  UART代表通用异步接收器和发送器。同步协议具有独立的时钟和数据线路,时钟线路用于触发数据线的读取(或写入)。UART是异步的,这意味着它只有数据线,没有时钟线。不使用时钟线,数据以特定的速度传输,接收器和发送器都需要设置为相同的速度(称为波特率),才能成功进行通信。UART通常有两条数据线,即发送(Tx)和接收(Rx),因此数据可以同时双向发送(全双工)。

  UART帧

  没有数据传输时,UART数据线空闲高电平。数据传输通过将线路拉低1位开始。起始位之后,发送数据位。随后是一个停止位,此时线路再次变为高电平。

微控制器

  例如,下面是二进制数01011110(十六进制0x7A)的传输:

微控制器

  框架的一些变化是可能的,但是上面显示的框架设置是最常见的。关于框架变化的更多细节将在本文后面介绍。多个字节一个接一个地直接链接,中间不需要空闲时间;例如,下面是十六进制序列0x1A9E2B:

微控制器

  波特率

  通信发生的速度称为波特率。波特率以每秒位数(bps)为单位,常用的速率有9600、19200和115200。对于具有1个停止位且没有奇偶校验位的成帧设置(稍后将详细描述),传输8个数据位(1个字节)需要10个位;因此,在9600波特时,这意味着数据速率为每秒960字节,或每字节1毫秒多一点。

  因为该协议是异步的,并且不使用时钟,所以发送器和接收器都需要使用它们的内部时钟(例如微控制器中的系统时钟)来为信号计时。有时,发送器或接收器可能无法产生所要求的准确波特率,因为可能的波特率通常是收发器内部时钟速度的一个因素——在这种情况下,实际波特率将偏离所要求的波特率一定的百分比,但只要偏差在一定的容差范围内,则通信仍然可以正常工作;通常,3%是通信仍能成功进行的最大可能偏差。通常可以检查微控制器(或其它收发器)数据手册,以计算可能的精确波特率(因此也可以计算其它速率的%偏差)。

  自动窃听

  一些系统支持自动波特率,即接收器在分析从发送器接收的一些数据后自动检测波特率。这是通过测量数据中最小脉冲的宽度来实现的,例如,如果最小脉冲宽度为8.68 s,则波特率为115200bps。

  流控制

  UART可以选择具有额外的流量控制线路,当接收器繁忙而无法立即接收更多数据时,这些线路会向发送器发出指示。例如,当无线电调制解调器(如蓝牙模块)接收通过UART接收的数据并通过空中传输时,这可能很有用,因为空中传输数据速率比UART数据速率慢(甚至可能是暂时的,如无线电波被其他流量阻塞)。流量控制线称为请求发送(RTS)和清除发送(CTS),一个收发器的RTS线连接到另一个收发器的CTS线,反之亦然。想要发送的收发器监控另一个收发器的CTS线路(连接到第一个收发器的RTS引脚),当准备接收数据时,将CTS线路设为高电平。

  协议变化

  到目前为止,UART协议最常用的变体是8N1,它是:

  8个数据位。

  没有奇偶校验位。

  1个停止位。

  所用的数据位数量可在5至9之间变化(尽管大多数微控制器UART外设仅支持8或9位)。在使用第9位的情况下,这通常用于指示该帧是数据还是控制消息。

  具有2个停止位提供了对帧的额外错误检查(如果两个停止位都不存在,则存在错误)。

  奇偶校验是另一种形式的错误检查,其中设置了一个附加位,以使帧中1的数量为偶数或奇数。例如:对于偶数奇偶校验,如果数据中1的数量为3,则将设置奇偶校验位,使得帧中1的数量为4(偶数)。对于奇数奇偶校验,如果数据中1的数量为4,则将设置奇偶校验位,使得帧中1的数量为5(奇数)。

  协议错误

  当信号不符合UART标准时,可能会出现各种协议错误,许多微控制器具有内置硬件支持来检测和报告这些错误。由于通信线路中的干扰(如电磁干扰,即EMI)、不匹配的协议设置或不匹配的波特率,可能会出现错误。

  成帧错误:在预期位置未检测到停止位。

  奇偶校验错误:奇偶校验不正确。

  噪声误差:在线路上检测到短于波特率的转换(脉冲)。一些微控制器具有过采样特性,UART线路每比特被读取一次以上,该特性用于检测噪声。

  接线

  UART的一个非常常见(也很容易犯)的错误是通信接线错误——必须记住,一端的Rx连接到另一端的Tx,反之亦然。这同样适用于流量控制管线——一侧的RTS通向另一侧的CTS,反之亦然。更糟糕的是,一些制造商根据主机上应该连接的位置来标记他们外围设备上的引脚!因此,在这些设备上,主机上的Rx确实连接到外围设备上的Rx(依此类推)。利用器件数据手册仔细检查UART接线总是一个好主意。例如,下面是一个GSM模块数据手册的摘录,其中从模块的角度对引脚进行了标记:

微控制器

  这是另一个GSM模块数据手册的摘录,其中引脚从主机角度进行了标记:

微控制器

  MISO(主机输入-从机输出)/ MOSI(主机输出-从机输入)的SPI命名方案在避免这类愚蠢(且代价高昂)的错误方面要好得多,但这不适用于UART——然而,在绘制原理图时,彻底命名网络(如蓝牙_Tx)会有所帮助,这将有助于避免错误。

  物理层

  UART通信可以通过各种物理硬件方案进行。其中一些是TTL、RS232和RS485:

  TTL代表晶体管到晶体管逻辑(参见我们的模拟和数字信号文章),适用于短距离通信。高的一般是5V或者3.3V,低的是0V。

  RS232曾经在电脑上很常见,后来被USB取代了。RS232的高电平在-3V到-15V之间,低电平在3V到15V之间。自从RS232被USB取代后,USB转串行转换器芯片变得很常见(如无处不在的FT232),它在计算机上表现为一个虚拟的COM端口。

  RS485是一种差分对实现方式,在抗电磁干扰(EMI)和长距离通信方面更胜一筹。有关差分对的更多信息,请参阅我们的高速设计文章。

  尽管UART是最早开发的通信协议之一,但它今天仍然和以往一样相关和受欢迎,对该协议有一点了解有助于理解如何在您的应用中最好地实现它,以及如何调试任何问题(例如使用示波器)。Proteus提供了虚拟终端和示波器仪器,用于在仿真下使用UART,此外还提供了组件库中大量支持UART的器件。

  审核编辑:黄飞

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分