UART通信协议的工作原理

电子说

1.2w人已加入

描述

什么是UART?

通用异步接收器/发射器,通常称为UART,是一种串行,异步,全双工通信协议,广泛用于嵌入式领域。

UART连接

UART通道有两条数据线。每个设备上都有一个 RX 引脚和一个 TX 引脚(RX 用于接收,TX 用于发送)。每个设备的 RX 引脚连接到另一个设备的 TX 引脚。请注意,没有共享时钟线!这是通用异步接收器发送方的“异步”方面。

异步接收器

作为一种异步串行通信协议,UART的工作原理是逐位传输传输数据的每个二进制位。在UART通信协议中,当信号线上的状态为高电平时,表示“1”,当信号线上的状态为低电平时,表示“0”。

例如,当使用UART通信协议传输一个字节的数据时,在信号线上产生八种高电平和低电平组合。

串行通信是指利用一条传输线逐位顺序传输数据,或者两条信号线可以形成全双工通信,如RS232。特点是通信线路简单,使用简单的电缆即可实现通信,成本降低,适合远距离通信的应用,但传输速度慢。

异步通信以一个字符作为传输单元。通信中两个字符之间的时间间隔不是固定的,但同一字符中两个相邻位之间的时间间隔是固定的。一般来说,两个UART设备之间的通信不需要时钟线。此时,需要在两个UART设备上指定相同的传输速率,以及空闲位,起始位,奇偶校验位和结束位,即遵循相同的协议。

数据传输速率以波特率表示,即每秒传输的位数。例如,如果数据传输速率为120个字符/秒,每个字符为10位(1个起始位,7个数据位,1个校验位,1个停止位),则其传输的波特率为10×120 = 1200个字符/秒= 1200波特。

数据通信格式

异步接收器

起始位

异步接收器

每次通信开始时,发送方都会发送一个逻辑“0”信号(VOL),指示传输字符的开始。由于总线在空闲时处于高电平,因此在开始通信时首先发送与空闲状态明显不同的信号,即VOL。

数据位

异步接收器

起始位之后是我们要传输的数据。数据位可以是 5、6、7、8、9 位等。形成一个字符(通常为 8 位)。如 ASCII 码(7 位)和扩展 BCD 码(8 位)。最低位先发送,最高位最后发送。使用低电平表示“0”,使用高电平表示“1”以完成数据位的传输。

奇偶校验位

异步接收器

将此位添加到数据位后,“1”位的位数应为偶数(偶数奇偶校验)或奇数(奇偶奇偶校验),以验证数据传输的正确性。校验位其实就是调整号,串口校验分为几种方式:

无奇偶校验

奇偶校验:如果数据位中“1”的数字是偶数,则奇偶校验位为“1”,如果“1”的数字为奇数,则奇偶校验位为“0”。

偶数奇偶校验:如果数据中“1”的数字是偶数,则奇偶校验位为“0”,如果是奇数,则奇偶校验位为“1”。

标记平价:校验位始终为 1(不常用)。

平价:奇偶校验位始终为 0(不常用)。

停止位

异步接收器

它是字符数据的结束标记。它可以是 1 位、1.5 位或 2 位 VOH。由于数据是在传输线上定时的,并且每个设备都有自己的时钟,因此在通信中两个设备之间很可能会出现小的不同步。因此,停止位不仅指示传输结束,而且还为计算机提供了校正时钟的机会。停止位越多,数据传输越稳定,但数据传输速度越慢。

协议层

在协议层中,指定了数据包的内容,由起始位、主数据、校验位和停止位组成。双方的数据包格式必须一致,才能正常发送和接收数据。

波特率

由于异步通信中没有时钟信号,因此两个通信设备需要就波特率达成一致。常见的有4800、9600、115200等。

异步接收器

通信的开始和停止信号:串行通信的数据包从开始信号开始,以停止信号结束。数据包的开始信号由逻辑0的数据位表示,数据包的停止信号可以用逻辑0的5.1、1、5.2或1个数据位表示,只要双方同意即可。

数据检查:在有效数据之后,有一个可选的数据校验位。由于数据通信相对容易受到外界干扰,传输数据偏斜,可以在传输过程中增加校验位来解决这个问题。检查方法包括奇数检查、偶数检查、0 检查(空格)、1 检查(标记)和无奇偶校验。

奇偶校验要求有效数据和奇偶校验位中的“1”数为奇数。

例如,8 01101001 位有效数据,总共有 4 个“1”。如果校验位为“1”,则最后传输的数据将是 8 位有效数据加上 1 位校验位,总计 9 位。偶数奇偶校验和奇数奇偶校验要求正好相反。帧数据和奇偶校验位中“1”的数目要求为偶数,如数据帧:11001010。此时,数据框中“1”的数量为4,因此偶数奇偶校验位为“0”。0 check 表示无论有效数据的内容是什么,校验位始终为“0”,1 check 表示校验位始终为“1”。

错误状态

以下是使用 UART 时可能会遇到的一些错误:

成帧错误

UART状态和控制寄存器将指示各种状态条件,包括与传输相关的错误状态。了解此协议可以更轻松地理解错误状态。它们包括成帧错误,当接收器在预期的位时间看不到停止位时会发生。如果数据线在预期停止位时未处于预期的高电平状态(取决于设置 UART 的数据和奇偶校验位的数量),则 UART 将发出成帧错误的信号。

奇偶校验错误

仅当 UART 处于奇偶校验模式时,才会引发奇偶校验错误。在奇偶校验模式下,发送一个额外的位来保存所有传输的数据位的奇偶校验(偶数或奇数)。如果数据位出错(1 表示 0 或 0 表示 1),则奇偶校验位将出错,并且将引发指定错误的错误。

溢出错误

当接收方在下一个字符到达之前不处理(从输入缓冲区中删除字符)时,会发生溢出错误。

中断条件

中断条件不一定是错误。当接收器输入处于逻辑低电平状态超过一定持续时间(通常超过一个字符时间)时,就会发生这种情况。对于接收者来说,它看起来像一个带有成帧错误的全0字符。在 python 代码中,您可以看到重置是通过发送中断触发的。这会将数据线拉低足够长的时间,以便MCLR被拉低并复位电路板。

以下是UART,I2c和SPI之间的区别

异步接收器

您可能想知道,这三种通信中哪一种是最好的?是UART,I2C还是SPI?

没有“最佳”的通信外围设备,每个通信外设都有自己的优点和缺点。因此,用户应选择最适合其项目的通信外设。例如,如果您想要最快的通信外设,SPI 将是理想的选择。另一方面,如果用户想要连接多个设备而又不太复杂,I2C 将是理想的选择,因为它最多可以连接 127 台设备并且易于管理。

很多MUC控制器都支持UART协议,SPI协议和I2C协议,比如Seeeduino XIAO 控制器,用户可以根据自己的需求选择不同的接口设备。

异步接收器

写在最后

不同通信协议都有其优点和缺点,根据应用场景合理选择即可,这样我们的MUC控制器就可以控制各种各样的硬件设备或传感器设备了!

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

全部0条评论

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

×
20
完善资料,
赚取积分