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 串行引擎文档

