UART通信协议(二)数据格式和工作模式

前言:在本系列的前一篇文章中介绍了波特率和比特率的区别,接下来的文章开始说下UART的数据格式和工作模式。

UART协议简介

通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART。它将要传输的资料在串行通信与并行通信之间加以转换。
UART协议中涉及到的引线有2根,分别是TX和RX。TX用于芯片将并行的一个字节的数据转换为串行的比特流在TX上传输。RX用于芯片接收从机传回的数据比特流,并将该串行比特流转换为并行的一个字节数据。

UART数据格式

在这里插入图片描述
在这里插入图片描述
如上图所示,传送一个字符中包含的比特位有:
起始位:一个低电平,逻辑“0”信号,表示传输一个字符的开始。
数据位:可以根据需要传送5~8位的数据位,如ASCII码(7位),扩展BCD码(8位),上述图片中就是8位数据位。传输的比特流采用小端传输的格式,即低比特位先传输。
停止位:表示传输一个字符的结束,可以是1个、1.5个、2个高电平。
空闲位:当前线路上无数据传输时,置为高电平。
注:通过上面的例子我们发现,传输一个字节所需要的比特位是1位起始位+8位数据位+1位停止位=10位(按照上图举例),并且每个字节都有开始位和结束位。同一个字节传输中,属于该字节的每个比特间隔时间一样;但传输不同字节间的间隔时间则不能确定

UART工作模式

UART有两根线,最常见的玩法是一根用于发数据一根用于收数据,并且通信双方约定好收发数据的速度,就可以愉快的玩耍了,这就是异步收发传输。但是前辈们的智慧无穷,提供了更多的花样玩法,适用于更多的场合。以下是UART的几种工作模式:
1)同步半双工模式
将UART的RX作为输入输出端口,TX作为同步移位时钟,此时可以没有起始停止位,当同步移位时钟信号改变出现时序信号时,开始收发数据。这时通信双方波特率固定,波特率代表双方调制解调信号的速率,要区别于同步移位时钟信号的作用,这里不可省略。可以看出,当传输同一方向大量数据时,这种方式可以省去起始位和停止位,传输带宽比较高,缺点是同一时刻只能进行一个方向的通信,不够灵活。同步半双工,就是双方约定波特率的情况下,牺牲了一根线作为同步时钟线,标记现在出现的数据是否是我们需要的信号 。
在这里插入图片描述
2)异步全双工模式(无校验位)
跟上一种模式相比,异步全双工模式就是将RX和TX两根线都利用起来,在约定波特率情况下,通信双反可以在同一时刻接收或者发送数据,并且每个字节都会带起始位和停止位来区别于其他状态。
在这里插入图片描述
在这里插入图片描述
3)异步全双工模式(有校验位)

3.1)非多机通讯模式
当传输大量数据时,总会有出错的可能。跟上一种模式相比,在约定波特率下,这种模式下多了一个校验位,在TX中为TB8,在RX中为RB8.这里可以设置为对所有该字节的数据比特进行奇校验或偶校验,该位则为校验位,发送端对该位进行计算填充,接收端在接收完该字节后,可以检查校验位,若校验位出错则可报错或丢弃该字节。
在这里插入图片描述
在这里插入图片描述
3.2)多机通讯模式
我们知道UART有两根线TX和RX,可以连接一对主机进行通信,但如果某个场景中,一个主机需要和多个从机进行通信,按照上面的做法,则需要在主机上引出多根TX和RX线,这从设计上不利于扩展,对资源也是一种极大的浪费。所以这里可以利用刚刚的校验位来实现多机通讯功能。
在不使用校验功能时,TB8和RB8可以用来标识该帧是地址帧还是数据帧。这时多个从机可以并联到主机的TX和RX上,每个从机都有自己的地址,对RX上的数据进行监听,若地址帧的地址于自身一致,则开始准备接收数据。
注:上述每种工作模式下,通信双方都有约定波特率。但根据不同的芯片或不同的场景,波特率分为可编程波特率和固定波特率。这要具体的应用芯片来看了。

总结:UART协议需要用到两根通信线TX和RX,在通信时需要注意双方波特率的设置应一致。根据不同的场景可选择是否全双工或者半双工,不同模式下,停止位、数据位、校验位和停止位数不同。

你可能感兴趣的:(MCU)