接口协议(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配置成开漏,接收器也可以驱动这根线。

posted @ 2022-09-05 12:41  this毛豆  阅读(824)  评论(0编辑  收藏  举报