一、I2C
I²C,也叫IIC,是Inter Integrated Circuit的缩写。
I2C速度

I²C高速模式
高速模式协议




二、I3C
I3C最初的设计目的是为移动设备创建一个能够使用多个传感器的单一接口。随着现代化移动设备对于传感器数量的增加以及对性能的提高,I2C和SPI已经达到了他们所能支持的临界点,而I3C的出现就是为了解决这一问题,I3C可以在同一根主线上支持更多的传感器设备,而且不会因为要支持中断或睡眠模式而增加额外的逻辑信号。I3C可以在更低功耗的情况下提供更快的传输速率,该特性的提升不止是对移动设备,对其他的嵌入式设备也都是很大的帮助。例如穿戴设备,需要在有限的物理空间中使用多个传感器并且要求更小的耗电。
1.简述
I3C(Improved Inter Integrated Circuit)升级版的集成电路总线,同样两根总线:SDA和SCL
I3C接口致力于改善I2C的性能,并提供向后兼容,即兼容I2C。
名词解释:
SDR:Single Data Rate 单一数据传输模式
HDR:High Data Rate 高速数据传输模式
Main Master:当前被配置为I3C总线的主设备
Secondary Master:可以作为I3C的主设备,但是当前被配置为从设备。除了Current Master以外,总线上任何一个具有I3C Master功能的设备
Current Master:此时此刻是主设备
2.连接方式
SDR模式是I3C总线上的默认通讯模式,也是从Current Master向Slave传输私有消息的主要模式。I3C SDR模式与传统的I2C协议非常相似,无论是处理过程还是条件,因此I3C与许多I2C设备可以并存。
那么如何区分是I2C的数据包还是I3C的呢?
-
从I3C master到I2C的数据包会被I3C slave忽略
-
I3C Master到I3C Slave的数据包一般不会被I2C Slave检测到,因为I2C的低通滤波器会阻止I3C较高的时钟进入设备内部电路。

3.通讯协议
①SDR动态分配地址
-
I3C可以为所有的I3C从设备动态的分配7-bit address
-
在I3C从设备中会有两个standardized characteristics register和内部的48-bit的临时ID去协助此过程
-
Bus Characteristic Register 这个只读寄存器描述了I3C兼容设备在动态地址分配和通用命令代码中使用的角色和功能
-
Device Characteristic Register 这个只读寄存器描述了I3C兼容的设备类型(例如加速计、陀螺仪等),用于动态地址分配和通用命令代码
-
-
-
仍然支持I2C的静态地址
-
传统I2C设备需要提供的只读寄存器:Legacy Virtual Register,用来描述该I2C设备的功能(工作模式,时钟频率等)
-
②主设备发送的地址

-
发送静态地址:持有该地址的I2C从设备响应
-
发送7位的0X7E:此地址为广播地址,所有的I3C从设备都会对这个地址进行响应,所有的I2C从设备都不会对这个地址进行响应,因为I2C中该地址是保留的。
-
发送动态地址:持有该地址的I3C从设备响应
I3C Slave设备不需知道自身处在I2C总线上或是I3C总线上。如果其自身有一个I2C静态地址,那么它可以一直使用这个地址,直到被赋予一个动态地址。一旦被赋予了动态地址,它就必须作为一个I3C Slave设备工作,除非被要求重置。在被赋予动态地址之前,I3C Slave 设备只能以I2C设备的方式工作,但是添加了以下特性:
必要时候紧接着START条件可以响应I3C广播协议。
③I3C从设备的职责
紧随START或Repeated START条件,以任何速率尝试对I3C总线上的广播地址或指向自己的地址进行响应。一旦被选中,则I3C Slave就把这一条消息当成SDR模式处理。
如果一条消息指向Slave的动态地址,那么Slave可以ACK或简单NACK这个地址头。
如果ACK,则I3C Slave以SDR模式处理这条消息。
如果NACK,则抛弃接下来的任何数据,等待下一个START或Repeated START。
如果消息是一条广播消息,且读写标识为写,则Slave需要至少处理数据中的头一个字节。
如果广播消息的数据为一个字节,则这则消息为CCC。
I3C Slave 必须处理所有可以应用的CCC命令。一条命令可能是必须的,也可能根据上下文可选的。
如果CCC命令改变了了I3C总线的模式,则I3C Slave必须以下述两种方式中的一种来处理:
如果新的模式为动态地址指定模式,并且请求的是所有I3C Slave,则当前没有动态地址的设备都要参与地址的指定;已经有动态地址的则等待动态地址指定模式的退出。
如果新的模式为HDR,则支持HDR的Slave 可以选择进入HDR,不支持HDR的设备则启动本设备的HDR退出监测器以监听HDR Exit序列的到来。
如果消息的地址头既不是广播也不是动态地址,则I3C Slave必须等待Repeated START 或是 STOP。Slave可以记录或监测总线上传输的位流,但在总线上只能进行等待。
④公共传输格式

