UART,即通用异步串行通信,是最常用的通信协议之一。本文结合实际通信数据,对UART串行通信协议进行详细介绍。
接口定义
TXD:数据发送
RXD:数据接收
GND:公共地
标准的UART只能支持双机通信,通信时一端的数据发送对应的是另一端的数据接收,即通信双方的TXD与RXD需要交叉连接,双方的GND则需要连接在一起。如下图1所示:
图1、UART双机通信连接示意图
波特率
波特率,也称作比特率,是数据传输的速率,单位为bps(bits per second),即每秒传输的数据位(bit)数,也就是传输一位数据所用的时间的倒数。理论上波特率可以是任意值,但有一些值比较常用的,比如2400bps、9600bps、19200bps、115200bps等。
举个例子,如波特率为9600bps,那么传输一个数据位(bit)需要的时间就是1s/9600≈104.2us。
数据格式
一个UART通信数据帧的格式如图2所示:
图2、UART通信数据帧格式示意图
- 起始位
当没有数据传输即通信空闲时,UART要求通信线路保持为高电平,即‘1’。那么每当有效数据传输之前,UART要求先发送一个bit宽度的低电平,即发送一个‘0’,用于标识一帧通信数据的开始,即起始位。
- 数据位
起始位之后就要开始传输真正的有效数据了,有效数据一般都是8位的,也有7位或9位的情况。数据位要求先发送最低位,最后发送最高位,即低位在前、高位在后。
- 校验位
校验位是一个可选位,视具体情况,可以有也可以没有。校验位通常用来检查数据传送的正确性,有以下几种方式:
A. 无校验(no parity)。
B. 奇校验(odd parity): 若数据位中“1”的总数是偶数,则校验位为“1”;若“1”的总数是奇数,则校验位为“0”。
C. 偶校验(even parity):若数据位中“1”的总数是偶数,则校验位为“0”;若“1”的总数是奇数,则校验位为“1”。
D. 1校验(mark parity):校验位始终为“1”(不常用)。
E. 0校验(space parity):校验位始终为“0”(不常用)。
- 停止位
停止位是一帧通信数据的结束标志,必须是高电平,即‘1’,其宽度可以是1位、1.5位或2位。
通信数据实例
图3是使用Kingst LA5016逻辑分析仪采集的一帧UART串行通信的实际数据。
图3、UART串行通信实例波形
逻辑分析仪不但可以采集到通信波形,还可以根据波形自动解析出数据,如图中的0xE4所示就是自动解析出的8位有效数据的具体数值,而最前方的绿色圆点代表的是起始位,结尾的红色方框代表的是停止位,本例中没有使用校验位。