1. 什么是UART?
UART,全称是Universal Asynchronous Receiver/Transmitter,即通用异步收发器。它是一种广泛应用于嵌入式系统中的串行、异步、全双工通信协议。
简单来说,UART 允许两个设备之间通过一根发送线(TXD)和一根接收线(RXD)进行数据交换。它不需要时钟信号,通信双方通过约定相同的波特率来同步数据传输的节奏。
UART 的核心作用是将要传输的数据在并行和串行形式之间进行转换。在设备内部,数据通常是并行处理的(如8位或16位),而UART会将这些并行数据逐位(bit-by-bit)地通过一根线发送出去,接收端再将串行数据还原为并行数据。
2. UART传输数据顺序
UART在传输一个字节的数据时,遵循LSB(Least Significant Bit,最低有效位)先行的原则。
例如,要发送数据0xF6(二进制为1111 0110),其传输顺序如下:
- 起始位:先发送一个低电平(逻辑0),表示数据传输开始。
- 数据位:从最低位(LSB)开始发送,即先发送
0,然后是1、1、0、1、1、1、1(MSB)。 - 校验位(可选):根据校验方式发送奇偶校验位。
- 停止位:发送一个或多个高电平(逻辑1),表示数据传输结束。
所以,在信号线上看到的比特流顺序是:起始位(0)->LSB(0)->1->1->0->1->1->1->1(MSB)->校验位->停止位(1)。
3. 单工、半双工、全双工特点
根据数据传输的方向和方式,通信方式可以分为以下三种:
3.1 单工通信
- 特点:数据传输是单向的。发送方和接收方是固定的,一方只能发送,另一方只能接收。
- 信号线:只需要一根数据线。
- 例子:广播、电视信号。
3.2 半双工通信
- 特点:通信双方都可以发送和接收数据,但不能同时进行。在同一时刻,数据只能沿一个方向传输。
- 信号线:只需要一根数据线。
- 例子:对讲机、I2C总线。
3.3 全双工通信
- 特点:通信双方可以同时发送和接收数据,互不干扰。
- 信号线:需要两根独立的数据线(如TXD和RXD)。
- 例子:UART串口通信、电话。
4. 什么是串行、并行及特点
数据传输的形式主要分为串行传输和并行传输。
4.1 串行传输
- 定义:使用一根信号线,按照先后次序,逐位(bit-by-bit)地发送数据。
- 特点:
- 传输速率慢:相对于并行,单位时间内传输的数据量较少。
- 硬件成本低:只需要一根或两根线,引脚少,布线简单。
- 传输距离远:抗干扰能力强,适合长距离通信(如RS485可达1200米)。
- 实现简单:协议相对简单。
4.2 并行传输
- 定义:使用多根信号线,在同一时刻同时传输多个比特的数据(如8位、16位)。
- 特点:
- 传输速率快:单位时间内能传输大量数据。
- 硬件成本高:需要多根数据线,占用更多引脚,布线复杂。
- 传输距离近:线间干扰大,抗干扰能力差,不适合长距离传输(通常在30米以内)。
- 实现复杂:需要精确同步多根线上的信号。
5. 串口通信时序
串口通信的时序是理解其工作原理的关键。一个完整的数据帧(通常为10位或11位)的传输时序如下:
串口通信时序:
- 先发送一个bit的低电平,代表起始位
- 再发送8个bit的数据位(先发送数据低位,再发送高位)
- 发送一个bit的校验位(奇偶校验 高电平 奇校验 低电平 偶校验)
- 发送一个bit的电平,代表停止位,表示串口通信结束
- 空闲位:当没有数据传输时,数据线保持高电平(逻辑1)。
- 起始位:发送方将数据线拉低(逻辑0),持续一个比特的时间。这告诉接收方,数据即将开始。
- 数据位:紧接着起始位,发送8位(或5-9位)的数据。顺序是LSB先行。
- 校验位(可选):在数据位之后,可以发送一个校验位用于简单的错误检测。
- 停止位:最后,发送方将数据线拉高(逻辑1),持续1、1.5或2个比特的时间。这表示一帧数据传输结束。
6. 奇校验和偶校验?有什么缺点?
奇偶校验是一种简单的错误检测方法,通过在数据帧中添加一个校验位来实现。
6.1 奇校验
- 规则:确保数据位中“1”的个数加上校验位“1”的个数,总和为奇数。
- 例子:要发送数据
0110 0000(其中有2个1,偶数个)。为了满足奇校验,校验位应为1,使得总共有3个1(奇数)。如果接收方计算出的1的个数是偶数,则说明传输过程中可能发生了错误。
6.2 偶校验
- 规则:确保数据位中“1”的个数加上校验位“1”的个数,总和为偶数。
- 例子:要发送数据
0110 0000(其中有2个1,偶数个)。为了满足偶校验,校验位应为0,使得总共有2个1(偶数)。
6.3 缺点
奇偶校验的主要缺点是无法检测出偶数个比特位同时出错的情况。
- 例如,在奇校验中,如果数据
0110 0000(2个1)加上校验位1,总共有3个1(奇数)。如果在传输过程中,有两个比特位发生翻转,变成了0100 0001(仍然是2个1),加上校验位1,总共有3个1(奇数),校验仍然通过,但数据已经错误。 - 因此,奇偶校验只能检测出奇数个比特的错误,可靠性有限,适用于对错误容忍度较高的场景。
7. 串口通信参数
要使两个设备通过UART成功通信,它们必须配置相同的通信参数。这些参数通常以“波特率-数据位-校验位-停止位”的格式表示,例如9600 8 N 1。
- 波特率:表示每秒传输的比特数(bps)。常见的波特率有 2400、4800、9600、115200 等。通信双方的波特率必须一致。
- 数据位:表示一帧数据中实际数据的位数。常见的是8位,也可以是5、6、7位。
- 校验位:
N(None,无校验)、O(Odd,奇校验)、E(Even,偶校验)。 - 停止位:表示一帧数据结束的标志位,可以是1、1.5或2位。
8. 同步和异步
这是通信中两个重要的概念,用于区分通信双方如何协调数据传输的节奏。
8.1 同步通信
- 特点:发送方和接收方通过一根专门的时钟线(SCL)来同步数据传输。时钟信号决定了何时读取数据线上的电平状态。
- 优点:传输速率高,协议效率高。
- 缺点:需要额外的时钟线,硬件连接稍复杂。
- 例子:I2C、SPI。
8.2 异步通信
- 特点:通信双方没有专门的时钟线。它们通过约定相同的波特率来同步数据传输的速率。每个数据帧都包含起始位和停止位,用于标识数据的开始和结束。
- 优点:只需要数据线,硬件连接简单,成本低。
- 缺点:每个数据帧需要额外的起始位和停止位,传输效率略低。
- 例子:UART。
9. TTL、RS232、RS485
这三种是串口通信中常见的电气标准,它们定义了信号的电平标准,决定了通信的距离和抗干扰能力。
9.1 TTL电平
- 电平标准:高电平(逻辑1)为 3.3V 或 5V,低电平(逻辑0)为 0V。
- 特点:电平与单片机等数字芯片直接兼容,无需转换。但传输距离短(通常几米以内),抗干扰能力弱。
- 常见芯片:CH340(用于USB转TTL)。
9.2 RS232电平
- 电平标准:逻辑1 为 -3V 到 -15V,逻辑0 为 +3V 到 +15V。这是一种负逻辑。
- 特点:传输距离比TTL远(可达15米左右),抗干扰能力更强。但电平与TTL不兼容,需要电平转换芯片(如MAX232)。
- 应用:早期的电脑串口(DB9接口)。
9.3 RS485电平
- 电平标准:采用差分信号传输。逻辑1 为两根线之间的电压差为 +2V 到 +6V,逻辑0 为 -2V 到 -6V。
- 特点:抗干扰能力极强,传输距离非常远(可达1200米以上),支持多点通信(可挂载多个设备)。
- 应用:工业控制、远距离数据采集。
10. Modbus协议格式
Modbus是一种广泛应用于工业电子设备中的通信协议,它建立在物理层(如RS232、RS485)之上,定义了设备之间请求和应答的数据格式。这里以Modbus RTU模式为例,介绍其报文格式。
一个典型的Modbus RTU报文帧结构如下:
| 起始码 | 地址码 | 功能码 | 数据位 | 校验码 | 结束码 |
|---|---|---|---|---|---|
| 0xAA | 0x01 | 0x01 | 0x00 0x42 | 0xEE | 0xBB |
- 起始码:标志一帧报文的开始。
- 地址码:目标从机设备的地址(1-247)。
- 功能码:告诉从机要执行什么操作。例如:
0x01:控制LED灯0x02:控制数码管0x03:控制蜂鸣器0x04:读取传感器温度
- 数据位:功能码所需的参数,如控制指令、数据地址等。
- 校验码:用于错误检测,Modbus RTU通常使用CRC校验。
- 结束码:标志一帧报文的结束。
主从应答模式:在Modbus网络中,主机(如PC或PLC)发起所有通信。从机(如单片机)收到主机指令后,解析指令并执行相应操作,然后回复一个应答帧给主机。应答帧的功能码最高位通常置1,以区分是主机请求还是从机应答。
例如,主机发送指令0xAA 0x01 0x01 0x00 0x42 0xEE 0xBB控制地址为0x01的从机点亮LED。从机成功执行后,会回复一个应答帧,如0xAA 0x01 0x81 0x00 0x42 0x6E 0xBB,其中功能码0x81的最高位为1,表示这是从机的应答。