目录
1.0 UART概念
UART,全称是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),是一种双向、串行、异步的通信总线。典型的UART一般使用3根线,分别是发送线(TX)、接收线(RX)和地线(GND),无时钟线,故称为异步串行通信接口。通信时必须将双方的TX和RX交叉连接并且GND相连才可正常通信,如下图1所示:
图1 UART接线方式
UART可以实现全双工通信,常用于控制系统与外设通信,包括控制器与控制器,控制器与终端设备等。UART通信线路简单,成本低,传输距离远,但传输速度慢。
1.1 UART通信原理
1.1.1 接线方式
如上图1所示,发送端的TX线要对接接收端的RX线。
1.1.2 数据传输方式
UART只用1根线发送或者接收数据,数据在总线上是一位一位串行地传输。
1.1.3 数据帧格式
UART在协议层中规定了数据帧的格式容,具体包括起始位、数据位、校验位以及停止位,通讯的双方必须将数据帧的格式约定一致才能正常收发数据;并且每传输一帧数据时,总是以“起始位”开始,以“停止位”结束,一帧数据之间没有固定的时间间隔要求。
1.1.4 通信速率
UART的通信速率使用波特率来表示,是每秒传输的数据位数,单位bps(bits per second),如常见的波特率115200,即表示1秒传输115200bit数据,由此可计算出每bit所维持时间约为1/115200s≈8.62us。UART没有时钟线,是异步串行通信接口,故通讯的双方必须设置相同的波特率才能正常收发数据。
1.2 UART通信协议
UART作为异步串口下通信协议的一种,工作原理是将数据的字节一位接一位地传输。协议如下图:
1.2.1 空闲位
空闲时数据线为高电平状态,代表无数据传输;
1.2.2 起始位
UART发送端发送1位低电平并保持一定时间(一位数据的时间就是波特率的倒数),表示传输字符的开始;当UART接收端检测到高电压到低电压转换时,它开始以设定的波特率频率读取数据帧中的数据;
1.2.3 数据位
在起始位之后,UART发送端开始发送数据,数据帧长度可以是5 位到 8 位;
1.2.4 校验位
数据位传送完成后,要进行奇偶校验,串口校验分几种方式:
(1)无校验(no parity):不进行数据校验;
(2)奇校验(odd parity):数据位中’1’的个数加上这个校验位是奇数,称之为奇校验。所以当数据为中’1’的数目是偶数,则校验位为’1’,如果为奇数,校验位为’0’。
(3)偶校验(even parity):数据位中’1’的个数加上这个校验位是偶数,称之为偶校验。所以当数据为中’1’的数目是偶数,则校验位为’0’,如果为奇数,校验位为’1’。
(4)固定1校验:校验位始终为1;
(5)固定0校验:校验位始终为0;
1.2.5 停止位
它是数据传输结束标志,停止位长度可选,可以是1位、1.5位、2位的高电平。
1.2.6 数据传输实例
设置数据位是8位,停止位是1位,如果我们传输数据0X33(00110011),因为是LSB在前,所以8位数据依次是11001100,如下图:
1.3 常见串口介绍
UART是串口通信中的一种,常见的串口还有RS232、RS422、RS485。简单的说,这些串口就是为了适应不同的环境条件而使用了不同的电平标准。假如微处理器和板载的蓝牙模块通信时,一般就使用TTL电平引脚直接连接即可。假如微处理器在工业现场,需要连接一个几十米外的装置,则应该考虑将TTL电平转为RS232、 RS422、 RS485。对于RS232、RS422、RS485等接口,仅仅是把TTL电平转换为不同的电平值,或者转换为差分信号。
按电平分类,常见通信接口标准如下图:
1.4 常见串口通信方式
1.4.1单工
数据传输只在一个方向上传输,只能你给我发送或者我给你发送,方向是固定的,不能实现双向通信,如:室外天线电视、调频广播等。
1.4.2 半双工
比单工先进一点,传输方向可以切换,允许数据在两个方向上传输,但是某个时刻,只允许数据在一个方向上传输,如:对讲机,IIC, CAN,SDIO,USB。
1.4.3 全双工
允许数据同时在两个方向传输。发送和接收完全独立,在发送的同时可以接收信号,或者在接收的同时可以发送。它要求发送和接收设备都要有独立的发送和接收能力,如:电话通信,SPI,UART等。
1.5 硬件流控
硬件流控,顾名思义,就是通过硬件接口控制数据收发,目的是协调收发双方,使数据不会丢失。硬件流控设涉及到RTS和CTS两个口,收发双方都有各自的RTS和CTS,如通信双方A、B,那么A的RTS就与B的CTS相连,A的CTS就与B的RTS相连。
RTS (Require To Send):是一个输出信号,用于指示设备是否可以接收数据。低电平有效,RTS为低电平时,说明设备可以接收数据;高电平时则表示设备不能接收数据。
CTS (Clear To Send):为输入信号,用于判断是否可以向对方发送数据。低电平有效,CTS为低电平时,说明可以向对方发送数据;高电平时则不能向对方发送数据。
如上图所示,设备A与设备B通信,现在A给B发送数据。当B出现某种情况(可能是接受FIFO快要满了)的时候,B的RTS拉低高;A的CTS是与B的RTS相连的,则A检测到它的CTS拉高,就知道B在告诉他暂时不要再发了。等到B可以继续接收数据的时候,B的RTS拉低,这时候A的CTS检测到低电平 ,A就可以继续发送数据了。