6922 字
35 分钟
嵌入式 - 常见通信协议复习要点
2024-09-14

常见协议对比#

通信方式传输线通讯方式标准传输速度使用场景
UARTTX(发送数据线)、RX(接收数据线)串行、异步、全双工LSB first115.2 kbit/s(常用)计算机和外部设备通信(打印机)
IICSCL(时钟线)、SDA(数据线)串行、同步、半双工100 kbit/s(标准模式)低速设备(传感器)
SPICS(片选)、MOSI(主发从收)、 MISO(从发主收)、CLK(时钟)串行、同步、全双工、MSB或LSB无官方标准(50Mbps)高速数据传输(显示器)
CANCAN_High、CAN_Low串行、异步、半双工4kbit/s~1mbit/s汽车、工业控制
  1. UART:简单方便,只需要TX、RX线两两相连(记得共地),即可通讯。缺点是只能供两个设备之间通讯,假如想实现三个设备之间的通讯,从机可以收到MCU发送的数据,但发送可能会受到影响
  2. IIC:多设备通讯,相较于UART两个设备之间的通讯,IIC可以实现多个设备之间的通信,通讯时一般是一个主设备,多个从设备,主设备用来控制通讯的开始和中断,需要发送地址位来确定与哪个设备建立通讯,同时为了保证通信正确传输到从机,每次需要从机应答,才会继续传输,这导致通讯速率较低。
  3. SPI:速度快,使用四根线完成通信,使用CS片选线选择通讯的对象。相较于IIC,无需发送通讯地址,也不需要从机发送应答信号,这就能大大提升通讯效率,但是缺点是占用4条线,消耗的资源比IIC多。
  4. CAN:安全第一,为了保证传输的安全性,相较于前面三种方法,使用了大量的手段保证数据及时、准确的传输。同时使用识别码,解决总线冲突的问题。这保证的优先级高的设备,先通讯。这也是为什么CAN能够用于工业、汽车等需要安全性高的领域。
名词特征
串/并行单/多条通道同时传输
全/半双工是/否可以同时发送
同步/异步有/无时钟

串行通信:数据通过单一通道按位顺序传输,适用于长距离和低成本的通信需求。

并行通信:数据通过多条通道同时传输多个位,适用于短距离和高速度的通信需求。

全双工:通信双方可以同时发送和接收信息,就像电话通话一样,通话的双方可以同时说话和听对方说话。

半双工:通信双方可以发送和接收信息,但同一时间只能进行一项操作,要么发送要么接收,就像对讲机一样,一方说话时另一方必须等待。

同步通信:同步通信是指发送和接收设备通过共享时钟信号来同步数据传输,确保数据在固定的时间间隔内准确无误地传递。

异步通信:异步通信是指发送和接收设备之间不依赖共享时钟信号,数据传输可以独立于时钟信号进行,每个数据包携带自己的时钟信息。

CAN#

完整内容请点击这里 https://zhuanlan.zhihu.com/p/162708070

原理介绍#

CAN总线结构都有CAN_H,CAN_L两根线和多个节点。其中CAN_H和CAN_L线是以双绞形式缠绕,每个节点都有CAN收发器(transceiver)和CAN控制器(controller),CAN收发器和CAN控制器可能集成在芯片,也可能是独立于芯片。  ISO-11898 (高速CAN)和ISO-11519(低速CAN)

image

多主工作方式 非破坏性仲裁机制 系统的柔软性 通信速度统一 远程数据请求 信息广播

类型特点作用
数据帧包含数据字段,用于传输数据。用于在网络中的节点之间传输数据。
远程帧用于请求数据,不包含数据字段。用于请求发送数据帧的数据。
错误帧用于错误处理,不包含数据字段。当检测到错误时发送,用于通知网络中的其他节点。
过载帧用于控制数据传输速率,不包含数据字段。当节点需要时间处理收到的数据时发送,请求发送方暂停发送数据。
帧间隔用于分隔帧,不包含数据字段。用于在连续发送的帧之间提供间隔,以允许网络中的其他节点发送数据。过载帧和错误帧前不能插入帧间隔。

数据帧 image

遥控帧 image

段落名称特点长度(位)
帧起始(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 :保证标准遥控帧的优先级高于扩展遥控帧。

报文过滤

相关问题#

  1. CAN总线抗干扰的6条“军规”

    1. CAN接口增加隔离与保护
    2. CAN线提高双绞程度
    3. CAN线保证屏蔽效果与正确接地
    4. CAN线远离干扰源
    5. 增加磁环或者共模电感
    6. CAN转为光纤传输
  2. 在同一个CAN网络中,DLC可以设置多种吗,可以

CAN_FD#

CAN FD是传统CAN协议的升级版,提供了更高的数据传输速率和更大的数据载荷能力,同时保持与传统CAN的兼容性。

CAN FD(CAN with Flexible Data-Rate)是传统CAN总线协议的升级版,它在保留了传统CAN帧的基本特性的同时,引入了更高的数据传输速率和更大的数据载荷能力。以下是CAN与CAN FD的一些主要区别:

  1. 传输速率

    • CAN:最大传输速率通常为1Mbps。
    • CAN FD:支持更高的数据传输速率,仲裁阶段速率最高1Mbps,数据阶段速率最高可达8Mbps。
  2. 数据长度

    • CAN:一帧数据最长8字节。
    • CAN FD:一帧数据最长64字节。
  3. 帧格式

    • CAN:包括帧起始、仲裁段、控制段、数据段、CRC段、确认段和帧结束。
    • CAN FD:在CAN的基础上增加了FDF(Flexible Data-rate Format)、BRS(Bit Rate Switch)、ESI(Error State Indicator)位。FDF位用于区分CAN报文和CAN FD报文,BRS位用于指示数据段的速率是否可变,ESI位用于指示发送节点的错误状态。
  4. ID长度

    • CAN:标准帧ID长度最长11位。
    • CAN FD:标准帧ID长度可扩展至12位。
  5. CRC计算

    • CAN:使用15位CRC。
    • CAN FD:根据数据长度,使用17位或21位CRC。
  6. 位填充法

    • CAN FD:在CRC校验场中,填充位被放置在固定的位位置,这称为固定填充位(Fixed Stuff Bit FSB),并且CRC计算包括来自SOF的Stuff Count和填充位。
  7. 远程帧

    • CAN:存在远程帧,用于请求发送数据帧。
    • CAN FD:不存在远程帧,远程请求功能通过其他方式实现。
  8. 向后兼容性

    • CAN FD:设计上兼容传统CAN设备,但CAN设备不能正确解析CAN FD帧。

这些改进使得CAN FD在汽车和工业自动化领域中,能够更有效地处理更大的数据量和更高的数据传输需求。

SPI#

参考资料1 参考资料2

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 ) : 从设备片选信号,由主设备控制,通常低电平有效。

image

SPI模式CPOLCPHA空闲时SCK时钟采样时刻
000低电平第1个边沿(奇)
101低电平第2个边沿(偶)
210高电平第1个边沿(奇)
311高电平第2个边沿(偶)
多个从机可与单个 SPI 主机一起使用。从机可以采用常规模式连接,或采用菊花链模式连接。

image

SPI 的优点在于它有着比 I2C 更高的吞吐量,不被最大时钟速度所限制,可实现潜在的高速、极为简单的硬件接口,外围电路使用的上拉电阻是比 I2C 协议更少的,这意味着它具有比I2C的功耗更低、从机的时钟来源来自主机设备,无需新增精密振荡器、从机不需要唯一的地址、相对于并行接口而言,使用的引脚数目大大减少等优点。

但同时有着一定的缺点,例如SPI没有带内寻址、当使用多个不同模式的从机设备时,主机设备切换模式时重新初始化,会使得访问从机设备速度变慢、SPI从机设备没有硬件流控,只能通过主机自主的延迟下个时钟周期到来的时间、仅能在短距离通信等缺点。但能在避免SPI的缺点的方向来应用SPI的话,SPI的优点让它远远优于其他协议。

