今天给大家讲解一下I3C的知识,包括I3C动态地址分配、命令帧、中断以及时序等。
I3C(Improved Inter-Integrated Circuit)是由 MIPI 联盟推出的一种串行通信协议,旨在替代传统的 I2C 和 SPI 协议。I3C 结合了 I2C 和 SPI 的优点,提供了更高的数据传输速率、更低的功耗以及更灵活的拓扑结构。
I3C 的应用场景
传感器网络:如加速度计、陀螺仪、温度传感器等。
嵌入式系统:如微控制器、FPGA、ASIC 等。
消费电子产品:如智能手机、平板电脑、可穿戴设备等。
I3C 的物理层
I3C 的物理层采用双线制(SDA 和 SCL),与 I2C 类似,但通过改进的信号处理技术,支持更高的数据传输速率和更低的功耗。
I3C 的数据链路层
I3C 的数据链路层负责数据的封装、传输和错误检测。它支持多种传输模式,包括单数据速率模式(SDR)和高数据速率模式(HDR)。
I3C 的传输模式
单数据速率模式 (SDR,常用):类似于 I2C 的标准传输模式,速率较低但兼容性好。
高数据速率模式 (HDR):通过改进的信号编码技术,显著提高数据传输速率。
I3C 与 I2C 的比较
速率:I3C 的速率远高于 I2C。
功耗:I3C 的功耗显著低于 I2C。
拓扑结构:I3C 支持更复杂的拓扑结构。
I3C 与 SPI 的比较
引脚数量:I3C 使用双线制,而 SPI 通常需要四根线。
多主设备支持:I3C 支持多主设备,而 SPI 通常不支持。
I3C 的工作模式
单数据速率模式 (SDR)
SDR 模式是 I3C 的基本工作模式,兼容 I2C 设备,速率较低但稳定性高。
高数据速率模式 (HDR)
HDR 模式通过改进的信号编码技术,显著提高数据传输速率,适用于高速数据传输场景。
I3C 的动态地址分配 (DAA)
DAA 功能允许主设备动态分配从设备地址,简化设备管理和系统配置。
I3C 的命令与寄存器
常用命令
I3C 定义了一系列标准命令,用于设备初始化、数据传输和状态查询。
寄存器映射
I3C 设备通常包含多个寄存器,用于配置设备参数和存储数据。
命令格式与解析
I3C 的命令格式包括起始位、地址位、命令位和数据位,具体格式取决于传输模式。
电气特性
电压电平:I3C 支持多种电压电平,通常为 1.2V 或 1.8V,具体取决于应用场景。
总线速度:
单数据速率模式(SDR):最高 12.5 Mbps。
高数据速率模式(HDR):最高可达 33 Mbps。
总线负载:I3C 支持多个设备连接,总线负载能力较强,但具体负载能力取决于硬件设计。
I3C 的时钟与同步
I3C 的时钟同步机制是其高效通信的关键:
主设备生成时钟:
主设备负责生成 SCL 时钟信号,从设备根据时钟信号同步数据传输。
时钟拉伸(Clock Stretching):
从设备可以通过拉低 SCL 信号来延长时钟周期,以处理数据或执行其他操作。
动态时钟调整:
I3C 支持动态调整时钟频率,以适应不同的传输速率和功耗需求。
(本文只讲解SDR模式)
如上图,I3C的系统中,必须要有I3C主机,可以有I2C从机,I3C从机和I3C次级主机(可以通过主机授权控制总线)。
I3C系统工作流程:1.主机向总线发送命令要求从机发送临时ID给主机;2.从机接受到命令后,依照仲裁,先后向主机发送临时ID;3.主机接受到临时ID后,给对应的从机分配临时地址;4.所有从机都分配完地址后,可以开始传输数据。
动态地址设置传输过程:主机先发送Start信号,再发送0x7E,读写位设置为写,从机返回ACK,主机发送ENTDAA(0x07,命令可以通过下表查找)命令,再发送T bit;发送repeat Start信号,再发送0x7E,读写位设置为读,从机返回ACK,接着I3C从设备开始按照从高到低方式发送48位的临时ID(ID值越小,优先级越高),随后主机发送7bit动态地址给从机,并发送校验码,从机返回ACK;接着重复以上操作(发送0x7E,读写位为读),直到发送完0x7E,读写位为读,之后从机返回NACK,说明所有I3C从机已经设置完动态地址,此时可以发送Stop信号,结束此次通信。
上表是I3C部分命令名称及对应的码值。
I3C地址仲裁:
当从机接收到主机要求发送48位临时ID给主机时,需要对SDA信号进行采集判断,例如:主机要求从机发送地址信息时,I3C总线上所有从机都会根据要求发送,假如地址0x31和0x08一起发送时,因为0x08的第二位是0,而0x31的第二位是1,所以0x08优先级高于0x31,因此0x31退出仲裁,不再发送数据,0x08继续发送。简而言之,ID值越小,其优先级越高,越早被主机分配地址。
如上图,从机48位临时ID,bit[47:33]:MIPI生产商ID;bit[32]:若该值为1,则表示后续32比特位为随机值,若为0,则后续32位为固定值;①如果bit[32]为1,则 bit[31:16]:Part ID,这个16位字段的含义留给设备供应商来定义;bit[15:12]:Instance ID,这个4位字段中的值应该使用系统设计者选择的方法来标识单个设备;bit[11:0]:这个12位字段的含义留给附加含义的定义,例如更深的设备特征,它可以选择包括设备特征寄存器值。②如果bit[32]为0,则:设备随机生成的32位值,该值可通过“常规测试模式”查询。
T bit :
T bit在主机发送数据和从机发送数据时,其作用不同,需要注意。
在主机发送数据时用来做校验位,该值是将前8位数据位跟1进行异或运算,例如8位数据位都为0或者都为1,那么T bit则为1;反之,如果数据位中有奇数个1,则T bit为0。
在从机发数据给主机时,如果从机发送的T bit是低电平,说明数据发送完了;反之T bit为高电平,则会接着发数据。从机发送完T bit后,在时钟的下降沿需要检测SDA电平,如果SDA被拉低,则数据发送中止(主机中断),从机不再驱动SDA信号。
I3C从机地址设置:
如上图所述,主机在空闲时,对SDA总线上设置为开漏,因此无法判断从机的最高位是否在发送,因此将从机的动态地址的最高位设置为0。如下图。
I3C从机动态地址范围:
以上是I3C动态地址设置流程及对应的细节。
热插拔机制:
在主机给I3C从机配置完动态地址后,I3C从机可以加入当前总线(需要设置完动态地址后接入)。
流程:
1.从机需要等待最少1ms,等待总线空闲。
2.当总线空闲后,从机向总线发送一个Start信号,将SDA信号拉低,直到主机将SCL拉低。
3.从机发出保留的从机地址7b0000_010作为IBI,在START之后使用W (write)。这请求动态地址分配过程。
4.主机动作(可以有3种,这里讲正常响应的),主机接受到从机发送的数据后,返回ACK信号,并进入动态地址设置流程,新接入的从机将接受主机的动态地址设置。
IBI中断:
如上图,从机在接受到Start信号(注意,不是Repeat Start)后,将其动态分配地址发送给主机,如果没有接受到Start信号,则在总线空闲时,从机将SDA信号线拉低,以此来产生一个Start信号。主机根据优先级处理该中断(动态地址越小,其优先级越高),接着从机驱动SDA信号发送其动态地址,并将读写位设置为1。
如果主机接受从机中断,则在接受到从机发送的数据后,对从机返回ACK,因为主机在设置动态地址时,从机发送给主机的临时ID是包含BCR寄存器的(如下图),因此知道对应的从机的BCR[2]的值。如果该位的值为1,则表示接下来从机还需要发送数据给主机,至于发送多少数据,取决于T bit(参考上文)。
如果BCR[2]为0,则主机可以做其他I3C的动作,可以不用理会。
下面讲讲I3C命令发送格式和相关时序图。
如上图是CCC命令常用的帧格式,先发送Start/Repeat Start,接着发送0x7E,读写位设置为写,等待从机ACK信号,接着发送命令码,再发送T bit,接着可选择是否发送数据和T bit,再发送Stop/Repeat Start。但ENTDAA CCC例外,该命令总是以STOP信号结束,即设置完动态地址后,先结束当前传输,需要传输数据再重启。
如上图,主机发送完数据,从机在第九个CLK上升沿将SDA信号拉低,响应主机,此为ACK。
如上图,主机发送完数据,从机在第九个CLK上升沿没有驱动SDA信号,SDA由硬件上拉,此为NACK。
如上图,从机发送数据,将T bit拉低,说明从机已经发送完数据,主机随后产生STOP信号结束传输。
如上图,从机发送数据,将T bit拉低,说明从机已经发送完数据,主机在随后可以产生Repeat Start信号重新开始传输。
如上图,从机发送数据,将T bit拉高,表示从机继续发送数据,主机也同意此操作。
如上图,从机发送数据,将T bit拉高,但在SCL为高电平时,主机将SDA拉低,产生一个Repeat Start信号,中断从机发送数据,接着在SCL高电平时,拉高SDA,产生STOP信号,结束传输。
如上图,从机发送数据,将T bit拉高,希望继续发送数据,但主机在第九个时钟将SDA拉低,产生Repeat Start信号,中断从机发送数据,接着主机发送数据。
上图是CCC命令的几种传输方式。
如上图,I3C读写传输流程。
以上是兼容I2C设备的读写操作。
#######################################################################################
有需要英文文档的,可以往我邮箱(1374911009@qq.com)发”需要Specification for I3C文档“,我回复附件。