Skip to main content
改进型集成电路间总线(I3C)接口旨在为连接的 I3C 设备提供快速、低成本、低功耗的 2 线数字接口。I3C 接口旨在改进 I2C 接口的功能,同时保持向后兼容性。 这种 2 线串行接口支持高达 12.5 MHz 的速率。传统 I2C 设备可共存于同一总线上。I3C 总线支持带内(in-band)支持、热加入(hot join)、同步定时支持和异步时间戳。在写操作期间,转换位是 8 位数据奇偶校验位。在读操作期间,控制器使用转换位来继续读取下一个数据或中止读取。 数据阶段可以是推挽或开漏,具体取决于设备的 I3C 能力(对于混合总线,I3C 控制器可以寻址 I2C 目标设备)。
  • START 条件之后的地址为开漏(仲裁阶段)。
  • 重复 START 条件之后的地址为推挽。
下图展示了 I3C 硬件和软件实体。
I3C 框图

图:I3C 框图

I3C 架构的主要特性如下:
  • I3C 控制器驱动软件:具有软件特权的实体,能够进行枚举和总线配置。
  • I3C 客户端软件:使用 I3C 总线对设备进行读/写的软件实体。

I3C 数据包帧结构

一个帧以 START 开始,依次为命令(8)、数据(8)、转换位(1)和 STOP。
I3C 数据包帧

图:I3C 数据包帧

其中,
  • ACK:确认(SDA 低电平)
  • S:起始条件
  • Sr:重复起始条件
  • P:停止条件
  • T:替代 ACK/NACK 的转换位
I3C 序列

图:I3C 序列

I3C 总线初始化

I3C 总线初始化过程如下:
  1. I3C 控制器驱动软件初始化 I3C 控制器(固件和配置设置)。
  2. I3C 控制器驱动软件读取 I3C 配置和设备数据库,包括:
    • I2C 静态地址设备列表。
    • I3C 静态地址设备列表。
    • 预期的 I3C 动态设备列表:供应商 ID、设备 ID、预定义的动态地址以及关联的驱动程序。
    • 可选的允许热加入的设备(供应商 ID、设备 ID 和预定义地址)。
  3. 通过 I3C 控制器软件,驱动程序枚举总线上的设备(设置本地地址)。
  4. I3C 控制器驱动软件将所需设备和总线特性信息写入 I3C 控制器:
    • 工作频率
    • 纯/传统 I2C 模式
    • SDR/HDR 启用/禁用(及类型)
    • 支持 IBI 的设备和预期数据字节
  5. I3C 客户端软件栈接收以下有关 I3C 配置和设备数据库的信息。
    • I2C 静态地址设备列表。
    • I3C 静态地址设备列表。
    • 预期的 I3C 动态设备列表:供应商 ID、设备 ID、预定义的动态地址以及关联的驱动程序。
    • 可选的允许热加入的设备(供应商 ID、设备 ID 和预定义地址)。

I3C 特性

aDSP/SDC I3C 子系统支持以下特性。
  • 地址阶段频率为 400 kHz。
  • 数据阶段频率为 12,500 kHz。
  • 与传统 I2C 向后兼容。
  • 目标设备的动态寻址。
  • 单数据速率(SDR)模式。
  • 符合 MIPI I3C 规范的 CCC 命令

I3C 接口组件

aDSP/SLPI 软件中的 I3C 使用场景支持传感器设备通信。
注意:I3C 不支持 Linux 使用场景。
下表列出了用于设备通信的 I3C 功能的软件驱动程序和配置支持。

表:aDSP/SLPI/SDC

文件类型说明
QUP v3 串行引擎配置
  • /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/ADSP.HT.5.5.c8/adsp_proc/core/settings/buses/qup_common/config/<chipset>/adsp/ssc/qup_devcfg.c
  • /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/ADSP.HT.5.5.c8/adsp_proc/core/settings/buses/qup_fw/config/<chipset>/fw_devcfg.c
  • /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/ADSP.HT.5.5.c8/adsp_proc/core/settings/buses/qup_common/config/<chipset>/adsp/ssc/qup_devcfg.json
固件配置设置
  • /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/ADSP.HT.5.5.c8/adsp_proc/core/settings/buses/qup_fw/config/<chipset>/fw_devcfg.c
  • /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/ADSP.HT.5.5.c8/adsp_proc/core/settings/buses/qup_fw/config/<chipset>/fw_devcfg.xml
公共 API
  • api/buses/i2c_api.h
  • api/buses/qup_common.h

I3C 软件 GPIO 配置

QUP v3 串行引擎的 I3C 固件在启动序列期间与 SSC QUP 一起加载。配置文件位于 aDSP 构建中。为特定 QUP v3 串行引擎实例启用 I3C 配置的源代码路径为 /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/ADSP.HT.5.5.c8/adsp_proc/core/settings/buses/qup_fw/config/<chipset>/fw_devcfg.c 和 /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/ADSP.HT.5.5.c8/adsp_proc/core/settings/buses/qup_fw/config/<chipset>/fw_devcfg.xml。 加载了 I3C 固件的 SSC QUP SE0 或 SE1 示例。
GPIO 配置:QUP 通用驱动程序中的每个串行引擎都配置了默认 GPIO 配置。QUP 通用驱动程序会根据串行引擎中加载的协议选择 GPIO 配置。特定 I3C 串行引擎实例的 GPIO 配置源代码路径为 /firmware/qualcomm-linux-spf-1-0_ap_standard_oem_nomodem/ADSP.HT.5.5.c8/adsp_proc/core/settings/buses/qup_common/config/<chipset>/adsp/ssc/qup_instance_mapping.c。 可以按如下方式覆盖默认 GPIO 配置:
TLMM_MAP 是用于初始化活动和睡眠状态 GPIO 配置的宏。例如,TLMM_MAP 宏的示例用法如下: