I2C vs I3C时序差异

一、物理层与时序核心差异

1. 输出驱动方式不同

特性 I2C I3C
SDA 驱动 纯开漏(OD),全程靠上拉电阻 开漏 + 推挽混合:地址 / ACK 阶段开漏,数据阶段推挽
SCL 驱动 主设备推挽,从设备可拉低(时钟拉伸) 主设备推挽,从设备仅在开漏阶段可拉低
上升沿 慢,受 RC 充放电限制 快,推挽主动驱动上升沿

2. 地址阶段的时序差异

I2C 地址阶段(全程开漏):

复制代码
SCL:  ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐
SDA:  [ A7 ][ A6 ][ A5 ][ A4 ][ A3 ][ A2 ][ A1 ][R/W][ACK]
       开漏  开漏  开漏  开漏  开漏  开漏  开漏  开漏  开漏
  • 9 个时钟(7 位地址 + R/W + ACK),全部开漏
  • 从设备在第 9 个时钟拉低 SDA 表示 ACK

I3C 地址阶段(开漏 + 推挽切换):

复制代码
SCL:  ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐
SDA:  [ A7 ][ A6 ][ A5 ][ A4 ][ A3 ][ A2 ][ A1 ][R/W][ACK]
       开漏  开漏  开漏  开漏  开漏  开漏  开漏  开漏  开漏
       ↑ 前7位地址阶段保持开漏,用于仲裁和兼容I2C从设备
  • 地址阶段仍然是开漏(为了总线仲裁和兼容 I2C 设备)
  • 但地址 ACK 之后 ,如果是 I3C 从设备响应,SDA 切换到推挽传输数据

3. ACK 阶段的关键差异

特性 I2C I3C
ACK 由谁发 接收方(从设备或主设备) 接收方,但有奇偶校验位
第 9 位 ACK/NACK ACK/NACK
第 10 位 无 奇偶校验位(PAR),发送方驱动
第 11 位 无 ACK 校验位(ACK-Checksum),接收方回应
I3C 在每个字节后多了两位:
复制代码
I2C:  [8位数据] → [ACK] → 下一字节
I3C:  [8位数据] → [ACK] → [PAR] → [T-Bit/ACK-Checksum] → 下一字节
  • PAR:发送方计算的奇偶校验位(偶数校验)
  • T-Bit:接收方对 PAR 的回应(0 = 校验通过,1 = 校验失败)

这让 I3C 有了链路层错误检测 ,I2C 完全没有。

注意PAR和T-Bit不是每个阶段一定会有,它俩成对出现:
①SDR 数据阶段必须有

I3C SDR 模式下,每个数据字节的完整格式固定为 11 位:

复制代码
[8位数据] → [ACK] → [PAR] → [T-Bit]
   发送方    接收方    发送方    接收方
位 名称 谁驱动 作用 必须?
bit 0-7 数据 发送方 有效数据 是
bit 8 ACK 接收方 应答 / 非应答 是
bit 9 PAR 发送方 对「数据 + ACK」做偶校验 是
bit 10 T-Bit 接收方 回应 PAR 校验是否通过 是

PAR 的计算范围是**前面 9 位(8 位数据 + ACK)**的偶校验:

  • 9 位里 1 的个数为偶数 → PAR = 0
  • 9 位里 1 的个数为奇数 → PAR = 1

接收方收到后自己算一遍奇偶,和 PAR 对比:

  • 一致 → T-Bit 拉低(0),表示继续
  • 不一致 → T-Bit 拉高(1),表示校验失败,主设备应终止或重试

②地址阶段没有PAR

地址字节只有 9 位,和 I2C 完全一样:

复制代码
[7位地址] → [R/W] → [ACK]

地址阶段故意保持开漏、不加 PAR/T-Bit,原因是:

  • 兼容总线上的 I2C 从设备(I2C 设备不认 PAR)
  • 支持总线仲裁(多个主设备竞争时需要开漏线与)

所以抓波形时,地址后面看不到 PAR 是正常的,数据后面看不到才有问题。

③HDR 模式:不用 PAR,改用 CRC

I3C 进入 HDR(高速)模式后,帧格式完全不同:

  • 不用 PAR + T-Bit
  • 改用 16 位 CRC 校验整个数据块
  • 校验能力更强(能检错,不只是奇偶)

4. 和 I2C 从设备通信:没有 PAR和T-Bit

I3C 总线可以挂 I2C 从设备。当主设备和 I2C 设备通信时:

  • 主设备知道它是 I2C 设备(通过 DCR 或静态配置)
  • 自动切换到纯 I2C 格式,不加 PAR/T-Bit
  • 速率也限制在 400kHz 以下

5. 特定 CCC 命令:格式可能有例外

少数 CCC 命令有特殊时序,比如:

  • ENTDAA(动态地址分配):有专属的 48-bit ID 传输格式,不按普通数据字节走
  • 广播 CCC 写:多个从设备同时响应时,T-Bit 的行为是线与结果,不是单个设备的回应

但这些都是特殊场景,普通的读写温感数据走标准 SDR 格式。

4. START / STOP / Sr 的差异

