接口协议(3) - UART
UART(Universal Asynchronous Receiver and Transmitter),通用异步收发器(串口),还有一种USART(Universal Synchronous Asynchronous Receiver and Transmitter),通用同步异步收发器,后者比前者多了同步时钟信号,两者支持全双工,半双工,单向通信中的一种或几种。一般是LSB通信,有些支持可配置的MSB/LSB通信。
1. 通信速率
有很多种不同速率,常见的有4800、9600、38400、115200、256000 bps等波特率,查了一些厂商的数据手册,常见的可支持到4/4.5/5Mbps。
2. UART接口
有0(低电平)和1(高电平)两种数据状态,在空闲时,数据线应该保持在逻辑高电平状态。
2.1 DB9
DTE,数据终端;DCE,数据设备。
ID | Name | Symbol | Type | Comment |
1 | 载波检测 | DCD | Output | Data Carrier Detect,数据载波检测,用于DTE 告知对方,本机是否收到对方的载波信号。 |
2 | 接收数据 | RXD | Input | Receive Data,数据接收信号,即输入。 |
3 | 发送数据 | TXD | Output | Transmit Data,数据发送信号,即输出。两个设备之间的 TXD 与 RXD 应交叉相连。 |
4 | 数据终端就绪 | DTR | Output | Data Terminal Ready,数据终端就绪,用于DTE向对方告知本机是否已准备好。 |
5 | 地线 | GND | - | Ground,信号地线。 |
6 | 数据设备就绪 | DSR | Input | Data Set Ready,数据发送就绪,用于DCE告知对方本机是否处于待命状态。 |
7 | 请求发送 | RTS | Output | Request To Send,请求发送,DTE请求DCE本设备向DCE端发送数据。 |
8 | 允许发送 | CTS | Input | Clear To Send,允许发送,DCE回应对方的RTS发送请求,告知对方是否可以发送数据。 |
9 | 响铃指示 | RI | Input | Ring Indicator,响铃指示,表示DCE端与线路已接通。 |
DB9接口,当两个设备连接时,其中TXD和RXD交叉连接,CTS和RTS交叉连接,DTR和DSR交叉连接,串口线中的RTS、CTS、DSR、DTR及DCD信号,使用逻辑1表示信号有效,逻辑0表示信号无效。
2.2 流控制
TXD:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。
RXD:接收数据串行输。通过过采样技术来区别数据和噪音,从而恢复数据。
RTS:清除发送,如果使能RTS流控制,当UART接收器准备好接收新数据时就会将RTS变成低电平;当接收寄存器已满时,RTS将被设置为高电平。
CTS:发送请求,如果使能CTS流控制,发送器在发送下一帧数据之前会检测CTS引脚,如果为低电平,表示可以发送数据,如果为高电平则在发送完当前数据帧之后停止发送。
2.3 TXD/RXD
只使用TXD和RXD两条线,这种实际使用比较多。
3. 起始信号
1 bit逻辑0表示开始。
4. 结束信号
可选0.5/1/1.5/2 bit个逻辑1表示结束。
5. 数据位
可选5/6/7/8 bit逻辑位,如ASCII是7位,扩展BCD码是8位,LSB(小端)传输,有些器件可配置MSB/LSB。
6. 校验位
ID | Name | Type | Comment |
0 | 奇校验 | odd | 奇校验要求有效数据和校验位中"1"的个数为奇数。 |
1 | 偶校验 | even | 偶校验要求有效数据和校验位中"1"的个数为偶数。 |
2 | 0校验 | space | 0校验是不管有效数据中的内容是什么,校验位总为"0"。 |
3 | 1校验 | mark | 1校验是不管有效数据中的内容是什么,校验位总为"1"。 |
5 | 无校验 | noparity | 无校验则没有校验位。 |
7. 空闲位
处于逻辑1状态,表示当前线路上没有数据。
8. 工作原理
一般是一帧一帧发送的,而不是连续发送,一帧即起始位 + 数据位 + 校验位 + 停止位。
发送数据过程:空闲状态,线路处于高电位;当收到发送数据指令后,拉低线路一个数据位的时间,接着数据按低位到高位依次发送,数据发送完毕后,接着发送奇偶校验位和停止位(停止位为高电位),一帧数据发送结束。
接收数据过程:空闲状态,线路处于高电位;当检测到线路的下降沿(线路电位由高电位变为低电位)时说明线路有数据传输,按照约定的波特率从低位到高位接收数据,数据接收完毕后,接着接收并比较奇偶校验位是否正确,如果正确则通知后续设备准备接收数据或存入缓存。
8.1 TXD/RXD
(此为过采样方式,只是其中一种方式)由于UART是异步传输,没有传输同步时钟。为了能保证数据传输的正确性,UART采用16倍数据波特率的时钟进行采样。每个数据有16个时钟采样,取中间的采样值,以保证采样不会滑码或误码。一般UART一帧的数据位数为8,这样即使每个数据有一个时钟的误差,接收端也能正确地采样到数据。
8.2 流控制
RTS流控制
如果RTS流控制被使能,只要UART接收器准备好接收新的数据,RTS就变成有效(接低电平)。当接收寄存器内有数据到达时,RTS被释放,由此表明希望在当前帧结束时停止数据传输。
CTS流控制
如果CTS流控制被使能,发送器在发送下一帧前检查CTS输入。如果CTS有效(被拉成低电平),则下一个数据被发送,否则下一帧数据不被发出去。若CTS在传输期间被变成无效,当前的传输完成后停止发送。
9. Others
同步模式
USART,在UART的基础上增加了时钟线,USART和UART的TX保持一致,但RX采样方式从电平方式变为边沿方式,时钟拥有极性(CPOL)和相位(CPHA),类似于SPI,拥有4种模式:
SPI Mode | CPOL | CPHA | 采样时刻 |
0 | 0 | 0 | 奇数边沿 |
1 | 0 | 1 | 偶数边沿 |
2 | 1 | 0 | 奇数边沿 |
3 | 1 | 1 | 偶数边沿 |
红外模式
IrDA是一个半双工通信协议。一般支持到115200bps,如果发送器忙,IrDA接收线上的任何数据将被IrDA解码器忽视;如果接收器忙,从UART到IrDA的TX上的数据将不会被IrDA编码。
单线模式
Single-wire模式下,TX和RX在硬件控制器内部互联,对外只使用TX,不使用RX,一般支持全双工、半双工其中一种或多种。
智能卡模式
SmartCard模式是一个单线半双工通信协议。8位数据位加校验位,发送和接收时为1.5个停止位,对外只使用TX线,不使用RX线,硬件控制器内部使用SW_RX(Software RX)和TX相连。在发送开始位和数据字节期间,发送器的输出使能位TX_EN被置起,在发送停止位期间被释放(弱上拉)。如果TX_EN不被使用,在停止位期间TX被拉到高电平:这样的话,只要TX配置成开漏,接收器也可以驱动这根线。