常见协议对比
通信方式 | 传输线 | 通讯方式 | 标准传输速度 | 使用场景 |
---|---|---|---|---|
UART | TX(发送数据线)、RX(接收数据线) | 串行、异步、全双工LSB first | 115.2 kbit/s(常用) | 计算机和外部设备通信(打印机) |
IIC | SCL(时钟线)、SDA(数据线) | 串行、同步、半双工 | 100 kbit/s(标准模式) | 低速设备(传感器) |
SPI | CS(片选)、MOSI(主发从收)、 MISO(从发主收)、CLK(时钟) | 串行、同步、全双工、MSB或LSB | 无官方标准(50Mbps) | 高速数据传输(显示器) |
CAN | CAN_High、CAN_Low | 串行、异步、半双工 | 4kbit/s~1mbit/s | 汽车、工业控制 |
- UART:简单方便,只需要TX、RX线两两相连(记得共地),即可通讯。缺点是只能供两个设备之间通讯,假如想实现三个设备之间的通讯,从机可以收到MCU发送的数据,但发送可能会受到影响
- IIC:多设备通讯,相较于UART两个设备之间的通讯,IIC可以实现多个设备之间的通信,通讯时一般是一个主设备,多个从设备,主设备用来控制通讯的开始和中断,需要发送地址位来确定与哪个设备建立通讯,同时为了保证通信正确传输到从机,每次需要从机应答,才会继续传输,这导致通讯速率较低。
- SPI:速度快,使用四根线完成通信,使用CS片选线选择通讯的对象。相较于IIC,无需发送通讯地址,也不需要从机发送应答信号,这就能大大提升通讯效率,但是缺点是占用4条线,消耗的资源比IIC多。
- CAN:安全第一,为了保证传输的安全性,相较于前面三种方法,使用了大量的手段保证数据及时、准确的传输。同时使用识别码,解决总线冲突的问题。这保证的优先级高的设备,先通讯。这也是为什么CAN能够用于工业、汽车等需要安全性高的领域。
名词 | 特征 |
---|---|
串/并行 | 单/多条通道同时传输 |
全/半双工 | 是/否可以同时发送 |
同步/异步 | 有/无时钟 |
串行通信:数据通过单一通道按位顺序传输,适用于长距离和低成本的通信需求。
并行通信:数据通过多条通道同时传输多个位,适用于短距离和高速度的通信需求。
全双工:通信双方可以同时发送和接收信息,就像电话通话一样,通话的双方可以同时说话和听对方说话。
半双工:通信双方可以发送和接收信息,但同一时间只能进行一项操作,要么发送要么接收,就像对讲机一样,一方说话时另一方必须等待。
同步通信:同步通信是指发送和接收设备通过共享时钟信号来同步数据传输,确保数据在固定的时间间隔内准确无误地传递。
异步通信:异步通信是指发送和接收设备之间不依赖共享时钟信号,数据传输可以独立于时钟信号进行,每个数据包携带自己的时钟信息。
CAN
完整内容请点击这里 https://zhuanlan.zhihu.com/p/162708070
原理介绍
CAN总线结构都有CAN_H,CAN_L两根线和多个节点。其中CAN_H和CAN_L线是以双绞形式缠绕,每个节点都有CAN收发器(transceiver)和CAN控制器(controller),CAN收发器和CAN控制器可能集成在芯片,也可能是独立于芯片。
多主工作方式 非破坏性仲裁机制 系统的柔软性 通信速度统一 远程数据请求 信息广播
类型 | 特点 | 作用 |
---|---|---|
数据帧 | 包含数据字段,用于传输数据。 | 用于在网络中的节点之间传输数据。 |
远程帧 | 用于请求数据,不包含数据字段。 | 用于请求发送数据帧的数据。 |
错误帧 | 用于错误处理,不包含数据字段。 | 当检测到错误时发送,用于通知网络中的其他节点。 |
过载帧 | 用于控制数据传输速率,不包含数据字段。 | 当节点需要时间处理收到的数据时发送,请求发送方暂停发送数据。 |
帧间隔 | 用于分隔帧,不包含数据字段。 | 用于在连续发送的帧之间提供间隔,以允许网络中的其他节点发送数据。过载帧和错误帧前不能插入帧间隔。 |
数据帧
遥控帧
段落名称 | 特点 | 长度(位) |
---|---|---|
帧起始(SOF) | 表示数据帧的开始,用于同步总线上的节点 | 1 |
仲裁段 | 确定帧的优先级和类型(数据帧或遥控帧),包括11位标识符和远程发送请求位(RTR) | 12(11位ID + 1位RTR) |
控制段 | 表示数据的字节数及保留位,由6个位组成,包括数据长度代码(DLC)和两个保留位(r0、r1) | 6 |
数据段 | 数据的内容,可发送0~8个字节的数据,每字节包含8位 MSB(最高位)开始输出 | 0-64(0-8字节 x 8位/字节) |
CRC段 | 检查帧的传输错误,包括15位的CRC序列和1位的CRC界定符 | 16 |
ACK段 | 表示确认正常接收,由ACK槽和ACK界定符2个位组成 | 2 |
帧结束(EOF) | 表示数据帧的结束,由7个隐性位组成 | 7 |
总结:
- CAN标准帧的总长度随数据段中的数据量变化而变化,但其他各段长度固定。
- 帧起始是数据帧传输的起始标志,用于同步总线上的节点。
- 仲裁段确定帧的优先级和类型,通过11位标识符和RTR位实现。
- 控制段指示数据段的长度,并包含两个保留位。
- 数据段是实际传输的数据内容,长度可变,但每次传输的最大长度为8字节。
- CRC段用于检查帧的传输错误,确保数据的完整性和正确性。
- ACK段用于确认接收方是否正常接收了数据帧。
- 帧结束标志着数据帧的传输结束。
总线仲裁
- RTR:保证数据帧优先级高于遥控帧;
- SRR :保证标准数据帧的优先级高于扩展数据帧;
- IDE :保证标准遥控帧的优先级高于扩展遥控帧。
报文过滤
相关问题
- CAN接口增加隔离与保护
- CAN线提高双绞程度
- CAN线保证屏蔽效果与正确接地
- CAN线远离干扰源
- 增加磁环或者共模电感
- CAN转为光纤传输
在同一个CAN网络中,DLC可以设置多种吗,可以
CAN_FD
CAN FD是传统CAN协议的升级版,提供了更高的数据传输速率和更大的数据载荷能力,同时保持与传统CAN的兼容性。
CAN FD(CAN with Flexible Data-Rate)是传统CAN总线协议的升级版,它在保留了传统CAN帧的基本特性的同时,引入了更高的数据传输速率和更大的数据载荷能力。以下是CAN与CAN FD的一些主要区别:
传输速率:
- CAN:最大传输速率通常为1Mbps。
- CAN FD:支持更高的数据传输速率,仲裁阶段速率最高1Mbps,数据阶段速率最高可达8Mbps。
数据长度:
- CAN:一帧数据最长8字节。
- CAN FD:一帧数据最长64字节。
帧格式:
- CAN:包括帧起始、仲裁段、控制段、数据段、CRC段、确认段和帧结束。
- CAN FD:在CAN的基础上增加了FDF(Flexible Data-rate Format)、BRS(Bit Rate Switch)、ESI(Error State Indicator)位。FDF位用于区分CAN报文和CAN FD报文,BRS位用于指示数据段的速率是否可变,ESI位用于指示发送节点的错误状态。
ID长度:
- CAN:标准帧ID长度最长11位。
- CAN FD:标准帧ID长度可扩展至12位。
CRC计算:
- CAN:使用15位CRC。
- CAN FD:根据数据长度,使用17位或21位CRC。
位填充法:
- CAN FD:在CRC校验场中,填充位被放置在固定的位位置,这称为固定填充位(Fixed Stuff Bit FSB),并且CRC计算包括来自SOF的Stuff Count和填充位。
远程帧:
- CAN:存在远程帧,用于请求发送数据帧。
- CAN FD:不存在远程帧,远程请求功能通过其他方式实现。
向后兼容性:
- CAN FD:设计上兼容传统CAN设备,但CAN设备不能正确解析CAN FD帧。
这些改进使得CAN FD在汽车和工业自动化领域中,能够更有效地处理更大的数据量和更高的数据传输需求。
SPI
SPI(Serial Peripheral Interface,串行外围设备接口)是一种高速、全双工、同步通信总线。SPI 通讯协议的优点是支持全双工通信,通讯方式较为简单,且相对数据传输速率较快;缺点是没有指定的流控制,没有应答机制,在数据可靠性上有一定缺陷。
来自主机或者从机的数据在clk上升沿或下降沿同步,主机和从机可以通过MOSI、MISO线路同时传输数据。SPI接口可以是3线式(SCLK、CS、DIO)或者4线式(SCLK、CS、MOSI、MISO)
SPI采用主从控制模式,通常由一个主模块和一个或多个从模块组成(不支持多主机),来自主机或者从机的数据在clk上升沿或下降沿同步,一般使用四条线进行通信SCLK、CS、MOSI、MISO) 。
MISO ( Master Input Slave Output ) : 主设备数据输入,从设备数据输出; MOSI ( Master OutputsSlave Input ) : 主设备数据输出,从设备数据输入; SCLK ( Serial Clock ) : 时钟信号,由主设备产生; CS/SS ( Chip Select/Slave Select ) : 从设备片选信号,由主设备控制,通常低电平有效。
SPI模式 | CPOL | CPHA | 空闲时SCK时钟 | 采样时刻 |
---|---|---|---|---|
0 | 0 | 0 | 低电平 | 第1个边沿(奇) |
1 | 0 | 1 | 低电平 | 第2个边沿(偶) |
2 | 1 | 0 | 高电平 | 第1个边沿(奇) |
3 | 1 | 1 | 高电平 | 第2个边沿(偶) |
多个从机可与单个 SPI 主机一起使用。从机可以采用常规模式连接,或采用菊花链模式连接。 |
SPI 的优点在于它有着比 I2C 更高的吞吐量,不被最大时钟速度所限制,可实现潜在的高速、极为简单的硬件接口,外围电路使用的上拉电阻是比 I2C 协议更少的,这意味着它具有比I2C的功耗更低、从机的时钟来源来自主机设备,无需新增精密振荡器、从机不需要唯一的地址、相对于并行接口而言,使用的引脚数目大大减少等优点。
但同时有着一定的缺点,例如SPI没有带内寻址、当使用多个不同模式的从机设备时,主机设备切换模式时重新初始化,会使得访问从机设备速度变慢、SPI从机设备没有硬件流控,只能通过主机自主的延迟下个时钟周期到来的时间、仅能在短距离通信等缺点。但能在避免SPI的缺点的方向来应用SPI的话,SPI的优点让它远远优于其他协议。
SPI(Serial Peripheral Interface)是一种常见的串行通信协议,用于微控制器和其他集成电路之间的短距离通信。在嵌入式系统中,SPI广泛应用于多种场景和设备,以下是一些主要的应用:
存储设备:SPI闪存和EEPROM(电可擦除可编程只读存储器)是常见的存储设备,用于存储程序数据或配置信息。
传感器:许多类型的传感器,如温度传感器、压力传感器、加速度计、陀螺仪和磁力计,都使用SPI接口与微控制器通信。
显示器:OLED和LCD显示器通常通过SPI接口与控制器通信,用于显示图形和文本。
无线通信模块:如Wi-Fi模块、蓝牙模块和Zigbee模块,它们使用SPI与主机微控制器进行数据传输。
音频设备:例如数字麦克风和音频编解码器,它们通过SPI接口传输音频数据。
安全模块:如智能卡读卡器和加密模块,它们使用SPI进行数据的安全传输。
电机控制:步进电机和直流电机的驱动器可以通过SPI接口接收控制命令。
接口扩展:SPI可以用于扩展微控制器的I/O端口,例如通过SPI接口的GPIO扩展器。
电源管理:电源管理集成电路(PMIC)可能使用SPI来监控和控制电源状态。
工业控制:在自动化和机器人技术中,SPI用于控制各种执行器和传感器。
汽车电子:在现代汽车中,SPI用于连接各种电子控制单元(ECU)和传感器。
可穿戴设备:智能手表、健康监测设备等可穿戴设备中,SPI用于连接各种传感器和显示器。
SPI协议因其简单、高效和灵活的特点,在嵌入式系统中得到了广泛的应用。
I2C
I2C 是一种多主机、两线制、低速串行通信总线,广泛用于微控制器和各种外围设备之间的通信。它使用两条线路:串行数据线(SDA)和串行时钟线(SCL)进行双向传输。
特点
- 两线制总线:I2C 仅使用两条线——串行数据线(SDA)和串行时钟线(SCL)进行通信,有效降低了连接复杂性。
- 多主多从设备支持:I2C 支持多个主设备和多个从设备连接到同一总线上。每个设备都有唯一的地址。
- 可变的时钟速率:I2C 总线支持不同的速率模式,如标准模式(100kbps)、快速模式(400kbps)和高速模式(3.4Mbps)。
- 同步通信:I2C 是一种同步通信协议,数据传输由时钟信号(SCL)来控制。
- 简单的连接:I2C 通信对硬件的要求比较低,很容易在微控制器和外围设备间实现连接。
- 地址分配:每个 I2C 设备都通过一个 7 位或 10 位的地址来识别,这使得总线上可以连接多个设备。
- 阻塞传输:I2C 支持阻塞传输机制,即主设备可以在传输过程中控制总线,防止其他设备发送数据。
- 应用广泛:由于其简单和灵活性,I2C 被广泛应用于各种电子产品中,如传感器、LCD 显示器、EEPROM 等。
- 总线仲裁和冲突检测:在多主模式下,I2C 能够处理多个主设备同时尝试控制总线的情况。
- 低功耗:I2C 总线的设计使其成为低功耗的通信方式,适用于电池供电的设备。
数据传输流程
数据信号以 8 位的序列传输。所以在特殊的开始条件发生后,就会出现第一个 8 位序列,它指示了数据被发送到哪个从设备的地址。每个 8 位序列之后都会跟随一个称为确认的位。
设备地址 7 + RW 1
每一个放在 SDA 线上的字节必须是 8 位长。每次传输可以传输的字节数是没有限制的。每一个字节后面必须跟一个确认位。数据以最有效位 (MSB) 为首进行传输(见图 6)。
仲裁
这里与CAN类似
发生仲裁的前提是,一条总线上挂载了多个主机,并且这些主机都支持多主机模式,即每一个主机都可以实时监测SDA以及SCL的情况,从而通过start和stop位来确定总线的情况(被占用还是空闲)。当多个主机检测到当前总线处于空闲状态时(这里以2个主机为例),可能会同时发出启动标志位(发出的时间间隔很短,因此无法检测到其他节点产生的电平变化,误认为总线是空闲的),这时候仲裁机制开始生效。
总线归属权的仲裁是通过SDA线完成的。由于I2C的总线设计是线与(wired-AND),因此低电平是显性电平。只要有一个节点将SDA拉低,那么整条总线都会拉至低电平。在两个主机都认为总线空闲并开始通信之后,当遇到第一个两者发送的不同的位时,会决出总线的归属者。
注意点
经常软件模拟实现
双线制:I2C总线仅由两根线组成,这使得它非常适合于连接多个设备,因为它减少了所需的物理连接数量。
开漏输出:I2C的数据线(SDA)和时钟线(SCL)通常使用开漏(Open Drain)输出。这意味着每个设备的SDA和SCL引脚都连接到总线上,并且每个设备都有一个上拉电阻连接到电源。开漏输出允许多个设备共享同一总线,并且可以有效地进行通信。
上拉电阻:为了确保SDA和SCL线在空闲状态时保持高电平,每个设备都需要通过一个上拉电阻连接到电源。这些电阻的值通常根据总线的速率和长度来选择。
总线仲裁:在多主机系统中,I2C总线支持总线仲裁机制,以防止两个主机同时尝试控制总线。如果两个主机同时尝试发送数据,总线仲裁机制会确保只有一个主机能够控制总线。
地址识别:每个I2C设备都有一个唯一的地址,用于在通信过程中被识别。在通信开始时,主机发送设备地址,以便目标设备知道数据是发送给它的。
应答机制:I2C协议使用应答(ACK)和非应答(NACK)机制来确保数据传输的可靠性。接收器在成功接收到一个字节后会发送一个ACK信号,如果接收器无法接收数据或通信出错,则发送NACK信号。
多主设备支持:I2C总线允许多个设备同时作为主机,这在某些应用中非常有用,例如在多个微控制器共享同一传感器或显示器时。
速率:I2C支持不同的速率模式,包括标准模式(最高100 kbps)、快速模式(最高400 kbps)、高速模式(最高3.4 Mbps)和超高速模式(最高5 Mbps)。不同的速率模式可能需要不同的硬件设计,例如不同的上拉电阻值。
总线电容:I2C总线的电容对通信性能有影响,特别是在高速模式下。总线的电容应该保持在规格范围内,以确保信号的完整性。
电源和地线:虽然I2C总线只需要两根线,但所有设备都需要共享相同的电源和地线,以确保信号的一致性和稳定性。
UART
UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种通信协议和硬件接口,用于在计算机系统和外部设备之间进行异步数据传输。它是一种简单且常见的串行通信方式,广泛应用于嵌入式系统、单片机和通信设备中。它在全双工模式下工作。
UART通过设置波特率来控制数据传输的速率。波特率表示每秒传输的位数。
在 UART中,传输模式为数据包形式。数据包由起始位、数据帧、奇偶校验位和停止位组成。
数据以最低有效位优先方式发送。
RS232 RS485 RS422
特性 | UART | RS232 | RS485 | RS422 |
---|---|---|---|---|
标准 | 通用异步接收/发送器 | 串行通信接口 | 差分信号串行通信 | 差分信号串行通信 |
物理层 | 无定义 | DB9/DB25 | 双绞线 | 双绞线 |
电气特性 | TTL/CMOS电平 | 负逻辑电平 | 差分电平 | 差分电平 |
连接方式 | 单端信号 | 单端信号 | 差分信号 | 差分信号 |
传输距离 | 较短 | 15米 | 1200米 | 1200米 |
传输速率 | 可变 | 可变 | 可变 | 可变 |
拓扑结构 | 点对点 | 点对点 | 多点 | 多点 |
节点数 | 1对1 | 1对1 | 32(理论上) | 10(理论上) |
信号类型 | 单向或双向 | 单向或双向 | 双向 | 双向 |
- UART:通用异步接收/发送器,是一种用于异步通信的串行通信协议,它定义了数据的格式和传输方式,但不定义物理层的电气特性。
- RS232:是一种单端信号的串行通信接口,使用负逻辑电平,通常用于短距离通信,如计算机与调制解调器之间的连接。
- RS485:是一种差分信号的串行通信标准,支持多点通信,具有较长的传输距离和较强的抗干扰能力。
- RS422:与RS485类似,也是一种差分信号的串行通信标准,但电气特性略有不同,通常用于较近的距离和较低的速率。
(1)狭义上的串口:指的是串口协议,就是时序图、数据收发先后顺序等,是抽象出来的协议; (2)广义上的串口:指的是符合串口协议的接口,UART、RS232、RS485在实际工作中都叫做串口; (3)UART:主要指的是Soc端的串口控制器和引脚,也是串口编程主要考虑的; (4)RS232和RS485是在两个Soc的串口引脚相连的中间电路,负责做转换,解决传输距离和电压不匹配的问题;
为什么还要有RS232、RS422、RS485
(1)串口协议只是规定了数据传输时的协议,也就是规定了先传输1还是先传输0的问题,但是什么电压表示数据1,什么电压表示0,这并没有做规定; (2)UART是相对于Soc这端来说的,Soc端集成了串口控制器,控制器支持串口协议(比如开始位、停止位、数据位、校验位等),用的是TTL电平; (3)实际中两个设备的串口控制器要通信,中间是有一段距离的,Soc的引脚一般电平都比较低,数据能传输的有效距离很短;并且不同的设备所使用的电压也不一样,不能直接相连; (4)需要中间电路负责来解决电压不匹配、传输距离等问题,于是有了RS232、RS422、RS485; (5)RS232、RS422、RS485都是从电气层面(也就是物理器件)来区分的,具体的通信协议都是串口协议,但是使用的电压范围、是电平信号还是差分信号等不同;
软件编程上的区分 (1)UART和RS232只是在电平上有区别,在软件编程上没有差别; (2)RS485支持挂载多个设备、半双工、全双工,所以串口编程半双工时需要考虑总线的总裁,也就是主从模式,类似I2C;
TCP/UDP
应用层
应用层做为 TCP/IP 协议的最高层级 运行在 TCP 协议上的协议:
- HTTP(Hypertext Transfer Protocol,超文本传输协议)主要用于普通浏览。
- HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本传输协议)HTTP 协议的安全版本。
- FTP(File Transfer Protocol,文件传输协议) 由名知义,用于文件传输。
- POP3(Post Office Protocol, version 3,邮局协议)收邮件用。
- SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)用来发送电子邮件。
- TELNET(Teletype over the Network,网络电传) 通过一个终端(terminal)登陆到网络。
- SSH(Secure Shell,用于替代安全性差的 TELNET)用于加密安全登陆用。 运行在 UDP 协议上的协议:
- BOOTP(Boot Protocol,启动协议) 应用于无盘设备。
- NTP(Network Time Protocol,网络时间协议)用于网络同步。
- DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)动态配置 IP 地址。 其他:
- DNS(Domain Name Service,域名服务)用于完成地址查找,邮件转发等工作(运行在 TCP 和 UDP 协议上)。
- ECHO(Echo Protocol,回绕协议) 用于查错及测量应答时间(运行在 TCP 和 UDP 协议上)。
- SNMP(Simple Network Management Protocol,简单网络管理协议)用于网络信息的收集和网络管理。
- ARP(Address Resolution Protocol,地址解析协议)用于动态解析以太网硬件的地址。
传输层
传输层提供了两种到达目标网络的方式: (1)用户数据报协议 UDP:
只提供了基本的错误检测,是一个无连接的协议。
特点:把数据打包,数据大小有限制(64k),不建立连接,速度快,但可靠性低。 (2)传输控制协议 TCP:
提供了完善的错误控制和流量控制,能够确保数据正常传输,是一个面向连接的协议。 特点:建立连接通道,数据大小无限制速度慢,但是可靠性高。由于传输层涉及的东西比较多,比如端口,Socket 等。
TCP
第1次握手:客户端发送一个带有SYN(synchronize)标志的数据包给服务端; 第2次握手:服务端接收成功后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了; 第3次握手:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。
🌸为什么需要第三次通信 ? 在第一次通信过程中,A向B发送信息之后,B收到信息后可以确认自己的收信能力和A的发信能力没有问题。 在第二次通信中,B向A发送信息之后,A可以确认自己的发信能力和B的收信能力没有问题,但是B不知道自己的发信能力到底如何,所以就需要第三次通信。 在第三次通信中,A向B发送信息之后,B就可以确认自己的发信能力没有问题。
四次挥手原理 第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态; 第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态; 第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态; 第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。 其中:FIN标志位数置1,表示断开TCP连接。
确认应答机制(安全机制) 超时重传机制(安全机制) 连接管理(安全机制) 滑动窗口(效率机制) 流量控制(安全机制) 拥塞控制(安全机制) 延迟应答(效率机制) 捎带应答(效率机制)