SPI(Serial Peripheral Interface)是一种常见的串行通信协议,用于微控制器和其他集成电路之间的短距离通信。在嵌入式系统中,SPI广泛应用于多种场景和设备,以下是一些主要的应用:

  1. 存储设备:SPI闪存和EEPROM(电可擦除可编程只读存储器)是常见的存储设备,用于存储程序数据或配置信息。

  2. 传感器:许多类型的传感器,如温度传感器、压力传感器、加速度计、陀螺仪和磁力计,都使用SPI接口与微控制器通信。

  3. 显示器:OLED和LCD显示器通常通过SPI接口与控制器通信,用于显示图形和文本。

  4. 无线通信模块:如Wi-Fi模块、蓝牙模块和Zigbee模块,它们使用SPI与主机微控制器进行数据传输。

  5. 音频设备:例如数字麦克风和音频编解码器,它们通过SPI接口传输音频数据。

  6. 安全模块:如智能卡读卡器和加密模块,它们使用SPI进行数据的安全传输。

  7. 电机控制:步进电机和直流电机的驱动器可以通过SPI接口接收控制命令。

  8. 接口扩展:SPI可以用于扩展微控制器的I/O端口,例如通过SPI接口的GPIO扩展器。

  9. 电源管理:电源管理集成电路(PMIC)可能使用SPI来监控和控制电源状态。

  10. 工业控制:在自动化和机器人技术中,SPI用于控制各种执行器和传感器。

  11. 汽车电子:在现代汽车中,SPI用于连接各种电子控制单元(ECU)和传感器。

  12. 可穿戴设备:智能手表、健康监测设备等可穿戴设备中,SPI用于连接各种传感器和显示器。

SPI协议因其简单、高效和灵活的特点,在嵌入式系统中得到了广泛的应用。

I2C#

I2C 是一种多主机、两线制、低速串行通信总线,广泛用于微控制器和各种外围设备之间的通信。它使用两条线路:串行数据线(SDA)和串行时钟线(SCL)进行双向传输。

特点#

  1. 两线制总线:I2C 仅使用两条线——串行数据线(SDA)和串行时钟线(SCL)进行通信,有效降低了连接复杂性。
  2. 多主多从设备支持:I2C 支持多个主设备和多个从设备连接到同一总线上。每个设备都有唯一的地址。
  3. 可变的时钟速率:I2C 总线支持不同的速率模式,如标准模式(100kbps)、快速模式(400kbps)和高速模式(3.4Mbps)。
  4. 同步通信:I2C 是一种同步通信协议,数据传输由时钟信号(SCL)来控制。
  5. 简单的连接:I2C 通信对硬件的要求比较低,很容易在微控制器和外围设备间实现连接。
  6. 地址分配:每个 I2C 设备都通过一个 7 位或 10 位的地址来识别,这使得总线上可以连接多个设备。
  7. 阻塞传输:I2C 支持阻塞传输机制,即主设备可以在传输过程中控制总线,防止其他设备发送数据。
  8. 应用广泛:由于其简单和灵活性,I2C 被广泛应用于各种电子产品中,如传感器、LCD 显示器、EEPROM 等。
  9. 总线仲裁和冲突检测:在多主模式下,I2C 能够处理多个主设备同时尝试控制总线的情况。
  10. 低功耗:I2C 总线的设计使其成为低功耗的通信方式,适用于电池供电的设备。

数据传输流程#

数据信号以 8 位的序列传输。所以在特殊的开始条件发生后,就会出现第一个 8 位序列,它指示了数据被发送到哪个从设备的地址。每个 8 位序列之后都会跟随一个称为确认的位。

设备地址 7 + RW 1

image

image

每一个放在 SDA 线上的字节必须是 8 位长。每次传输可以传输的字节数是没有限制的。每一个字节后面必须跟一个确认位。数据以最有效位 (MSB) 为首进行传输(见图 6)。

仲裁#

这里与CAN类似

发生仲裁的前提是,一条总线上挂载了多个主机,并且这些主机都支持多主机模式,即每一个主机都可以实时监测SDA以及SCL的情况,从而通过start和stop位来确定总线的情况(被占用还是空闲)。当多个主机检测到当前总线处于空闲状态时(这里以2个主机为例),可能会同时发出启动标志位(发出的时间间隔很短,因此无法检测到其他节点产生的电平变化,误认为总线是空闲的),这时候仲裁机制开始生效。

总线归属权的仲裁是通过SDA线完成的。由于I2C的总线设计是线与(wired-AND),因此低电平是显性电平。只要有一个节点将SDA拉低,那么整条总线都会拉至低电平。在两个主机都认为总线空闲并开始通信之后,当遇到第一个两者发送的不同的位时,会决出总线的归属者。

注意点#

