1、简介
UART(Universal Asynchronous Receiver Transmitter)也称作通用异步收发器,是一种广泛应用于嵌入式领域的串行、异步、全双工通信协议。UART的应用场景非常广泛,比如上位机和下位机之间的通信、外接各种模块,比如GPS或者蓝牙模块等等。UART作为串行通信,利用一条传输线将数据按bit进行顺序传送,特点是通信线路简单,利用简单的线缆就可以实现通信,降低成本,适用于远距离通信,但传输速度较慢的场合。
2、连接方式
UART通道有两条数据线。设备的每个通道上都有一个RX引脚和一个TX引脚(RX用于接收数据,TX用于发送数据)。一个设备通道的RX引脚要和另一个设备通道的TX引脚相连接,即一个收一个发。
可以注意到,UART作为异步通信总线,是没有时钟线的。它是通过通信的两个设备预先设置相同的数据格式,包括起始位 、数据校验位、结束位等,以及相同的波特率,来完成一次数据的接收\发送(即遵循相同的传输协议)。当总线空闲时,总线上为高电平,当要发送数据时,总线电平将由高变低,以此表示数据发送即将到来。
3、数据格式
UART传输的数据被封装成数据包,每个数据包 包含一个起始位,5-8个数据位(取决于UART的具体设置),一个可选的奇偶校验位以及1个停止位或2个停止位。
- 起始位:UART数据传输线在空闲状态时保持高电平。当master先发出一个逻辑“0”信号时,表示数据传输的开始。
- 数据位 :可以选择的值有5,6,7,8这四个值,可以传输这么多个值为0或1的bit位 ,一般传8位。
- 校验位:在串口通信中一种简单的检错方式。有三种设置方式:奇偶校验位、固定校验位、无校验位。
奇偶校验位:串口会设置校验位,用一个值来确保传输的数据有偶数个或奇数个1。简单来说,奇校验会保证一个数据包中所有1的个数为奇数。偶校验会保证一个数据包中所有1的个数为偶数。(例如,如果数据是111,那么对于偶校验,校验位就为1,保证1的个数为偶数个,即4个。 对于奇校验,校验位就为0,保证1的个数为奇数个,即3个。)
固定校验位:串口简单设置校验位,校验位始终为1或者0,无检错作用。可以用于判断是否有噪声干扰以及数据传输是否不同步。
无校验位:不设置校验位。
- 停止位:字符数据结束的标记。由于数据在传输线上是定时的,并且每个设备都有自己的时钟,所以在通信时两个设备之间很可能会出现小的不同步。因此停止位不仅表示传输的结束,而且还为计算机提供了纠正时钟的机会。停止位越多,数据传输越稳定,但传输速度也越慢。
4、波特率
波特率是指一个设备在单位时间内发送或接收了多少码元的数据(在这里一个码元包含一个bit),是对符号传输的一种度量。表示单位时间内传输符号的个数(传符号率)。说白了,波特率是串口数据的传输速度,即Bit/s,常见的波特率有:9600,19200,38400,57600,115200。假设目前UART的配置为,1个起始位,8个数据位,0个校验位,1个停止位,那么9600的波特率,可以计算出每一位数据的时间宽度为104us,那么传输一个数据包(也就是10 bit 数据)需要的时间为 1.04 毫秒。
5、code
测试代码基于linux操作系统,开发板为 Bananapi-r2-pro。