I3C 协议¶
免责声明¶
本章将重点介绍对软件开发人员重要的方面。 对于所有与硬件相关的内容(例如总线上如何传输数据,如何防止冲突等),请参考 I3C 规范。
本文档只是对 I3C 协议及其引入的概念的简要介绍。 如果您需要更多信息,请参考 MIPI I3C 规范(可在此处下载 https://resources.mipi.org/mipi-i3c-v1-download)。
简介¶
I3C (发音为 “eye-three-see”) 是一种 MIPI 标准化协议,旨在克服 I2C 的限制(速度有限,中断需要外部信号,无法自动检测连接到总线的设备等),同时保持低功耗。
I3C 总线¶
I3C 总线由多个 I3C 设备以及可能的一些 I2C 设备组成,但现在让我们专注于 I3C 设备。
I3C 总线上的 I3C 设备可以具有以下角色之一
主设备:该设备驱动总线。它负责发起事务或决定谁可以在总线上发言(I3C 中可能存在从设备生成的事件,请参见下文)。
从设备:该设备充当从设备,无法向总线上的另一个从设备发送帧。如果主设备允许,该设备仍然可以主动向主设备发送事件。
I3C 是一种多主协议,因此一条总线上可能存在多个主设备,但一次只能有一个设备充当主设备。为了获得总线所有权,主设备必须遵循特定的程序。
I3C 总线上的每个设备都必须分配一个动态地址才能进行通信。在此之前,该设备只能响应有限的一组命令。如果它具有静态地址(也称为传统的 I2C 地址),则该设备可以响应 I2C 传输。
除了这些每个设备的地址外,该协议还定义了一个广播地址,以便寻址总线上的所有设备。
一旦为设备分配了动态地址,该地址将用于与设备的任何直接通信。请注意,即使在分配了动态地址之后,设备仍应处理广播消息。
I3C 设备发现¶
I3C 协议定义了一种机制来自动发现总线上存在的设备、它们的功能以及它们提供的功能。在这方面,I3C 更接近于 USB 等可发现的总线,而不是 I2C 或 SPI。
发现机制称为 DAA(动态地址分配),因为它不仅发现设备,还为它们分配动态地址。
在 DAA 期间,每个 I3C 设备报告 3 个重要事项
BCR:总线特性寄存器。 这个 8 位寄存器描述了设备与总线相关的功能
DCR:设备特性寄存器。 这个 8 位寄存器描述了设备提供的功能
配置的 ID:一个 48 位的唯一标识符。 在给定的总线上不应存在配置的 ID 冲突,否则发现机制可能会失败。
I3C 从设备事件¶
I3C 协议允许从设备自行生成事件,从而允许它们临时控制总线。
这种机制称为 IBI(带内中断),顾名思义,它允许设备生成中断而无需外部信号。
在 DAA 期间,总线上的每个设备都分配了一个地址,并且该地址将用作优先级标识符,以确定如果 2 个不同的设备在同一时刻在总线上生成中断,则谁获胜(动态地址越低,优先级越高)。
如果主设备愿意,则允许其抑制中断。 此抑制请求可以是广播的(适用于所有设备)或发送给特定设备。
I3C 热插拔¶
热插拔机制类似于 USB 热插拔。 该机制允许从设备在主设备初始化总线后加入总线。
这涵盖了以下用例
探测总线时设备未通电
通过扩展板将设备热插拔到总线上
此机制依赖于从设备事件来通知主设备有新设备加入总线,并且正在等待动态地址。
然后,主设备可以随意处理该请求:忽略它或为从设备分配动态地址。
I3C 传输类型¶
如果忽略 SMBus(它只是对如何访问 I2C 设备公开的寄存器的标准化),则 I2C 只有一种传输类型。
除了 I2C 传输之外,I3C 还定义了 3 种不同的传输类别,I2C 传输在此是为了与 I2C 设备向后兼容。
I3C CCC 命令¶
CCC(通用命令代码)命令旨在用于与总线管理以及一组设备通用的所有功能相关的任何内容。
CCC 命令包含一个 8 位的 CCC ID,用于描述执行的命令。 此 ID 的 MSB 指定这是广播命令(bit7 = 0)还是单播命令(bit7 = 1)。
命令 ID 之后可以跟随有效负载。 根据命令的不同,此有效负载要么由发送命令的主设备发送(写入 CCC 命令),要么由接收命令的从设备发送(读取 CCC 命令)。 当然,读取访问仅适用于单播命令。 请注意,当向特定设备发送 CCC 命令时,设备地址将在有效负载的第一个字节中传递。
有效负载长度不会在总线上显式传递,应从 CCC ID 中提取。
请注意,供应商可以使用专用范围的 CCC ID 用于他们自己的命令(0x61-0x7f 和 0xe0-0xef)。
I3C 私有 SDR 传输¶
私有 SDR(单数据速率)传输应该用于任何特定于设备且不需要高传输速度的内容。
它相当于 I2C 传输,但在 I3C 世界中。 每次传输都会传递设备地址(DAA 期间分配的动态地址)、有效负载和方向。
与 I2C 的唯一区别是传输速度快得多(典型时钟频率为 12.5MHz)。
I3C HDR 命令¶
HDR 命令应该用于任何特定于设备且需要高传输速度的内容。
HDR 命令附加的第一件事是 HDR 模式。 I3C 规范目前定义了 3 种不同的模式(有关更多详细信息,请参阅规范)
HDR-DDR:双数据速率模式
HDR-TSP:三进制符号纯模式。 仅适用于没有 I2C 设备的总线
HDR-TSL:三进制符号传统模式。 适用于具有 I2C 设备的总线
发送 HDR 命令时,整个总线都必须进入 HDR 模式,这可以使用广播 CCC 命令完成。 一旦总线进入特定的 HDR 模式,主设备就会发送 HDR 命令。 HDR 命令由以下部分组成
一个大端序的 16 位命令字
N 个大端序的 16 位数据字
这些字可以用特定的前导码/后导码包装,这取决于所选择的 HDR 模式,并在此处详细说明(有关更多详细信息,请参阅规范)。
该 16 位命令字由以下部分组成
bit[15]:方向位,读取为 1,写入为 0
bit[14:8]:命令代码。 标识正在执行的命令、数据字的个数及其含义
bit[7:1]:此命令寻址的设备的 I3C 地址
bit[0]:保留/奇偶校验位
与 I2C 设备的向后兼容性¶
I3C 协议被设计为与 I2C 设备向后兼容。 这种向后兼容性允许在同一总线上连接 I2C 和 I3C 设备的混合,但为了真正高效,I2C 设备应配备 50 ns 的尖峰滤波器。
无法像 I3C 设备一样发现 I2C 设备,必须静态声明。 为了让主设备知道这些设备的功能(包括与总线相关的限制和功能),软件必须提供一些信息,这些信息通过 LVR(传统 I2C 虚拟寄存器)完成。