经常软件模拟实现

  1. 双线制:I2C总线仅由两根线组成,这使得它非常适合于连接多个设备,因为它减少了所需的物理连接数量。

  2. 开漏输出:I2C的数据线(SDA)和时钟线(SCL)通常使用开漏(Open Drain)输出。这意味着每个设备的SDA和SCL引脚都连接到总线上,并且每个设备都有一个上拉电阻连接到电源。开漏输出允许多个设备共享同一总线,并且可以有效地进行通信。

  3. 上拉电阻:为了确保SDA和SCL线在空闲状态时保持高电平,每个设备都需要通过一个上拉电阻连接到电源。这些电阻的值通常根据总线的速率和长度来选择。

  4. 总线仲裁:在多主机系统中,I2C总线支持总线仲裁机制,以防止两个主机同时尝试控制总线。如果两个主机同时尝试发送数据,总线仲裁机制会确保只有一个主机能够控制总线。

  5. 地址识别:每个I2C设备都有一个唯一的地址,用于在通信过程中被识别。在通信开始时,主机发送设备地址,以便目标设备知道数据是发送给它的。

  6. 应答机制:I2C协议使用应答(ACK)和非应答(NACK)机制来确保数据传输的可靠性。接收器在成功接收到一个字节后会发送一个ACK信号,如果接收器无法接收数据或通信出错,则发送NACK信号。

  7. 多主设备支持:I2C总线允许多个设备同时作为主机,这在某些应用中非常有用,例如在多个微控制器共享同一传感器或显示器时。

  8. 速率:I2C支持不同的速率模式,包括标准模式(最高100 kbps)、快速模式(最高400 kbps)、高速模式(最高3.4 Mbps)和超高速模式(最高5 Mbps)。不同的速率模式可能需要不同的硬件设计,例如不同的上拉电阻值。

  9. 总线电容:I2C总线的电容对通信性能有影响,特别是在高速模式下。总线的电容应该保持在规格范围内,以确保信号的完整性。

  10. 电源和地线:虽然I2C总线只需要两根线,但所有设备都需要共享相同的电源和地线,以确保信号的一致性和稳定性。

UART#

UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)是一种通信协议和硬件接口,用于在计算机系统和外部设备之间进行异步数据传输。它是一种简单且常见的串行通信方式,广泛应用于嵌入式系统、单片机和通信设备中。它在全双工模式下工作。

image

UART通过设置波特率来控制数据传输的速率。波特率表示每秒传输的位数。

在 UART中,传输模式为数据包形式。数据包由起始位、数据帧、奇偶校验位和停止位组成。

image

数据以最低有效位优先方式发送。

RS232 RS485 RS422#

image

特性UARTRS232RS485RS422
标准通用异步接收/发送器串行通信接口差分信号串行通信差分信号串行通信
物理层无定义DB9/DB25双绞线双绞线
电气特性TTL/CMOS电平负逻辑电平差分电平差分电平
连接方式单端信号单端信号差分信号差分信号
传输距离较短15米1200米1200米
传输速率可变可变可变可变
拓扑结构点对点点对点多点多点
节点数1对11对132(理论上)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#

image

第1次握手:客户端发送一个带有SYN(synchronize)标志的数据包给服务端; 第2次握手:服务端接收成功后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了; 第3次握手:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。

🌸为什么需要第三次通信 ? 在第一次通信过程中,A向B发送信息之后,B收到信息后可以确认自己的收信能力和A的发信能力没有问题。 在第二次通信中,B向A发送信息之后,A可以确认自己的发信能力和B的收信能力没有问题,但是B不知道自己的发信能力到底如何,所以就需要第三次通信。 在第三次通信中,A向B发送信息之后,B就可以确认自己的发信能力没有问题。

image

四次挥手​​​​​​​原理 第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连接。

确认应答机制(安全机制) 超时重传机制(安全机制) 连接管理(安全机制) 滑动窗口(效率机制) 流量控制(安全机制) 拥塞控制(安全机制) 延迟应答(效率机制) 捎带应答(效率机制)

参考

嵌入式 - 常见通信协议复习要点
https://f.undf.top/posts/post/code/embedded/找工作/嵌入式---常见通信协议复习要点/
作者
沐印
发布于
2024-09-14
许可协议
CC BY-NC-SA 4.0