通信协议笔记

I2C

主要特性

  • 两根信号线通信:串行数据线SDA、串行时钟线SCL;
  • SDA和SCL的输出引脚驱动为开漏输出,外接上拉电阻
  • 所有设备通过7位地址软件寻址,高四位由厂家设定,为设备类型,低三位由用户定义
  • 所有设备都具有自动应答功能,主机和从机区别在于主机有对SCL的发送权
  • 最大挂载数取决于总线上的最大电容值,一般为400pf

工作时序

  • 数据读取在SCL为高时发生,所以当SCL为高时,数据要保持稳定
  • SCL为高时,SDA从高跳到低为开始信号start,从低跳到高为结束信号stop
  • SDA传送字节数没有限制,传送完紧跟应答信号,数据高位在前
    d3bbca378362c28829cee243a8497ef7.png
  • 当应答信号为高电平时,为ACK信号,当应答信号为高电平时,为NACK信号
  • 主机发送从机接受时,ACK由从机发出,若为NACK,主机直接尝试STOP信号终止后续传输
  • 从机发送主机接收时,ACK有主机发出,表示还要接受数据,当接受完后,发送NACK,告知从机读取结束,释放总线,随后主机发送stop命令,将释放总线,结束读操作。

信号传输

  • 完整数据传输时序图
    f313f22e0c7bc962ff6e9e5afc2bbc95.png

  • 主机写-从机收:开始字节(写)+ 寄存器地址 + 寄存器数据
    2k5s4wic.ujp.png

  • 主机读-从机发:开始字节(写)+ 要读寄存器地址 + 开始字节(读)+ 寄存器数据
    inm2vrnt.1o1.png

UART

主要特性

  • 串行、异步、全双工,有两根数据线RX(接受)和RT(发送)
  • 数据传输速率用波特率来表示,即每秒传输的二进制位数
  • 异步通信以字符为传输单位,字符间的间隔是不固定的,当字符内相邻位的间隔是固定的

信号传输

v2-2ebc83957b33a1525468eed46d3139c8_1440w.jpg

SPI

主要特性

  • 包括4调逻辑线,MISO(主入从出)、MOSI(主出从入)、SCLK(时钟信号)、SS(片选信号)
  • 主线在MOSI发送一位数据,从机读取他,从机也需要发送一位数据。尽管在单向传输中也需要。
  • 时钟极性:CKP=0时,时钟空闲位低电平
  • 时钟相位:CKE=0时,在第一个跳变沿采样,CKE=1时,在第二个跳变沿采样
    v2-ed078045bc5e1095e39fcf3bce765f9c_1440w.jpg|300

工作时序

6dfb54b2d1704bcdaa53c1effd8ba144.png

信号传输

  • 主机先将NSS信号拉低,确保开始接受数据
  • 当接收端检测到时钟边沿信号,立即读取信号线上的信号
  • 主机发送到从机时,主机产生相应的时钟信号,然后数据一位位的从MOSI发送
  • 当主机接受信号时,主机要生成预定数量的时钟信号,从机将数据从MISO发送
  • 多从机模式:多NSS和菊花链
    v2-069df3709fb1a0c5486acbf620890313_1440w.jpg

CAN

主要特性

  • 异步通信,由两根信号线CANH和CANL,有开环结构和闭环结果两种
  • 两根信号的电压差CANH-CANL表示CAN总线电平,具有良好的抗干扰性
  • 没有主从之分,但同一时刻只能由一个节点发送数据,其他节点只能接受数据
  • 总线节点没有地址概念,数据以帧位单位传输,分为多种帧
  • 采用非破坏性仲裁机制,通过比较帧上标识符(ID)的优先级决定哪个节点发送数据
  • 显性电平逻辑值为0,隐形电平逻辑值为1
  • 总线具有“线与”特性,0&1=0,当两个节点同时发送信号时,使用这个特性进行总线仲裁
  • 位填充:CAN协议规定当发送5个相同位信号时,自动插入一个补码,访问为SOF与CRC之间
  • 三种工作模式:REC(接受)和TEC(发送)为错误计数器
    dtkzp5cd.y5y.png

位时序与同步

位时序

xfezi2nj.reb.png|500
wbbfeizg.qvi.png

同步

同步规则:

  • 一个位只进行一次同步
  • 只有上次采样点的总线值和边沿后的总线值不同时,该边沿才能用于调整同步
  • 总线空闲时且存在隐形电平到显性电平的边沿时,一定要硬同步
  • 非空闲时检测到的同时满足条件1和2,还要满足5和6才进行再同步
  • 发送单元观测到自身输出的显性电平有延迟时不进行再同步
  • 发送单元在帧起始到仲裁段有多个单元同时发送时,对延迟边沿不在进行同步
    **同步方式:
  • 硬同步
    接收单元在总线空闲状态检测出帧起始时进行的同步调整。在检测出边沿的地方不考虑 SJW 的值而认为是 SS 段。
    oyaqi4ue.abt.png
  • 再同步
    在接收过程中检测出总线上的电平变化时进行的同步调整。每当检测出边沿时,根据 SJW 值通过加长 PBS1 段,或缩短 PBS2 段,以调整同步。但如果发生了超出 SJW 值的误差时,最大调整量不能超过 SJW 值。
    mhlvymkd.xa5.png

帧的类型

数据帧

aa48abfb39c952e5a31b3726c1990210.png

  • 帧起始:1位,显性位
  • 仲裁段:表示数据的优先级的段,禁止高七位全为隐形
  • 控制段:6位,表示数据段的字节数(0到8字节),IDE判断帧格式为标准还是拓展,保留位r0、r1发送时要求位显性电平
  • 数据段:包含0到8个字节数据
  • CRC段:16位,15位CRC+1位CRC界定符,检查帧传输错误的帧,计算包含CRC段前的所有位
  • ACK段:2位,ACK槽+ACK界定符,确定是否正确接受,发送端置隐性,接收端成功接收后置显性
  • 帧结束:7位,全为隐形位,表示帧结束
遥控帧

接受单元向发送单元请求发送数据所用的帧
9de4b0d45380e61bf441e92352d45a60.png

  • 与数据帧相比,没有数据段,RTR位为隐形位
  • 遥控帧的的数据长度码代表所请求数据帧的数据数据长度码
错误帧

701bf29eda70a93d2306a2a57db4630e.png

  • 错误标志:6个位,全为显性表示主动错误,全为隐形表示被动错误
  • 错误界定符:8个位,全为隐形
  • 错误检测:
    • 位错误:发送节点检测到总线电平与自身发送位不符。
    • CRC错误:接收节点校验失败。
    • 格式错误:固定字段(如界定符)电平不符协议规定。
    • ACK错误:发送端未收到ACK确认
    • 填充错误:连续出现6个相同的位
过载帧

936c070ac077efd5af0c85a4e8ee0f5b.png

帧间隔

用来分隔数据帧和遥控帧,将数据帧与遥控帧与前面的任何帧分开
717e77946f263d6f6858cdf0da850bee.png

  • 延迟传输只存在于被动错误状态的单元刚发送一个消息后

优先级

  • 空闲态下,先发送信息的单元获得发送权
  • 同时发送时,从仲裁位第一位开始仲裁,显性电平获得发送权
  • ID相同的数据帧和遥控帧,RTR为显性的有优先权(数据帧)
  • ID相同的标准数据帧和拓展数据帧,IDE为显性有优先权(标准)

传输流程

步骤1:总线空闲检测

  • 条件:总线空闲时,所有节点均处于隐性电平(逻辑1)。
  • 触发传输:任意节点检测到总线空闲且需发送数据时,启动传输。

步骤2:帧起始(SOF)

  • 硬同步:节点发送SOF(显性0),所有接收节点通过硬同步调整位时间,确保时序一致。

步骤3:仲裁段(非破坏性仲裁)

  • 逐位竞争:节点同时发送标识符(从最高位开始),并实时监听总线电平。
    • 若节点发送隐性(1)但监听到显性(0),则退出仲裁,转为接收模式。
    • 标识符数值越小(显性位越多),优先级越高。
  • 仲裁胜出:仅剩一个节点继续发送,其他节点等待总线空闲后重试。

步骤4:控制段与数据段传输

  • 控制段:发送IDE、DLC等信息,指明帧类型和数据长度。
  • 数据段:发送0~8字节数据,按DLC指定长度填充。

步骤5:CRC校验

  • 生成CRC:发送端计算数据段和部分控制段的CRC值,附加到CRC段。
  • 接收端校验:接收节点重新计算CRC,若与接收值不符,触发错误帧。

步骤6:ACK确认

  • ACK槽:发送端释放总线(置隐性1),接收节点在ACK槽内回显显性0,表示成功接收。
  • ACK失败:若发送端未检测到显性0,视为传输失败,触发重传。

步骤7:帧结束(EOF)

  • 结束标志:发送7位隐性1,所有节点确认帧传输完成。
  • 总线释放:节点等待总线空闲后,可发起新一轮传输。

I2S

比较

1. 核心特性对比

特性 UART I2C SPI CAN
通信方式 异步(无时钟) 同步(时钟线 SCL) 同步(时钟线 SCK) 异步(基于数据帧)
拓扑结构 点对点 多主多从(总线) 单主多从(总线) 多主多从(总线)
数据线数量 2(TX、RX) 2(SDA、SCL) 4(MOSI、MISO、SCK、SS) 2(CAN_H、CAN_L)
传输速率 低(通常 < 1 Mbps) 中(标准模式 100 Kbps,高速模式 3.4 Mbps) 高(可达 100+ Mbps) 中(1 Mbps 典型)
通信距离 短(< 15m) 短(板内或 < 1m) 短(板内或 < 1m) 长(可达 1km)
错误检测 奇偶校验(可选) CRC校验、自动重传
抗干扰能力 强(差分信号)
典型应用 调试接口、简单通信 传感器、EEPROM 高速外设(Flash、LCD) 汽车电子、工业控制

2. 优缺点分析

UART

  • 优点
    • 简单易用,成本低。
    • 全双工通信(可同时收发)。
    • 无需时钟同步,适合异步场景。
  • 缺点
    • 不支持多设备通信。
    • 速率低,易受时钟偏移影响。
    • 无硬件错误检测(依赖软件校验)。

I2C

  • 优点
    • 仅需两根线,支持多主多从。
    • 地址寻址机制(7/10位地址)。
    • 适合低速、短距离设备互联。
  • 缺点
    • 速率较低(受上拉电阻限制)。
    • 总线冲突需仲裁(可能增加延迟)。
    • 无错误检测和流控机制。

SPI

  • 优点
    • 高速全双工通信。
    • 无地址限制(通过片选信号选择设备)。
    • 灵活性高(时钟极性和相位可调)。
  • 缺点
    • 需要较多引脚(每增加一个从设备需多一个SS线)。
    • 无硬件错误检测和冲突处理。
    • 仅支持单主模式。

CAN

  • 优点
    • 高可靠性(差分信号、CRC校验、自动重传)。
    • 多主架构,支持优先级仲裁。
    • 长距离、强抗干扰能力(适合工业环境)。
  • 缺点
    • 协议复杂,开发成本高。
    • 硬件成本较高(需专用CAN控制器)。
    • 速率较低(高可靠性牺牲了速度)。
Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2023-2025 John Doe
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信