MIPI I3C V1.1.1版本协议解读(二)

📅 2026/6/16 19:51:29
MIPI I3C V1.1.1版本协议解读(二)
一、前言前一博客介绍I3C V1.0版本缺少一些特性因此以版本MIPI I3C V1.1.1进行解读。I3C多用于传感器学习可在该领域具有重要作用。二、I3C特性I3C兼容I2C引入推挽模式替换SCL的推挽SDA在推挽和开漏中灵活切换从而降低功耗。I3C引入带内中断的方式不需要额外的中断线。引入SDR-12.5M的速率远高于I2C的标准模式-400KFM的1M速率。有兼容I2C设备的静态地址同时也具有新增的动态地址分配特性。I3C支持消息传输有分称广播消息和直接消息两种一个是对全别I3C设备一个是对指定设备。I3C除了SDR模式还支持HDR-DDR,HDR-BT模式速率上有提升。I3C也像I2C一样具有SDA和SCL线。I3C会根据广播CCC(common commad code)和Direct CCC来判断是一对一还是一对全部。下面是各种I3C时序的示意图Start后面的header用于仲裁可以用于带内中断热连接或是主机控制权给其他设备。I3C协议提供主机和从机的切换功能也就是CR功能不过此时刻只能为主机或是从机并且总线上仍保留一主多从的功能。I3C的BCR总线特性寄存器会公开支持的器件角色。三、I3C主/从支持的功能下面是主设备需要支持的功能从设备不一定需要支持1、生成时钟跟I2C一致2、管理上拉结构说明推挽PP和开漏OD是主机控制。这里提一个疑问从机需要管理PP和OD吗这里给出的答案是不需要的3、管理动态地址分配。4、一旦从设备发起地址仲裁请求带内中断热连接请求要把主机的权力给发起的从机等主机要做处理。I3C从设备需要支持的功能1、监听I3C CCC命令要能够识别出广播CCC和直接CCC的命令内容2、能发起带内中断请求IBI3、生成热连接请求HJ4、可以请求主机权限5、支持I3C定义的HDR模式任意组合四、I3C协议介绍4.1、SDR模式初始化过程是SDR模式不允许HDR模式。SDR模式跟I2C的协议很相似只不过SDR模式数据速率高因为I2C里面有滤波器高频翻转信号会被过滤掉所以看不到信号变化。上电后I3C具有静态地址这是继承I2C原有的特性。后面主机会给每个I3C设备分配动态地址动态地址都是独一无二的。动态地址的值也会决定IBI的优先级。思考下面的含义目前用到的IP应该不支持第二主机【I3C 总线上的所有第二主机都应通过 CCC 命令了解总线上每个 I3C 设备的动态地址和特性寄存器】下面是I3C 设备担任不同角色需要支持的功能里面有个坑需要注意即使I3C IP不支持HDR模式从机也需要支持HDR容错识别出HDR退出模式。I3C兼容I2C但是不是完全兼容当I3C以SDR模式发送数据时要把50ns的滤波电容关闭。目前接触的IP时要求I3C发I3C时序不建议使用I3C收发I2C的时序不支持混合设备。这句话怎么理解【I3C 总线的性能在很大程度上取决于可能连接到该总线的 I2C 设备。因此在任何 I3C总线实例化时允许的 I2C 器件必须符合表 4 中列举类别之一。此外如果 I3C 总线上不存在I2C 或 I3C 器件那么应具有一个固定的 I2C 地址它匹配与错误类型 S0 相关的任何地址】4.2、I3C特性寄存器I3C特性寄存器有三类。这三类必须要有否则协议上是不允许连接到I3C总线上的。这些寄存器都是只读的。1、总线特性寄存器BCR2、器件特性寄存器DCR3、传统虚拟寄存器LVR因为目标IP不支持I2C功能所以不需要LVR寄存器。4.3、SDR时序I3C的SDR与I2C的时序虽说相似但还是有区别。1、I2C的数据第九bit是N/ACK而I3C的T-bit有双重含义写数据跟的T是奇偶校验TXOR(data[7:0]1’b1),保证一定是奇数个1。读数据跟的T是读数据控制T0结束数据T1继续传输数据。2、I3C SCL一定是推挽SDA开漏和推挽灵活切换。3、待理解【由于 I3C 与 I2C 的地址头和数据字位数相同因此一条消息无论是 Direct 或 BroadCast方式发送到该 I3C 从器件I3C 从器件只需要知道消息是否是 I3C 消息(与 I2C 消息相对)】4、I3C消息内容的起始点和结束点是Start(Sr)到Sr或STOP。5、0x7E的地址头可以区分I3C和I2CI2C是不会有0x7E。发的不是0x7E,I3C不能响应。这里展示了I3C的时序标记1一旦分配了动态地址除非要求重置否则它只能作为 I3C 从站运行。但是这边的IP是不支持I2C的所以即使有静态地址也不会响应I2C时序。从机根据需要处理ENTDAA,SETDASA CCC命令忽略S0错误。I3C的地址头 7bit addr 1bit RnW 1bit NACK/ACK (开漏模式) 。某些可仲裁地址头可以使用推挽和更高的速度在 SDA 上驱动。Sr后面内容推挽,若有ACK开漏。下面也支持从机发这是与I2C区别之一1、IBI动态地址RnW 1‘b12、第二主机权请求动态地址RnW 1‘b03、热连接特殊地址0x2我理解的I3C地址仲裁Start后面是地址如果主机发送给0那么就会将SDA强驱动为0满足I2C 高电平不变低电平边的规则。如果发送的是1主机就驱动High-Z,从机可能会驱动为0如果是0表示有从机获得仲裁其他从机丢失仲裁。动态地址有要求0x3~0x7B, 也可以设置0x3 ~ 0x3f也就是A6为0目的是加速传输。下面的图片的最上面的时序如果看I3C主机看到动态地址的A6为1表示没有从机驱动如果有那么A6一定为0。那么就可以以推挽模式发送完剩下的地址。下面截图部分是极端情况目前支持的IP不会发送因为不支持IBI。Sr后面主机发送的地址不会仲裁 I3C从机不会发送自己的动态地址和热连接地址因此也就不需要开漏模式应该为推挽。RnW后面的ACK/NACK必须为开漏。I3C从机地址限制I3C主机分配动态地址时需要注意有些地址是不允许使用的原因是这些地址会用于I2C器件被I3C使用的字段等。地址头的结束一定是跟着ACK或是NACKACK/NACK是开漏驱动这是为了获取目标从机的响应。如果ACK响应后下面描述了开漏到推挽的切换协议讲到ACK应答器件SCL0时从机开漏驱动0在SCL上升沿后从机释放SDA为High-Z, I3C主机驱动SDA为低电平。在ACK SCL下降沿后推挽驱动SDA数据。T在读数据时可以作为读数据的控制。注意有几种情况情况1、I3C从机在第9位发送T0这是从机终止读传输随后I3C在SCL上升沿后发出STOP或是RESTART情况2、I3C从机在第9位发出T1主机也想继续读数据情况3、I3C从机在第9位发出T1但是主机想终止数据在SCL上升沿后驱动SDA为低电平Sr在SCL下降沿后可以时低电平或是高电平可以跟着STOP或是传输新的事物。主时钟延迟I3C不支持I2C的clock stretching,但是也可以延迟时钟低电平时间。1、需要将消息送到从机主机需要点时间2、主机需要同步内部数据主机需要点时间几种情况下主机保持SCL为低电平。1、I3C/I2C 传输ACK/NACK 阶段2、写数据传输奇偶校验位3、I3C 读传输转换位4、动态地址分配分配地址的第一位4.4、总线初始化下面是BUS 条件时序I3C主机提供一种机制告诉从机I3C总线将要到来的活动级别因此定义了4钟活动状态级别。根据收到的活动状态信息从机可以调整内部配置例如FIFO的触发级别省电时钟速率。当然这个机制不是从机必须支持的。支持RSTDA CCC命令让动态地址复位I3C的地址仲裁使用的是48bit的临时ID和I3C特性寄存器BCR和DCR。上面值小的优先获得仲裁权。I3C有可能有I2C静态地址但一定有临时ID。临时ID包括MIPI 制造商ID临时ID类型选择Part ID, Instance ID等。动态地址仲裁使用 OD 模式RESTART 信号和广播地址(7’h7E)可用 OD 或是 PP 模式。主机可以用静态地址为I3C器件分配动态地址。下面是主机发送ENTDAA命令来分配动态地址热插拔连接机制允许从机在总线配置后加入总线那么主机要知道从机信息需要Hot-Join机制获取slave信息。从设备等到Bus avaliable condition。slave发出START请求SDA拉低在等待SCL拉低。在start后发出7’h02/W的从设备地址作为IBI。主机可能有下面几种情况1、NACK回应从设备需START再次尝试。2、ACK回应广播禁用Hot-Join, 通过ENEC/DIEC。3、ACK回应发出ENTDAA来进行动态地址分配。hot-join后的从机拿到动态地址IBI发起必须使用该动态地址。带内中断动态地址低的具有较高的优先级。通过从机的BCR[2]决定IBI playload值。主机也可以设置DISEC来禁用IBI。不支持第二主机功能这里就不讲。广播CCC和直接CCC的范围分别支持0x0 ~ x7F和0x80 ~ 0xFE。下面是广播CCC和直接CCC时序框架。CCC命令有很多时序这里选择一些比较重要的时序错误检测机制TE0是表示检测地址头(预期0x7e)不符合规范TE1是CCC奇偶校验错误TE2是写数据奇偶校验错误TE3是动态地址分配奇偶校验错误TE4是在Sr动态地址后检测到0x7E丢失TE5是检测到非法的CCC