文章首发于同名微信公众号:DigCore
欢迎关注同名微信公众号:DigCore,及时获取最新技术博文。
在上一篇《嵌入式硬件通信接口协议-UART(一)协议基础》中,简单而细致描述了UART的各个配置项以及通信过程的信号时序,此篇将继续介绍UART接口在不一样的电气特性下,所使用的一些接口规范。
实际上UART只是对信号时序进行定义,而未定义其电气特性。在不一样的应用场景下,不同的走线空间,不同程度干扰的恶劣环境,不同的平台和和设备间,要使用UART进行通信,信号管脚的电气特性差异就是个很大的障碍,并且在很多低功耗设备的信号电平一般都较低,因此,应对不一样的应用场景和环境,而制定出不一样的电气特性协议。
对于不同平台或者使用环境,信号管脚的电气特性依次可以分为TTL/CMOS、RS232、RS422、RS485。
TTL电平,逻辑“0”等于0V电压,逻辑“1”等于+5V电压。
CMOS电平,逻辑“0”接近0V电压,逻辑“1”接近电源电压(3.3V或其他)。
TTL电路与CMOS电路比较
1)TTL电路是电流控制器件,而CMOS电路是电压控制器件。
2)TTL电路的速度快,传输延迟时间短(5-10ns),但是功耗大。
CMOS电路的速度慢,传输延迟时间长(25-50ns),但功耗低。
CMOS电路本身的功耗与输入信号的脉冲频率有关,频率越高,芯片即越热,这是正常现象。
常见的,在嵌入式开发时,UART的电平信号由MCU芯片决定,并且与芯片有关。
RS232完整缩写EIA-RS-232C 标准,其中EIA是Electronic Industry
Association代表美国电子工业协会,RS是Recommended Standard
推荐标准,232表示标识号,C表示第三次修改。
它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。
由此可见,RS232才是UART的鼻祖!
RS232对电气特性、逻辑电平和各种信号线功能都作了规定。
在TxD和RxD信号管脚上:
逻辑“1”电压范围-3V~-15V
逻辑“0”电压范围+3~+15V
在RTS、CTS、DSR、DTR和DCD等控制线上:
信号有效(接通,ON状态,正电压)电压范围+3V~+15V
信号无效(断开,OFF状态,负电压)电压范围-3V~-15V
可见RS232的信号管脚特性为负逻辑电平的信号。具体可以观察如下一张MAX232芯片的数据波形:
上述的示波器截图中,通道1(橙色)是RS232电平,通道2(绿色)是UART电平。
UART电平是数据输出的bit流逐一对应的电平,bit流依次是起始位“0”、数据“0011,1011”(即DigCore的标志0xDC的二进制LSB排列)、奇校验位“0”、停止位“1”,最后引脚处于高电平的空闲态;
而负逻辑电平的RS232的信号电压不仅恰好相反,而且电压大小也不一样。在MAX232芯片上,逻辑“0”对应的是+10V,逻辑“1”对应的是-10V。
同时RS232还定义了机械接口特性,常见的有DB-9接口和DB-25接口,其接口定义如下表:
针脚 | 信号 | 定义 | 作用 | |
---|---|---|---|---|
DB-9 | 1 | DCD | 载波检测 | Received Line Signal Detector(Data Carrier Detect) |
2 | RXD | 接收数据 | Received Data | |
3 | TXD | 发送数据 | Transmit Data | |
4 | DTR | 数据终端准备好 | Data Terminal Ready | |
5 | SGND | 信号地 | Signal Ground | |
6 | DSR | 数据准备好 | Data Set Ready | |
7 | RTS | 请求发送 | Request To Send | |
8 | CTS | 清除发送 | Clear To Send | |
9 | RI | 振铃提示 | Ring Indicator | |
DB-25 | 1 | 屏蔽地线 | ||
2 | TXD | 发送数据 | Transmit Data | |
3 | RXD | 接收数据 | Received Data | |
4 | RTS | 发送请求 | Request To Send | |
5 | CTS | 发送清除 | Clear To Send | |
6 | DSR | 数据准备好 | Data Set Ready | |
7 | SG | 信号地 | Signal Ground | |
8 | DCD | 载波检测 | Received Line Signal Detector(Data Carrier Detect) | |
9 | 发送返回(+) | |||
10 | 未定义 | |||
11 | 数据发送(-) | |||
12~17 | 未定义 | |||
18 | 数据接收(+) | |||
19 | 未定义 | |||
20 | DTR | 数据终端准备好 | Data Terminal Ready | |
21 | 未定义 | |||
22 | RI | 振铃 | Ring Indicator | |
23~24 | 未定义 | |||
25 | 接收返回(-) |
RS-422标准全称是“平衡电压数字接口电路的电气特性”,该协议制定了接口电路的电气特性。
除了引脚的电气特性,其他规范基本都是沿用RS232的规范。
RS-422的信号线采用的是差分传输方式,即原来的TxD、RxD信号线,此时分别改用两根线来完成,即TxD+和TxD-、RxD+和RxD-两组,并且利用两根线之间的电压差值来表示数据的逻辑“1”和逻辑“0”。
逻辑“1”的差分信号电压差范围:+2~+6V
逻辑“0”的差分信号电压差范围:-6~-2V
最大通信距离:1500米
通信速率范围:100 kbit / s - 10 Mbit / s
EIA于1983年在RS-422基础上制定了RS-485标准,由之前的4线改为2线传输,即全双工改为半双工,增加了多点、双向通信能力。2线制的半双工,仅由2差分线A、B来连接,其中A线的“高”表示逻辑“0”而低表示逻辑“1”;B线的“高”表示逻辑“1”,“低”表示逻辑“0”。
看一张图就可以明白了,如下图引用的是维基百科RS485介绍的时序图片:
参考资料:
维基百科UART:https://en.wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter
维基百科RS-482:https://en.wikipedia.org/wiki/RS-422
维基百科RS-485:https://en.wikipedia.org/wiki/RS-485