常用通信协议TTL、RS232/RS485/RS422、CAN、IIC、SPI、USB整理
前言
最近在进行项目方案设计时,涉及到常用通信接口的选型,包括TTL、RS232、RS485、RS422、CAN、IIC、SPI
等常用通信协议,这里对常见的通信协议进行一个整理,在需要的时候可以进行回顾,这里参考几个优秀博文并进行整理,大家也可以去看看。
一、串行通信与并行通信
1.1 串行通信
串行通信接口(cluster communication port
)简称串口,即常说的COM
接口,是采用串行通信方式的扩展接口。串行接口是指数据一位一位地顺序传送,串口可以算是一个泛称,一般指代的是串口时序标准。UART
、RS232
、RS485
、TTL
都遵循着类似的通信时序协议,因此都被通称为串口。
串行通信(serial communication
)是指计算机主机与外设之间以及主机系统与主机系统之间数据的串行传送。使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。串行通信按照发送时钟源和接收时钟源是否需要保持一致,又可分为同步通信和异步通信两种。
1.2 并行通信
并行通信(Parallel communication
)就是指数据的每一位同时在多根数据线上发送或者接收。可以以字或字节为单位并行进行。并行通信速度快,但用的通信线多、成本高,故不宜进行远距离通信。计算机或PLC
各种内部总线就是以并行方式传送数据的。
总结:串行通信是一种概念,是指一个bit
一个bit
的收发数据,相对于并行通信可一次性可以同时收发n个bit
而言。包括普通的串口通信,包括IIC
,包括SPI
等等。串口通信是一种通信手段/方式,是相对于以太网方式、红外方式、蓝牙方式、usb
方式(usb
广义也算串行通信)等而言,是一种比较低级的通信手段。
二、常用通信协议
2.1 UART
UART
(Universal Asynchronous Receiver/Transmitter
),意为通用异步收发传输器,该总线双向通信,可以实现全双工传输和接收。UART
包含TTL
电平的串口和RS-232
电平的串口,使用UART
通信的双方设备都需要遵从UART
协议。
UART
是串行通信的一种,重点是异步,和同步相对应,意思是不需要同步的时钟,通信两端预先约定bit
的传输速率(每秒传多少bit
),而不是由时钟触发的。
在嵌入式设计中,UART
用于主机与辅助设备通信。UART
是实现串口收发的逻辑电路(硬件形式),这部分可以独立成芯片,也可以作为模块嵌入到其他芯片里,单片机、SOC
、PC
里都会有UART
模块,例如STM32
单片机里有两种UART
模块,USART
和UART
,前者可以同步通信,而后者只能异步通信。一般电脑是没有uart
接口的(TTL
电平),我们可以通过电脑的USB
接口和单片机通信,只需一个USB
转串口模块插到USB
接口上,装上驱动,另一边接单片机即可。有很多可以USB
协议转为串口协议的芯片,如ch340
,cp2102
,pl2303
等。
TX
– 数据发送接口RX
– 数据接受接口
两个设备间将TX
与RX
相连,RX
与TX
相连即可正常工作。
2.1.1 TTL电平
TTL
是Transistor-Transistor Logic
的简写,是一种电平逻辑,晶体管-晶体管逻辑。通常我们采用二进制来表示数据,为了表示二进制,需要用高低电平表示这些二进制数,3.3V/5V
等价于逻辑“1
”,0V
等价于逻辑“0
”。UART
特指单片机的UART
端口,使用的就是TTL
电平。
-
标准TTL电平逻辑
(1)输出电路:电压大于等于(≥)2.4V
为逻辑1;电压小于等于(≤)0.8V
为逻辑0;
(2)输入电路:电压大于等于(≥)2.0V
为逻辑1;电压小于等于(≤)1.2V
为逻辑0; -
CMOS电平
(1)输出电路:电压大于等于(≥)0.9×Vcc
为逻辑1;电压小于等于(≤)0.1×Vcc
为逻辑0;
(2)输入电路:电压大于等于(≥)0.7×Vcc
为逻辑1;电压小于等于(≤)0.3×Vcc
为逻辑0;
嵌入式里面说的串口,一般是指UART
口,而TTL
、RS-232
、RS-485
是指的电平标准(电信号)。
2.2 RS232
RS-232
接口符合美国电子工业联盟(EIA
)制定的串行数据通信的接口标准,全双工,其中 RS
为英文 “Recomend Standard
” 的缩写,中文翻译为“推荐标准”,232
为标识号。原始编号全称是EIA-RS-232
(简称232
,RS232
)。它被广泛用于计算机串行接口外设连接,连接电缆和机械、电气特性、信号功能及传送过程,其输出的电平称为 RS232
电平。
2.2.1 RS-232电平逻辑
RS-232
不同于TTL
的电平逻辑,为负逻辑,最简单的RS232
通信由三条数据线组成,即 TxD
、RxD
和GND
。负12V
代表高电平,即-15V ~ -3V
为逻辑1
,正12V
代表低电平,即+3V ~ +15V
为逻辑0
,电压也有标准范围。这里的电平,是TXD
线(或者RXD
线)相对于 GND
的电压。
根据设备供电电源的不同,+-5、+-10、+-12
和+-15
这样的电平都是可能的。
2.2.2 RS-232标准的不足
经过许多年来RS-232
器件以及通信技术的改进,RS-232
的通信距离已经大大增加。由于RS-232 接口标准出现较早,难免有不足之处,主要有以下四点:
- 接口的信号电平值较高,易损坏接口电路的芯片,又因为与TTL 电平不兼容故需使用电平转换电路方能与TTL 电路连接。
- 传输速率较低,在异步传输时,波特率为
20Kbps
。现在由于采用新的UART
芯片16C550
等,波特率达到115.2Kbps
。 - 接口使用一根信号线和一根信号返回线而构成共地的传输形式, 这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
- 传输距离有限,最大传输距离标准值为
50
米,实际上也只能用在15
米左右。
2.3 RS-485
RS-485
和RS-232
一样,都是串行通信标准,现在的标准名称是TIA/EIA-485-A
,习惯称为RS-485
标准,半双工,使用该标准的数字通信网络能在远距离条件下以及电子噪声大的环境下有效传输信号。RS-485
使得廉价本地网络以及多支路通信链路的配置成为可能,而且增加了联网功能。
针对RS-232
串口标准的局限性,RS-485/422
采用平衡发送和差分接收方式实现通信:发送端将串行口的TTL
电平信号转换成差分信号A
、B
两路输出,经过线缆传输之后在接收端将差分信号还原成TTL
电平信号。
由于传输线通常使用双绞线,又是差分传输,所以又极强的抗共模干扰的能力,总线收发器灵敏度很高,可以检测到低至200mV
电压,故传输信号在千米之外都是可以恢复。
RS-485/422
总线一般最大支持32
个节点,如果使用特制的485
芯片,可以达到128
个或者256
个节点,最大的可以支持到400
个节点。
2.3.1 RS-485电平逻辑
RS-485
和RS-232
单端传输不一样,是差分传输,使用一对双绞线,其中一根线定义为A
,另一个定义为B
,一般收发器内部是一个发送器加一个收发器组成。对于使能信号,字母上面加一横的为低电平有效,不加的为高电平有效。
逻辑“1
”以两线间的电压差为+(2 ~ 6)V
表示;逻辑“0”以两线间的电压差为-(2 ~ 6)V
表示,使能端起作用和其他状态时为高阻态。
2.3.2 RS-232与RS-485对比
- 抗干扰性:
RS485
接口是采用平衡驱动器和差分接收器的组合,抗噪声干扰性好。RS232
接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰。 - 传输距离:
RS485
接口的最大传输距离标准值为1200
米(9600bps
时),实际上可达3000
米。RS232
传输距离有限,最大传输距离标准值为50
米,实际上也只能用在15
米左右。 - 通信能力:
RS-485
接口在总线上是允许连接多达128
个收发器,用户可以利用单一的RS-485
接口方便地建立起设备网络。RS-232
只允许一对一通信。 - 传输速率:
RS-232
传输速率较低,在异步传输时,波特率为20Kbps
。RS-485
的数据最高传输速率为 10Mbps 。 - 信号线:
RS485
接口组成的半双工网络,一般只需二根信号线。RS-232
口一般只使用RXD
、TXD
、GND
三条线 。 - 电气电平值:
RS-485
的逻辑"1"以两线间的电压差为+(2~6) V
表示;逻辑"0"以两线间的电压差为-(2~6)V 表 示 。在 RS-232-C 中任何一条信号线的电压均为负逻辑关系。即:逻辑"1
",-5~-15V
;逻辑"0 "+5~+15V
。
2.4 RS-422
RS-422
的电气性能与RS-485
近似一样。主要的区别在于:
RS-485
有2
根信号线:发送和接收都是A
和B
。由于RS-485
的收与发是共用两根线,所以不能够同时收和发(半双工)。RS-422
有4
根信号线:两根发送(Y、Z
)、两根接收(A、B
)。由于RS-422
的收与发是分开的,所以可以同时收和发(全双工)。- 支持多机通信的
RS-422
将Y-A
短接作为RS-485
的A
、将RS-422
的Z-B
短接作为RS-485
的B
可以这样简单转换为RS-485
。
注:
RS422 针脚定义:
1.英式标识为 TDA(-) 、TDB(+) 、RDA(-) 、RDB(+)、GND
2.美式标识为 Y 、Z 、 A 、 B 、 GND
3.中式标识为 TXD(+)/A 、TXD(-)/B 、RXD(-) 、RXD(+)、GND
具体的需要查看422芯片手册,并和对端确认好。
很多人往往都误认为RS-422
串行接口是RS-485
串行接口的全双工版本,实际上,它们在电器特性上存在着不少差异,共模电压范围和接收器输入电阻不同使得该两个标准适用于不同的应用领域。
RS-485
串行接口的驱动器可用于RS-422
串行接口的应用中,因为RS-485
串行接口满足所有的RS-422
串行接口性能参数,反之则不能成立。对于RS-485
串行接口的驱动器,共模电压的输出范围是-7V
和+12V
之间;对于RS-422
串行接口的驱动器,该项性能指标仅有±7V
。RS-422
串行接口接收器的最小输入电阻是4KΩ
;而RS-485
串行接口接收器的最小输入电阻则是12KΩ
。
2.5 USB
USB
是Universal Serial Bus
(通用串行总线)的缩写,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯,是应用在PC
领域的接口技术,USB
接口的特点是传输速度快,支持热插拔,可连接多个设备。
一条USB
传输线分别由地线、电源线、D+
和D-
四条线构成,D+
和D-
是差分输入线,它使用的是3.3V
的电压(与CMOS
的5V
电平不同),而电源线和地线可向设备提供5V
电压,最大电流为500mA
(可以在编程中设置)。USB
设备可以直接和HOST
通信,或者通过Hub
和Host
通信。一个USB
系统中仅有一个USB
主机,设备包括USB
功能设备和USB
HUB
,最多支持127
个设备。物理连接指的是USB
传输线。在USB 2.0
系统中要求使用屏蔽双绞线。
2.5.1 USB 速率
USB1.0
:低速模式(low speed
):传输速率为1.5Mbps
;USB1.1
:全速模式(full speed
):传输速率为12Mbps
;USB2.0
:向下兼容,高速模式(high speed
):25~480Mbps
;USB3.0
:向下兼容,(super speed
):理论上最高达5Gbps
,实际中,也就是high speed 的10倍左右;USB3.1
:Gen2
超高速(SuperSpeed+
)传输速率为10Gbps
。
2.5.2 USB接口定义
Pin | Name | 颜色 |
---|---|---|
1 | VBUS/+5V | 红色 |
2 | D-/DM | 白色 |
3 | D+/DP | 绿色 |
4 | GND | 黑色 |
USB是普遍使用的一种高速通信接口,和串口完全是两个概念。虽然也是串行方式通信,但由于USB的通信时序和逻辑电平标准都和串口完全不同,因此和串口无关。USB是高速的通信接口,用于PC连接各种外设,U盘、键鼠、移动硬盘、当然也包括“USB转串口”的模块。参考链接:USB协议基本知识_u010142953的博客-CSDN博客_usb协议栈
2.6 CAN总线
CAN
总线涉及的东西比较多,我之前也用过一些,这里简单分享一下,这里可以具体查看小麦大叔的博客CAN总线简易入门教程,比较全面。
CAN
(Controller Area Network
)是一种功能丰富的串行总线标准,支持多主机,多从机的优点,广泛应用在汽车领域,一辆车所有控制器,传感器,电子设备直接的通信只需要两条线就够了,大大优化了整车的布线。
2.6.1 CAN电平逻辑
CAN
是串行异步通讯,只有CAN_HIGH
和CAN_LOW
两条差分信号线,数据通过差分信号的方式进行通讯,其优点就是可以增加信号的抗干扰能力,抑制共模信号的干扰;以下图片引自小麦大叔CAN总线简易入门教程。
我们可以简单地理解一下,当
CAN_HIGH
减去CAN_LOW
大于某个阈值的时候,可以把它当做逻辑高,反之,当小于某一个阈值时,就变成逻辑低。
2.6.2 CAN连接方式
CAN
总线支持多个节点挂载在总线上,比较类似I2C
总线,可以在SCL
和SDA
上挂载多个从机,具体如下图所示;
不过CAN
总线其实没有主从的概念,每个设备都是一个节点(Node
),节点直接可以相互通讯,相较于I2C
总线,CAN
总线设置了终端电阻,常见的一种闭环连接模式,相对的还有开环的连接模式。
这里仅对CAN做简单介绍,具体可以参考小麦大叔博客~
2.7 IIC
I2C
总线是由Philips
公司开发的一种简单、半双工、双向二线制同步串行总线。它只需要两根线(SDA
、SCL
)即可在连接于总线上的器件之间传送信息。同一时刻可以单主机多从机或单主机单从机,I2C
总线上的任意设备都可以当主机,一般主机是MCU
,当有多个主机时,会通过总线仲裁的方式选出一个主机,其他退出作从机。
IIC
一共有只有两个总线: 一条是双向的串行数据线SDA
,一条是串行时钟线SCL
SDA(Serial data)
是数据线,D
代表Data
也就是数据,Send Data
也就是用来传输数据的SCL(Serial clock line)
是时钟线,C
代表Clock
也就是时钟 也就是控制数据发送的时序的
2.8 SPI
SPI
是串行外设接口(Serial Peripheral Interface
)的缩写,意为串行外围接口,是摩托罗拉首先在其MC68HCXX
系列处理器上定义的,SPI
是一种高速的,全双工,同步的通信总线,SPI
的速率比I2C
高,一般可以到几十Mbps
,不同的器件当主机和当作从机的速率一般不同。SPI
最典型的应用是单主机单从机,下图是接线方式,当然也可以多从机。