信号 I2C I3C
START (S) SCL 高时 SDA 下降沿 相同,但有专用 START 信号
STOP § SCL 高时 SDA 上升沿 相同
重复起始 (Sr) SCL 高时 SDA 下降沿(和 START 一样) 相同,但 Sr 后必须重新发地址
总线空闲 SDA/SCL 都高 相同,但 I3C 有总线可用条件的更严格定义

时序波形上看起来一样,但 I3C 对时间参数的定义更精确,且 Sr 之后的地址阶段规则不同(I3C 可以在 Sr 后切换到 HDR 模式)。

5. 数据传输阶段

I2C(全程开漏):

复制代码
每个字节:8位数据(MSB先)+ ACK
速率受限于上拉电阻和总线电容

I3C SDR 模式(地址后推挽):

复制代码
地址阶段(开漏)→ ACK → 数据阶段(推挽)→ ACK → PAR → T-Bit
数据阶段 SCL 可以跑到 12.5MHz

I3C HDR 模式(可选高速模式):

复制代码
HDR-Exit 命令进入 → 双倍数据率(DDR,SCL上下沿都传数据)
速率可达 25+ Mbps
HDR-Exit 命令退出 → 回到 SDR

I2C 完全没有 HDR 模式。

二、I3C 特有的时序机制

1. 动态地址分配(ENTDAA)------ I3C 独有的时序

这是 I3C 最复杂的时序,I2C 完全没有:

复制代码
主设备发广播 CCC "ENTDAA" (0x7E写 + 0x01)
  → 所有 I3C 从设备进入地址分配模式
  → 主设备发 START + 0x7E写(保留地址7'h7E用于分配)
  → 从设备按 ID 优先级竞争,逐个发送 48-bit Provisional ID
  → 主设备分配 7位动态地址给每个从设备
  → 分配完成,从设备用新地址通信

整个过程涉及多轮 START/Sr/STOP,是 I3C 初始化时独有的时序。

2. 中断(In-Band Interrupt)------ I3C 独有的时序

I2C 从设备不能主动发起通信,必须靠额外的中断引脚。

I3C 从设备可以在总线空闲时主动拉低 SDA 发起中断:

复制代码
总线空闲(SDA=1, SCL=1)
  → 从设备拉低 SDA(产生类似 START 的信号)
  → 主设备检测到,发起 START + 该从设备地址(读)
  → 从设备返回中断原因

这在时序上是从设备发起的 START,I2C 不可能做到。

3. 多主仲裁

I2C 也有多主仲裁(SDA 开漏,线与),但 I3C 的仲裁更完善:

  • 主设备有主设备优先级
  • 支持主设备切换(Master Hand-off)
  • 仲裁失败的主设备能收到通知

三、I3C 不是每次通信都要用 0x7E 广播地址

0x7E 只在发送 CCC 通用命令 时使用,普通的读写单个从设备用的是该设备的动态地址。

0x7E 的使用场景

场景 用 0x7E 吗? 说明
发送广播 CCC(所有从设备都收) 用 如 RSTDAA、DISEC、SETMWL 等
发送定向 CCC(只给一个从设备) 不用 用从设备的动态地址 + CCC 命令
普通读单个从设备数据 不用 直接用动态地址读
普通写单个从设备数据 不用 直接用动态地址写
动态地址分配(ENTDAA) 用 必须用广播地址发起
从设备发起中断后响应 不用 主设备直接读中断从设备的地址

两种 CCC 模式的时序对比

广播 CCC(用 0x7E):

复制代码
START → 0x7E(写) → ACK → CCC命令码 → ACK → [参数] → Sr/STOP
         ↑ 广播地址,所有从设备都监听

定向 CCC(不用 0x7E):

复制代码
START → 从机动态地址(写) → ACK → CCC命令码 → ACK → [参数] → Sr/STOP
         ↑ 只有目标从设备响应
相关推荐
正经人_x2 小时前
学习日记59:PAVL
人工智能·学习·计算机视觉
外收内放3 小时前
Python基础语法练习题(64)
python·学习
努力努力再努力FFF3 小时前
题目:2026AI 证书选购指南:不同基础、不同诉求如何抉择
学习
只愿云淡风清3 小时前
正则表达式学习笔记-01 正则表达式的来源
笔记·学习·正则表达式
m4Rk_4 小时前
【论文阅读】Agent 记忆机制(97):MCMA——让 Agent 学会如何抽象记忆,实现跨任务经验迁移
论文阅读·人工智能·学习·开源·github
晓德4 小时前
7、LLM 模型是怎么训练生成的?(4)指令微调
人工智能·学习·算法·信息安全
问天_观心4 小时前
Mistral-7B QLoRA 实战(二):官方权重转换、4-bit NF4 加载与 Base Model 基线测试
人工智能·深度学习·学习·大模型·transformer
andrsted4 小时前
练题簿在线免费刷题:选择、填空、简答与排序,多种题型练出不同的掌握程度
学习·微信小程序·小程序·学习方法·刷题
乌暮4 小时前
# Spring 入门与 Spring MVC 实战指南:从零理解 IoC 到 RESTful 图书管理
java·开发语言·后端·学习·spring·mvc·restful