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 传输(此处用于与 I2C 设备向后兼容)之外,I3C 还定义了 3 种不同的传输类别。

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(单数据速率)传输应仅用于任何特定于设备且不需要高传输速度的内容。

它等效于 I3C 世界中的 I2C 传输。每个传输都传递设备地址(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 尖峰滤波器。

I2C 设备无法像 I3C 设备那样被发现,必须静态声明。为了让主设备知道这些设备的功能(在总线相关的限制和功能方面),软件必须提供一些信息,这些信息通过 LVR(旧式 I2C 虚拟寄存器)来完成。