I3C协议与Hot-Join简介
I3C(Improved Inter Integrated Circuit)是由MIPI联盟推出的新一代串行通信协议,旨在替代传统的I2C协议。相比I2C,I3C提供了更高的数据速率、更低的功耗以及更丰富的功能特性,如动态地址分配、In-Band Interrupt(IBI)、Hot-Join、节能模式等。
与传统的I2C协议不同,I3C支持动态地址分配和更高效的事件通知机制。Hot-Join是I3C的关键特性之一,适用于系统运行过程中新增传感器或外设的场景。控制器必须识别该IBI 为 Hot-Join类型,并决定是否接受该设备加入。
Hot-Join是I3C协议中的一种机制,允许新的目标设备在总线运行过程中加入通信。目标设备通过拉低SDA线并发起In-Band Interrupt (IBI) 请求,通知控制器其加入意图。
本文将详细介绍在LPC55S36平台上如何处理I3C协议中的Hot-Join(热插拔)事件,包括控制器寄存器配置、协议流程解析、目标设备代码实现,以及逻辑分析仪截图辅助说明。
硬件环境:
- 开发板:LPC55S36 EVK
软件环境:
-
IDE:MCUXpresso IDE v25.06.0
-
基础工程:
lpcxpresso55s36_i3c_interrupt_b2b_transfer_master; lpcxpresso55s36_i3c_interrupt_b2b_transfer_slave
I3C协议中的Hot-Join流程图
根据I3C spe中的Hot-Join流程图,Hot-Join流程概述:

2.1 总线空闲(Bus Idle)
总线处于空闲状态,目标设备检测到总线空闲后尝试发起Hot-Join。
2.2 发送 Hot-Join 请求
设备发出START条件,并发送Hot-Join地址(固定为0x7E)。
RnW=0(写操作),表示Hot-Join请求。
2.3 主机响应
主机根据当前总线状态和策略,可能:
2.3.1 ACK:接受 Hot-Join
主机发送STOP,表示请求完成。
后续执行DAA(Dynamic AddressAssignment)流程,为新设备分配动态地址。
2.3.2 NACK:拒绝 Hot-Join(暂时不允许加入)
设备会稍后重试。
目标设备(Slave) Hot-Join关键代码
i3c_slave_config_t slaveConfig;
为目标设备的hot join 请求。
主设备(master) Hot-Join关键代码
在LPC55S36中,控制器通过配置MCTRL寄存器来处理I3C总线上的Hot-Join请求。整个流程分为两个阶段:监听阶段和响应阶段,确保控制器能够灵活应对目标设备的动态接入。
4.1 配置**MCTRL寄存器,进入AutoIBI +Manual**模式
mctrlVal = I3C0->MCTRL;
-
kI3C_RequestAutoIbi:
控制器进入自动监听模式,当目标设备拉低SDA发起IBI(如 Hot-Join)时,控制器自动检测
-
kI3C_IbiRespManual:
控制器在收到IBI后不立即响应,而是进入等待状态,由应用程序决定是否ACK或NACK
-
此阶段的配置是为了确保控制器能够捕捉到Hot-Join请求,并将处理权交给软件层
4.2**轮询MSTATUS寄存器,等待Hot-Join IBI到来**
do {
4.3**手动ACK Hot-Join**请求
mctrlVal &= ~(I3C_MCTRL_IBIRESP_MASK | I3C_MCTRL_REQUEST_MASK);
-
kI3C_RequestIbiAckNack:发起手动ACK/NACK请求
-
kI3C_IbiRespAck:明确表示接受该Hot-Join请求
-
此阶段是对第一阶段的补充,完成对目标设备的响应
4.4 发送**STOP**
I3C_MasterEmitStop(I3C0, true);
4.5 执行**DAA(Dynamic AddressAssignment)流程**
I3C_MasterProcessDAA(EXAMPLE_MASTER, addressList, 8);
逻辑分析仪截图
逻辑分析仪显示,目标设备发起Hot-Join,主设备成功ACK并动态分配地址。

小结
本文基于LPC55S36平台,对I3C Hot Join机制进行了实践验证,完整梳理了Hot Join请求的发起流程以及主机侧的处理逻辑,为I3C总线设备的动态接入提供了可行的实现思路。
评论区
登录后即可参与讨论
立即登录