在了解I3C之前先了解,什么是I3C协议的基础版?MIPI I3C Basic 是功能强大、灵活且高效的 MIPI I3C 接口的精简版,即功能减少、复杂性较低的版本(I3C Basic 是 I3C的子集),适用于广泛的设备互连应用,包括传感器和存储器接口。因为MIPI仅对非联盟用户公开了基础版本,所以我仅基于基础版本做一些介绍。(基础班就是为了推广而开放出来的免费版本)
介绍
移动产品中传感器的激增带来了重大的设计挑战,由于没有一致的方法来连接物理传感器,设备本身和平台设计人员面临着多种零碎数字接口,包括 I2C、SPI 和 UART 等。但除了这些协议主接口之外(例如I2C的SCL和SDA),可能还需要其他信号,例如专用中断、芯片选择信号以及使能和睡眠信号。这会增加主机 GPIO 资源消耗,进而需要通过增加更多的主机封装引脚和更多的 PCB 层并伴随系统成本的提高。随着时间的推移和传感器数量的增加,这种情况变得越来越难以支持和管理。已开发的 MIPI I3C 接口以简化传感器系统设计为目标,通过为传感器提供快速、低成本、低功耗、两线数字接口。
1.1本篇文章主要介绍:
• I3C 接口协议和命令用于 I3C 基础
• 电气规范,例如时序和电压电平
• 支持特定类别的传感器和其他设备
以下内容请另行查阅资料(不在I3C协议基础版文档中)
• I3C 设备中的机械、系统和实现细节
• ESD(静电放电)结构
• 系统电源管理
• 除总线管理命令代码外,用例特定的数据或格式定义
1.2 I3C的目的
I3C 接口旨在改进 I2C 接口的特性,保留向后兼容性(兼容旧的I2C)。该规范定义了主机处理器和外围传感器之间的标准多点接口。实施 I3C 规范让移动终端系统具有高效性、低成本、良好的可拓展性和灵活性等特征。
1.3 I3C的主要特征
I3C 接口关注的主要问题是:在传输数据和控制时保持低功耗,同时减少接口使用的物理引脚数量。因此,I3C 接口具有以下特点:
• 使用高达 12.5 MHz 的两线推挽串行接口
• 传统 I2C 设备在同一总线上共存(有一些限制)
• 动态寻址,同时支持传统 I2C 设备的静态寻址
• 传统 I2C 传输
• 类似 I2C 的单数据速率传输 (SDR,Single Data Rate messaging)
• 可选的高数据速率传输模式 (HDR,Optional High Data Rate messaging Modes)(此项不支持 I3C BASIC)
• 多点功能
• 多主功能
• 带内中断支持
• 热连接支持
• 同步时序支持和异步时间戳 (此项不支持 I3C BASIC)
在保持低功耗的前提下(I3C支持1.8V/3.3V),I3C提供了比I2C的十倍以上的速率。
二、术语定义(简单选几个介绍,详细参看协议文档)
ACK:Acknowledge,应答信号。NACK,没有应答。
Address Arbitration:地址仲裁,为了避免争用。
Arbitration:如果两个设备同时开始传输,则需要仲裁来确定总线控制。如果主设备寻址多个从设备,则在从设备传输期间也可能需要仲裁
Bridge Device:I3C 总线上的设备,允许从本地 I3C 总线协议转换为另一种协议(如 SPI、UART 等)。
Bus Available Condition:I3C 总线上的状态,其中 SCL 线和 SDA 线均处于高电平至少保持 tAVAL(具体时间参阅协议标准) ,然后设备能够在总线上启动事务。
Bus Free Condition:I3C 总线上的状态在 STOP 之后和 START 之前至少 保持tCAS(具体时间参阅协议标准)。
Bus Idle Condition:总线空闲状态(Bus Free Condition)的延长持续时间,指示设备可能会尝试热加入 I3C 总线。
CRC5:五阶多项式长度的循环冗余校验。
三、 技术概述
I3C 是一种两线双向串行总线,针对多个传感器从设备进行了优化,并且一次仅由一个 I3C 主设备控制。I3C 向后兼容许多传统 I2C 设备,但 I3C 设备还支持更高的速度、新的通信模式和新的设备角色,包括随时间更改设备角色的能力(即,初始主控可以将主控角色传递给总线上的另一个 I3C 设备(如果第二个 I3C 设备支持该功能))。
I3C 基础包括:
• 支持许多传统 I2C 从设备和消息
• I3C 单数据速率 (SDR) 模式:新的 I3C 增强版 I2C 协议支持定向消息(private messages),并添加两种标准内置消息:
• 广播消息,发送到总线上的所有 I3C 从机
• 直接消息,寻址到特定的从机
3.1 I3C的基础原则
I3C 支持多种通信格式,全部共享一个两线接口。两条线分别指定为 SDA 和 SCL:
• SDA(串行数据)是双向数据引脚
• SCL(串行时钟)是时钟引脚
I3C 总线支持各种消息类型的混合:
- I2C 类 SDR 消息,SCL 具有高达 12.5MHz的时钟速度
- 广播和直接通用命令编码 (CCC,Broadcast and Direct Common Command Code) 消息,允许主设备分别与 I3C 总线上的所有或一个从设备通信。
- HDR 模式消息(基础版不支持)
- 发送给传统 I2C 从设备消息。
- 从设备向主设备发起的 START 请求,例如发送带内中断或请求获得主设备角色。
下图简单说明了如何启动 I3C 通信:
• 所有I3C 通信都发生在一个帧内。帧以 START 开始,然后是一次或多次传输,然后是 STOP。
• 对于 I3C Basic 不支持但 I3C Basic 设备可以容忍的 HDR 模式:
• 首先,专用广播 I3C 地址 (7’h7E) 被分配给 I3C 总线上的所有从设备。
• 然后发出 EnterHDR CCC 之一,表明主设备正在进入 HDR 模式。每个 HDR 模式都有自己的 EnterHDR CCC。
• 之后是一个或多个HDR 传输。
• HDR 模式通过使用 HDR 退出模式协议结束。
3.2 主从设备
3.2.1 主机/主设备
I3C 总线要求一次只有一个 I3C 设备用作 I3C 主设备。在I3C术语中,这个I3C Master Device就是Current Master。在典型应用中,当前主设备是总线上的 I3C 设备,它发送大部分 I3C 命令 (CCC),寻址所有从设备(广播 CCC)或特定的单个从设备(定向 CCC)。Current Master 也是 I3C 总线上唯一允许发送 I2C 消息的设备。除了发送 I3C 命令和 I2C 消息外,I3C 主设备还:
• 生成总线时钟
• 管理上拉结构
• 管理动态地址分配过程(包括热连接事件),同时充当主设备
• 管理 START 来自总线上 I3C 从设备的请求以及地址仲裁请求:
• 生成带内中断
• 对于热连接事件
• 成为当前主设备
• 支持 I2C 传统从设备
• 支持 I3C SDR 模式
除了主机外,I3C还支持多个从主机/Secondary Master Device(即第二主机,但这个主机地位低于主机,除非它转正),具体扮演什么角色不详细叙述。
3.2.2 从机/从设备
总线支持最多11个从机,数量和很多因素相关,比如PCB走线,设备的容性负载,包括从设备类型(I2C还是I3C)
I3C 从设备可以选择:
• 请求带内中断
• 生成热连接事件
• 请求成为当前主设备,如果 I3C 从设备也具有 I3C 主设备功能
汇总以下总线的接入:
四、时序
寄存器不叙述,时序选择几个简单谈谈。像之前叙述的,I3C还有很多模式,下面我只贴上基础的时序图,各种时序参数请自行参阅协议文档,I3C的基础版标准大概177页,相比I2C和SPI还是比较复杂的,如果大家注意看的话,I3C同时引入了CDR。可以想象,2线的标准引入如此多的功能,必然带来更多的复杂性。
4.1 开始
4.2 停止
4.3 主SDR时序
4.4 从机结束读,主机生成STOP
4.4 从机结束读,主机生成重复开始
4.5 滤波
下图展示了与传统 I2C 设备上的尖峰滤波器相关的时序参数。应满足此时序,以确保传统 I2C 设备能正确忽略 I3C 高速模式。建议 SCL 引脚和 SDA 引脚都带有尖峰滤波器。
五、通信格式
1、
2、
六、典型的 I3C 基础版协议通信(选摘)
6.1 I3C的SDR
6.1 SDR下的CCC
结语:以上是对I3C的部分模式以及时序的简单讲解,感兴趣的朋友可以参阅MIPI的I3C协议标准,同时给大家打包了I3C的从机IP(源自NXP,感兴趣的可以学习)
I3C master slave verilog实现源码下载:
感谢大家阅读!