I3C 仅支持 aDSP 传感器通信。不支持 Linux 用例。
概述
总线特性
- 2 线串行接口(SDA + SCL),支持高达 12.5 MHz
- 与同一总线上的传统 I2C 设备向后兼容
- 地址阶段:400 kHz
- 数据阶段:12.5 MHz
高级特性
- 带内中断(IBI)支持
- 热加入(动态添加设备)
- 同步定时与异步时间戳
- 写操作期间的 8 位数据奇偶校验
- 目标设备的动态寻址
- 单倍数据速率(SDR)模式
- 符合 MIPI I3C 规范的 CCC(通用命令码)
数据阶段模式

数据包帧结构
总线初始化
1
控制器初始化
I3C 控制器驱动初始化控制器,包括固件加载和配置设置。
2
配置与设备数据库读取
驱动读取 I3C 配置和设备数据库:
- I2C 静态地址设备列表
- I3C 静态地址设备列表
- 预期的 I3C 动态设备(厂商 ID、设备 ID、预定义动态地址、关联驱动)
- 可选的允许热加入设备
3
设备枚举
驱动枚举总线上的设备并分配本地地址。
4
总线配置
驱动将总线配置写入控制器:
- 工作频率
- 纯 I3C / 传统 I2C 模式
- SDR/HDR 启用/禁用
- 支持 IBI 的设备及预期数据字节数
5
客户端软件配置
客户端软件接收 I2C/I3C 设备和热加入设备的设备列表与配置。
软件配置
固件加载
用于 QUP v3 串行引擎的 I3C 固件在 aDSP 启动期间随 SSC QUP 一起加载。 配置文件:GPIO 配置
每个串行引擎的默认 GPIO 配置位于:TLMM_MAP(active_pull, drive_strength, sleep_pull) — I3C 使用上拉激活、2 mA 驱动、keeper 休眠。
API
调试
启用调试日志
检查设备枚举
检查 GPIO 和时钟
启用 I3C 跟踪
故障排查
设备未被枚举
设备未被枚举
- 确认 SDA/SCL 物理连接和上拉电阻(1–4.7 kΩ)
- 检查设备树中的 I3C 节点配置
- 查看
dmesg | grep -i i3c中的枚举错误 - 确认厂商 ID 和设备 ID 与预期值匹配
地址阶段时序问题(400 kHz)
地址阶段时序问题(400 kHz)
症状: 枚举期间设备无响应。确认地址阶段的 SCL 频率为 400 kHz。必要时在固件配置中调整时钟分频设置。
数据阶段时序问题(12.5 MHz)
数据阶段时序问题(12.5 MHz)
症状: 数据损坏或读/写失败。检查总线电容 — 必要时降低。确认数据阶段的 SCL 频率为 12.5 MHz。
热加入不工作
热加入不工作
- 确认配置中已启用热加入
- 将设备添加到允许热加入列表(厂商 ID + 设备 ID)
- 检查 IBI 配置和设备上电时序
I2C/I3C 混合总线问题
I2C/I3C 混合总线问题
- 确认总线模式(纯 I3C 还是传统 I2C)
- 检查 I2C 和 I3C 设备之间的地址冲突
- 确认开漏与推挽模式切换正确
未收到 IBI(带内中断)
未收到 IBI(带内中断)
- 在配置中为特定设备启用 IBI
- 配置正确的预期数据字节数
- 确认中断处理程序已注册
信号完整性问题
信号完整性问题
症状: 间歇性通信失败。
- 测量 SDA 和 SCL 的上升/下降时间
- 调整上拉电阻值
- 添加串联端接电阻
- 缩短总线长度或降低电容
常见错误码
收集日志以获取支持
资源
- MIPI I3C 规范
- Qualcomm Linux 接口指南
- QUP v3 串行引擎文档

