通信协议常用TTL、RS232/RS485/RS422、CAN、IIC、SPI、USB整理
- 前言
- 1.串行通信和并行通信
-
- 1.1 串行通信
- 1.2 并行通信
- 二、通信协议常用
-
- 2.1 UART
-
- 2.1.1 TTL电平
- 2.2 RS232
-
- 2.2.1 RS-232电平逻辑
- 2.2.2 RS-232标准的不足
- 2.3 RS-485
-
- 2.3.1 RS-485电平逻辑
- 2.3.2 RS-232与RS-485对比
- 2.4 RS-422
- 2.5 USB
-
- 2.5.1 USB 速率
- 2.5.2 USB接口定义
- 2.6 CAN总线
-
- 2.6.1 CAN电平逻辑
- 2.6.2 CAN连接方式
- 2.7 IIC
- 2.8 SPI
前言
??最近,在设计项目方案时,包括常用通信接口的选择,包括TTL、RS232、RS485、RS422、CAN、IIC、SPI
对于常用的通信协议,在这里整理常用的通信协议,必要时可以复习。在这里,您可以参考几篇优秀的博客文章并进行整理。你也可以去看看。
- 不脱发的程序猿-详解RS232、RS485、RS串口和握手
- ZD整理各种通信协议
- 小麦大叔CAN总线简单入门教程
- IIC原理超详细说明-值得一看
1.串行通信和并行通信
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
”。。
-
标准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
口,
2.2 RS232
??RS-232
接口符合美国电子工业联盟的要求(EIA
)串行数据通信的接口标准是全双工,其中 RS
为英文 “Recomend Standard
” 缩写,中文翻译为推荐标准,232
标识号。原始编号称是EIA-RS-232
(简称232
,RS232
)。它被广泛用于计算机串行接口外设连接,连接电缆和机械、电气特性、信号功能及传送过程,其输出的电平称为 RS232
电平。
2.2.1 RS-232电平逻辑
RS-232
不同于TTL
的电平逻辑,为负逻辑,,即 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
最典型的应用是单主机单从机,下图是接线方式,当然也可以多从机。