I²C+I3C学习笔记

一、I2C

I²C,也叫IIC,是Inter Integrated Circuit的缩写。

I2C速度

I²C最初的速度是100 kbit/s,但随着市场的变化,要求越来越高,依次出现了几种更高的速度:400 kbit/s、 1 Mbit/s、 3.4Mbit/s 和 5 Mbit/s的速度。
双向通信速度(模式): 100 kbit/s:标准模式,Standard-mode (Sm); 400 kbit/s:快速模式,Fast-mode (Fm); 1 Mbit/s:快速模式+,Fast-mode Plus (Fm+); 3.4Mbit/s:高速模式,High-speed mode (Hs-mode);
单向通信速度(模式): 5 Mbit/s:超快模式,UItra Fast-mode (UFm)。
可以参看I²C协议手册: I²C+I3C学习笔记_第1张图片

I²C高速模式

通常,I²C用的最多也就是100 kbit/s(标准模式)和 400 kbit/s(快速模块)这两种通信速度。
因为常规I²C设备的通信速度不高,再次就是标准(快速)模式电路更简单(更省钱),所以标准(快速)模式最为广泛,以至于很多开发者认为I²C的通信速度很低。
I²C总线的成功,以及大面积的使用,使其很多子设备都遵循I²C协议。但是,市场需求总是千变万化,有些设备要求总线挂更多设备、通信速度更快。
所以,3.4Mbit/s 的高速模式就这样在原有的基础上“升级”而来,而且,要向下兼容早期的标准模式

高速模式协议

I²C要达到3.4 Mbit/s,和标准模式的协议肯定有一些差异,下面描述一下高速模式常见的一些通信协议内容。
1.驱动电路 标准、高速混合模式下,驱动电路会有一些差别:
I²C+I3C学习笔记_第2张图片
为了提高时钟速度,在(3)的位置增加了电流源上拉,这样才使SCLH时钟信号更快更稳。

2.传输格式 高速模式是向下兼容标准模式,所以,传输格式兼容标准格式的同时,还做了一定改进。 I²C+I3C学习笔记_第3张图片
起始条件一样,后面传输的时候,启动高速(电流源)会增加传输数据速率。
然后,传输格式也做了一定改进: I²C+I3C学习笔记_第4张图片
3.模式切换 快速模式向下兼容标准模式,而高速模式又要向下兼容标准模式,因此, I²C总线在起始状态不能处于 高速模式,需要由 快速模式切换 到高速模式 。
切换到高速模式,又可以切回快速模式,这样就能保证I²C总线上可以挂各种设备(混合各种模式设备)。

这里附一个混合总线的通信速度: I²C+I3C学习笔记_第5张图片
4.其他 高速模式虽然解决了传输速度的问题,但同时也带来了诸多问题,控制器的升级、传输线要求更高等,使其推广还是受到了一定阻碍,导致没有大面积使用。
最后,关于I²C高速模式,不是很建议大家深入研究,做一个了解即可,只要别人问你时,你不要回答I²C不支持Mbit/s传输就行了。

二、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较高的时钟进入设备内部电路。
 
     I²C+I3C学习笔记_第6张图片
 

3.通讯协议

    ①SDR动态分配地址

  •     I3C可以为所有的I3C从设备动态的分配7-bit address
    • 在I3C从设备中会有两个standardized characteristics register和内部的48-bit的临时ID去协助此过程
      • Bus Characteristic Register    这个只读寄存器描述了I3C兼容设备在动态地址分配和通用命令代码中使用的角色和功能 I²C+I3C学习笔记_第7张图片
      • Device Characteristic Register    这个只读寄存器描述了I3C兼容的设备类型(例如加速计、陀螺仪等),用于动态地址分配和通用命令代码 I²C+I3C学习笔记_第8张图片
  • 仍然支持I2C的静态地址
    • 传统I2C设备需要提供的只读寄存器:Legacy Virtual Register,用来描述该I2C设备的功能(工作模式,时钟频率等)
    ②主设备发送的地址
            I²C+I3C学习笔记_第9张图片
  •     发送静态地址:持有该地址的I2C从设备响应
  •     发送7位的0X7E:此地址为广播地址,所有的I3C从设备都会对这个地址进行响应,所有的I2C从设备都不会对这个地址进行响应,因为I2C中该地址是保留的。
  •     发送动态地址:持有该地址的I3C从设备响应
 
        I3C Slave设备不需知道自身处在I2C总线上或是I3C总线上。如果其自身有一个I2C静态地址,那么它可以一直使用这个地址,直到被赋予一个动态地址。一旦被赋予了动态地址,它就必须作为一个I3C Slave设备工作,除非被要求重置。在被赋予动态地址之前,I3C Slave 设备只能以I2C设备的方式工作,但是添加了以下特性:
        必要时候紧接着START条件可以响应I3C广播协议。
        正确处理CCC的ENTDAA和SETDASA命令。 / AMSS/ sm8250_slpi/ slpi_proc/ ssc/ inc/ utils/ sns_com_port_types.h
 
    ③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
事先约定好
可调
可调
可调
I²C+I3C学习笔记_第10张图片
 
I3C在不同模式下与I2C每传输一个bit数据消耗的能量对比(左图)以及比特率的对比(右图)。从结果来看,I3C在各方面都更具优势。I3C的HDR_TSP模式是数据速率最快功耗最低的一种模式,能够支持超过33Mbps的有效数据比特率。
I²C+I3C学习笔记_第11张图片
 
 
 
 

你可能感兴趣的:(嵌入式,学习,笔记)