Skip to main content
改进型互联集成电路(I3C)接口的开发目的是为连接的 I3C 设备提供快速、低成本、低功耗的 2 线数字接口。I3C 接口旨在改进 I2C 接口的功能,同时保持向后兼容性。 这种 2 线串行接口支持高达 12.5 MHz。传统 I2C 设备可共存于同一总线上。I3C 总线支持带内(in-band)支持、热加入(hot join)、同步时序支持和异步时间戳。在写操作期间,转换位(transition bit)是 8 位数据的奇偶校验位。在读操作期间,控制器使用转换位来决定继续读取下一个数据还是中止读取。 数据阶段可以是推挽(push-pull)或开漏(open-drain),具体取决于设备的 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 宏的示例用法如下: