Skip to main content
改进型内部集成电路总线(I3C)接口为所连接的 I3C 设备提供快速、低成本、低功耗的两线制数字接口。
I3C 仅支持 aDSP 传感器通信。不支持 Linux 用例。

概述

总线特性

  • 两线制串行接口(SDA + SCL),最高支持 12.5 MHz
  • 与同一总线上的传统 I2C 设备向后兼容
  • 地址阶段:400 kHz
  • 数据阶段:12.5 MHz

高级功能

  • 支持带内中断(IBI)
  • 热加入(Hot-join,动态添加设备)
  • 同步定时和异步时间戳
  • 写操作期间的 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

故障排查

  • 检查 SDA/SCL 物理连接和上拉电阻(1–4.7 kΩ)
  • 确认供应商 ID 和设备 ID 与预期值匹配
症状: 枚举期间设备无响应。确认地址阶段 SCL 频率为 400 kHz。如有需要,在固件配置中调整时钟分频器设置。
症状: 数据损坏或读/写失败。检查总线电容——必要时降低。确认数据阶段 SCL 频率为 12.5 MHz。
  • 确认配置中已启用热加入
  • 将设备添加到允许热加入列表(供应商 ID + 设备 ID)
  • 检查 IBI 配置和设备上电时序
  • 确认总线模式(纯 I3C 或传统 I2C)
  • 检查 I2C 和 I3C 设备之间是否存在地址冲突
  • 确认开漏与推挽模式切换正确
  • 在配置中为特定设备启用 IBI
  • 配置正确的预期数据字节数
  • 确认中断处理程序已注册
症状: 间歇性通信失败。
  • 测量 SDA 和 SCL 的上升/下降时间
  • 调整上拉电阻阻值
  • 添加串联端接电阻
  • 缩短总线长度或降低电容

常见错误代码

资源

  • MIPI I3C 规范
  • Qualcomm Linux 接口指南
  • QUP v3 串行引擎文档