-
对应的start和stop跟I2C时序完全相同。
-
start+7bit(地址)+1bit(读写位)+1bit(应答位/非应答)
-
当地址头是个可仲裁的地址时,从设备可以向主设备发送如下三种请求:
-
In-Band中断请求,等同于使用额外的中断总线请求Master的介入控制。In-Band中断请求必须使用RnW位置1的设备动态地址
-
Secondary Master 请求,除非I3C Slave标记为支持此功能,否则不应请求这个功能。Secondary Master 请求必须使用RnW位置0的地址头。
-
热接入请求,只有当I3C总线可操作时,I3C Slave才可以发出此请求。该请求使用的头地址必须为特殊的7位0x02 Hot-Join。
-
如果Slave将SDA拉低后,然后Master尽快将SCL拉低,这段时间并未进行严格定义。
-
Master也应该将SDA拉低一段时间,形成时间重叠。
-
一旦Master将SDA拉低后,Slave就可以使用Open-Drain模式控制SDA线。
-
此时Slave就可以传输地址了。
-
-
⑤特性
-
带内中断
I3C允许从设备启动带内中断,这对于I2C和SPI设备来说都需要一根额外的信号线才能实现。当总线处于空闲状态时,从设备可以通过中断机制发送一个"START"信号,然后主设备会为从设备提供一个时钟信号,从设备可以通过主设备提供的分配地址将设备驱动到总线上来启动中断。如果此时有多个从设备尝试启动中断,则地址最小的从设备获得此次仲裁。同时主设备发出ACK信号响应此次中断并重新启动总线或者继续从从设备接收数据,也可以发出NACK信号来结束通信。例如,光传感器通常用于控制设备中显示器背光亮度,如果光条件改变,传感器向系统发出中断,请求发送数据到系统,当光条件稳定时,传感器不需要发送中断和数据,系统也不必查阅传感器数据,从而节约了功耗和实效。
-
热接入
I3C允许从设备在总线配置完成之后再连接到总线上,即热接入特性。连接在同一总线上的传感器可以暂时关闭,直到需要唤醒的时候才激活唤醒。热连接应遵守特定的电气限制,不得干扰MIPI I3C线路。已为启用和禁用事件、管理MIPI I3C特定功能(动态寻址、定时控制等)等标准操作定义了一组通用命令代码(CCCs)。该通用命令代码可以发送广播(发送给所有设备)或者可以指向总线上的特定设备。在使用传感器时功耗和性能是我们必须考虑的,因为即使主程序处理器处于空闲状态(低功耗模式或者深度睡眠),Always-on sensors 和 sensor hubs也会不断的累积数据,累积的传感器数据通常是有规律的,需要在sensor、sensor hub和application processor之间定期快速传输,从而最大限度地降低功耗。
三、I3C与I2C进行对比
| UART | SPI |
I2C
|
I3C
|
通信方式
|
全双工异步串行
|
全双工同步串行
|
半双工同步串行
|
同步串行
|
信号线
|
RX、TX、GND
|
SDO、SDI、SCLK、SS
|
SDA、SCLK
|
SDA、SCLK
|
从属关系
|
不存在从属关系
|
存在主从设备。SPI用
片选信号选择从机
|
存在主从设备。
IIC用地址(静态)选择从机。
|
存在主从设备。
用地址(动态、广播)选择从机。
|
通信速率
|
最大115200bps
|
不定,最高几M
|
400K,最高1M
|
SDR 4/8.8M,HDR 20M以上
|
单次传输
|
5-8bit
|
8bit
|
8bit
|
8bit
|
clk
|
事先约定好
|
可调
|
可调
|
可调
|

I3C在不同模式下与I2C每传输一个bit数据消耗的能量对比(左图)以及比特率的对比(右图)。从结果来看,I3C在各方面都更具优势。I3C的HDR_TSP模式是数据速率最快功耗最低的一种模式,能够支持超过33Mbps的有效数据比特率。
