UART协议

1. 定义

UART是(Universal Asynchronous Receiver/Transmitter)通用异步收发器的简称,是一种全双工、异步通信接口,工作于数据链路层,支持RS232、RS485等规范电路。虽然UART可以实现串并行数据的转换,但UART依然是串行接口。UART用于计算机内部与外部设备之间的通信,计算机内部数据传输都是并行的,但外部设备的数据传输往往都是串行的,这样就需要一个芯片去作为媒介,去解决这一问题。UART就可实现这一功能,UART将计算机内部的并行数据转化为串行输出,并将外部设备的串行数据转化为并行输入。UART是通信协议的一种,并不算真正意义上的总线

  • 串并行数据转换
    计算机内部是按并行方式传送数据的,但外部设备一般是按串行方式处理数据;当计算机采用串行方式与外部通信时,必须进行串并行变换。发送数据时,需通过并行输入、串行输出移位寄存器将CPU送来的并行数据转换成串行数据后,再发送到外部设备;接收数据时,则需经过串行输入、并行输出移位寄存器,将接收到的串行数据转换成并行数据后送到CPU去。

  • 全双工,异步
    UART有发送和接收引脚,可以同时进行数据的收发;I2C和SPI总线工作于同步方式,主设备和从设备使用的都是同一时钟信号,发送数据先发送一个“同步信号”,例如I2C先发送从设备地址,SPI先发送片选信号;因为主从设备使用的是同一时钟信号,两个节奏保持一致,所以当主从设备通信建立完成后,就开始发送一块数据,直到数据发送结束,中途都不在需要起始位和停止位;但异步方式就有所不同,发送的字符与字符之间的时间间隔是不定的,接收方不知道数据会在何时来临,所以必须时刻做好准备,这也就要求在发送的每个字符上都加上起始位和停止位,这样接收方才能准确的把数据接收下来。

  • 引脚说明
    以RS232为例,串口引脚有9脚和25脚两种,25脚主要用于早期设备,现已逐渐淘汰;实际使用中,一般只需三根线(发送、接收和接地)就能实现数据收发,将设备的TXD/RXD与计算机的RXD/TXD连在一起,就能实现全双工传输。

  • RS232/RS485
    RS232和RS485都是串行通信中的一种物理接口电气标准,规定传输介质(电缆)、收发电平等,其实UART只是一种通信协议,具体的数据传输需要专门的传输电路去做;UART工作于数据链路层RS232/RS485工作于物理层从这里也能看出RS232/RS485和UART是相对独立的。例如:RS232规定了信号传输电平;逻辑高电平,有负载时为-3V到-15V,无负载时为-25V;逻辑低电平,有负载时为+3V到+15V,无负载时为+25V。一般在个人台式计算机上会有两组 RS-232 接口,分别称为 COM1 和 COM2。但RS232只能用于点对点的通信,不能联网功能,而且如今大多计算机本身及I/O接口芯片都采用TTL电平(0到0.8V为逻辑0,+2.0V到+5V为逻辑1),所以使用RS232时,必须设计专门的电平转换电路。
    在这些条件限制下,新的接口标准RS485就产生了。RS485以两线间的电压差为+(2-6) V表示逻辑1;以两线间的电压差为-(2-6)V表示逻辑0。接口信号电平比RS-232降低了,就不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便与TTL 电路连接。

2. 通信协议

因为UART是异步传输,所以传输的每个字符都需要特定的格式;为了保证传输正确,UART为自己定义了数据格式。对于每一个传输的字符,数据格式都可以用下面的数据位定义。
在这里插入图片描述
起始位:当有数据要发送时,数据信号线变成低电平,并持续一段时间,用于表示字符的开始,这一位称为起始位。

数据位:紧接着起始位之后。在信号线上会依次出现待发送的每一位字符,最低有效位D0最先出现,因此它最早被发送出去。采用不同的编码方案,数据位的个数不同,数据位的个数可以是4、5、6、7、8等;当字符用ASCII码表示时,数据位占7位(D0~D7)。

奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性,例如数据传输采用奇校验时,如果数据“1”的个数是奇数,这一位就被置为“0”,反之置为“1”。当然系统中也可以不采用奇偶校验。

停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。奇偶校验位的后面至少应该有一位高电平表示停止位,如果传输完一个字符后立即传输下一个字符,那么后一个字符的起始位就紧跟着前一个字符的停止位,否则停止位后又进入一个空闲状态。

空闲位:处于逻辑“1”状态,表示当前线路上没有数据传送。
由此可见,异步方式发送一个7位的ASCII字符时,实际发送10位,10.5位或11位。如果采用10位来发送的话,就意味着发送过程中,将会有30%的传输时间被浪费;如果是同步传输就不会出现这一问题。

波特率 :波特率用来表示数据传输的速率,在计算机中把每秒钟内所传送的数据位数称为波特率,例如如果波特率设为9600,每个字符由1个起始位、7个数据位、1个奇偶校验位和1个停止位等10个数据位组成,则每秒可以传输9600/10=960个字符。

3. 工作原理

  • 基本结构

在这里插入图片描述
输出缓冲寄存器:接收CPU从数据总线上送来的并行数据,并加以保存。
输出移位寄存器:接收从输出缓冲器送来的并行数据,以发送时钟的速率把数据逐位移出,即将并行数据转换为串行数据输出。
输入移位寄存器:以接收时钟的速率把出现在串行数据输入线上的数据逐位移入,当数据装满后,并行送往输入缓冲寄存器,即将串行数据转换成并行数据。
输入缓冲寄存器:从输入移位寄存器中接收并行数据,然后由CPU取走。
控制寄存器:接收CPU送来的控制字,由控制字的内容,决定通信时的传输方式以及数据格式等。例如采用异步方式还是同步方式,数据字符的位数,有无奇偶校验,是奇校验还是偶校验,停止位的位数等参数。
状态寄存器:存放着接口的各种状态信息,例如输出缓冲区是否空,输入字符是否准备好等。在通信过程中,当符合某种状态时,接口中的状态检测逻辑将状态寄存器的相应位置“1”,以便让CPU查询。

  • 接收数据

UART接收数据时,接收电路始终监视着串行输入端RxD,当发现数据线上出现一个起始位时,就开始一个字符的接收过程,在按相应的格式将串行数据转换成并行数据,送入输入缓冲寄存器,等CPU来读取。
如果设置了奇偶校验位,在传输工程中还能进行奇偶检验;还能自动检测每个字符的停止位,若无停止位,则置帧出错标志FRERR。

  • 发送数据

UART发送数据时,输出缓冲器把来自CPU的并行数据加上相应的控制信息(起始位,奇偶检验位,停止位等),再在时钟脉冲的控制下,经并/串转换电路,转换成串行数据后,从TxD引脚一位一位地发送出去。为了让CPU正确控制数据的接收与发送,电路中还设有接收就绪和发送缓冲器空等状态信息。

  • 工作模式

UART在接收数据时有两种常用的方式,中断和轮询;中断监测到有数据接收时,产生接收中断,去处理数据;轮询即每隔一段时间就来监测一下有没有数据接收,有就处理。
中断:UART通信时,中断方式是一种比较高效的方式,当有数据需要接收时,就会触发中断去处理数据,及时把缓冲区数据取走;早期没有FIFO时,UART是每次收发一个字符就产生一次中断,这种频繁的中断操作,显然会给CPU带来负担;但有了FIFO后,就可以在收发多个数据后,再触发中断,然后统一处理,这就很大程度上提高了收发效率;一般是在FIFO满了之后会触发中断,但如果数据量比较少或者发送端传送数据间隔时间比较长,会有超时中断来处理数据。
轮询:轮询方式就是每隔一定时间就来检测一下有没有数据需要处理,这种方式相对于中断来说,实时性就差了很多;而且对于没有FIFO的设备来说,如果字符没有被及时的取走,就会被后面的数据覆盖而导致数据出错。所以轮询操作一般用于对数据处理实时性要求不是很高,或者频繁的中断操作对CPU影响较大的场合。但有了FIFO之后,轮询方式容易丢失数据的问题,就得到了很大的改善。

4. UART、IIC、SPI的区别和联系

  • 电气信号线上

SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)。SPI总线可以实现 多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。

如果用通用IO口模拟SPI总线,必须要有一个输出口(SDO),一个输入口(SDI),另一个口则视实现的设备类型而定,如果要实现主从设备,则需输入输出口,若只实现主设备,则需输出口即可,若只实现从设备,则只需输入口即可。

I2C总线是双向、两线(SCL、SDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离、非经常性的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。
如果用通用IO口模拟I2C总线,并实现双向传输,则需一个输入输出口(SDA),另外还需一个输出口(SCL)。(注:I2C资料了解得比较少,这里的描述可能很不完备)

UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16倍)、UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。
显然,如果用通用IO口模拟UART总线,则需一个输入口,一个输出口。

  • SPI和UART可以实现全双工,I2C半双工
  • UART一帧可以传5/6/7/8位,IIC必须是8位。IIC和SPI都从最高位开始传。
  • SPI用片选信号选择从机,IIC用地址选择从机。
  • SPI 速率与芯片有关,有的400K,有的到几兆;
    rs232速率一般最大115200;
    iic一般应用400K,CAN最高可到1M;
    spi和iic一般应用在芯片之间通讯,RS232可应用与设备与设备之间短距离通讯,最大15米,CAN适用设备间通讯,抗干扰能力强,理论上通讯距离可到10KM
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值