UART(一)概述
1.1 串行通讯和并行通讯
串行通讯和并行通讯是数据传输的两种主要方式,两者的区别如下:
- 串行通讯是指数据通过一条数据线逐位传输
- 并行通讯是指数据通过多条数据线同时传输
串行 | 并行 | |
---|---|---|
传输速率 | 低 | 高 |
硬件成本 | 低 | 高 |
抗干扰能力 | 强 | 弱 |
通讯距离 | 远 | 近 |
1.2 单工通讯和双工通讯
单工和双工是通讯领域中用于描述数据传输方向的术语,它们定义了两个设备之间的数据通信方式。
单工通信,只允许数据在一个方向上传输,即数据只能从发送端传输到接收端,接收端无法向发送端传输数据。简单来说,就是一种“单向”通信模式,可以类比电视广播。
双工通信,允许数据在两个方向上传输,其下又分为两种类型:半双工和全双工 。
半双工通信允许数据在两个方向上传输,但不能同时进行。在任何时刻,数据只能在一个方向上传输。这意味着通信的两端可以轮流发送和接收数据,但不能同时进行。可以类比对讲机。
全双工通信允许数据同时在两个方向上传输。这种通信方式最为高效,因为它允许通信双方同时发送和接收数据,可以类比电话。
1.3 同步通讯和异步通讯
同步通讯和异步通讯的区别在于发送方和接收方如何对数据进行协调统一,详细内容如下图所示:
假如发送方和接收方正在以串行的方式进行通信,发送方发出了这样一段信号,请思考,接收方应该如何解析这段信号?
这样?
还是这样?
应该如何协调发送方和接收方?
方案一: 发送方发送数据的同时,发送一个时钟信号,并规定,接收方在每个时钟周期的下降沿对数据进行采样,这种方案叫做同步通讯(发送方和接收方使用相同的时钟信号,因此两者的时钟的是同步的)
方案二: 统一发送方发送数据的频率和接收方的接收频率,这样就能保证数据的正确解析,同时还不需要额外的时钟信号,这种方案叫做异步通讯(发送方和接收方的时钟不一定同步)
同步通信(Synchronous Communication):
发送方和接收方共享同一个时钟信号,数据的发送和接收都依赖这个共同的时钟来协调。常见于 I²C、SPI
等通信方式。
异步通信(Asynchronous Communication):
发送方和接收方不共享时钟,而是通过事先约定的波特率(每秒传输的比特数)和起始位、停止位等机制来实现数据同步。常见于 UART
通信。
1.4 UART定义
UART
(Universal Asynchronous Receiver/Transmitter)是一种异步、全双工的串行通信接口,常用于微控制器与计算机、其他微控制器或外部设备之间的数据交换,下图是UART
通信所需的信号线,其中Tx
用于发送数据,Rx
用于接受数据。
1.5 UART通讯协议
1.5.1 数据格式
在UART
通信中,数据是逐帧(Frame)发送的,每个数据帧通常包括起始位、数据位、校验位(可选)和停止位,具体结构如下图所示。
下面对每个部分进行详细介绍。
1)空闲状态
协议规定,在空闲状态下,也就是没有数据传输时,应为高电平。
2)起始位
起始位表示一个数据帧的开始,起始位为低电平(区别于空闲状态)。
3)数据位
传输的主体内容,位于起始位之后,长度可以是5到9位,一般都是8位。低电平表示0,高电平表示1。低位在前。
4)校验位(可选)
用于校验当前帧的正确性,校验算法可以是奇校验或偶校验,该算法的思想如下。
奇校验(odd parity):如果数据位中1的数目是偶数,则校验位为1,如果1的数目是奇数,校验位为0,目的是保证数据位+校验位中的1的总个数是奇数。
偶校验(even parity):如果数据为中1的数目是偶数,则校验位为0,如果1的数目为奇数,校验位为1,目的是保证数据位+校验位中的1的个数是偶数。
5)停止位
停止位表示数据帧的结束,通常为1位或2位,停止位为高电平。
1.5.2 发送方和接收方的约定
为保证UART
通信能够正常工作,发送方和接收方必须提前做好如下约定。
1)波特率
波特率(Baud Rate)用于表示数据的传输速率,发送方和接收方必须约定好传输速率,才能保证数据被正确的发送和接收。
需要注意波特率(Baud Rate)和比特率(Bit Rate)的区别,比特率表示每秒传输的位(bit)数,而波特率表示每秒传输的符号(symbol)数。但是串口通信中,只有0和1这两个符号,因此1个符号用1位就能表示,所以此处的波特率和比特率是等价的。
波特率和比特率的关系取决于每个符号(symbol)携带的比特数。如果每个符号只携带1个比特,那么波特率和比特率是相等的。但如果每个符号携带多个比特(比如通过调制技术),比特率就会高于波特率。
公式:比特率 = 波特率 × 每个符号的比特数
例如:波特率是9600,每个符号携带2个比特,那么比特率就是9600 × 2 = 19200 bps。
2)数据位
发送方和接收方需要明确数据位的位数。
3)校验位
发送方和接收方需要明确是否有校验位,如果有,需要明确校验算法是哪个。
4)停止位
发送方和接收方需要明确停止位的位数。
1
1
1
1
1
1
1
1
1
1