0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在恩智浦LPC55S36平台上如何处理I3C协议中的Hot-Join事件

恩智浦MCU加油站 来源:恩智浦MCU加油站 2026-04-27 16:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

SDK:SDK Builder | MCUXpresso SDK Builder (nxp.com)

基础工程:

lpcxpresso55s36_i3c_interrupt_b2b_transfer_master; lpcxpresso55s36_i3c_interrupt_b2b_transfer_slave

I3C协议中的Hot-Join流程图

根据I3C spe中的Hot-Join流程图,Hot-Join流程概述:

f49a194a-3eae-11f1-90a1-92fbcf53809c.png

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_tslaveConfig;
I3C_SlaveGetDefaultConfig(&slaveConfig);
slaveConfig.staticAddr = I3C_STATIC_ADDRESS;
slaveConfig.vendorID = I3C_VENDOR_ID;
slaveConfig.offline =false;
I3C_SlaveInit(EXAMPLE_SLAVE, &slaveConfig, I3C_SLAVE_CLOCK_FREQUENCY);
i3c_slave_handle_tslaveHandle;
I3C_SlaveTransferCreateHandle(EXAMPLE_SLAVE, &slaveHandle, i3c_slave_callback,NULL);
I3C_SlaveTransferNonBlocking(EXAMPLE_SLAVE, &slaveHandle, kI3C_SlaveAllEvents);
I3C_SlaveRequestEvent(EXAMPLE_SLAVE, kI3C_SlaveEventHotJoinReq);
g_requestSent =false;
while(!g_requestSent)
{
}
I3C_SlaveRequestEvent(EXAMPLE_SLAVE,kI3C_SlaveEventHotJoinReq);

为目标设备的hot join请求。

主设备(master) Hot-Join关键代码

在LPC55S36中,控制器通过配置MCTRL寄存器来处理I3C总线上的Hot-Join请求。整个流程分为两个阶段:监听阶段和响应阶段,确保控制器能够灵活应对目标设备的动态接入。

4.1 配置MCTRL寄存器,进入AutoIBI +Manual模式

mctrlVal = I3C0->MCTRL;
mctrlVal &= ~(I3C_MCTRL_REQUEST_MASK | I3C_MCTRL_IBIRESP_MASK);
mctrlVal |= I3C_MCTRL_REQUEST(kI3C_RequestAutoIbi) |
I3C_MCTRL_IBIRESP(kI3C_IbiRespManual);
I3C0->MCTRL = mctrlVal;

kI3C_RequestAutoIbi:

控制器进入自动监听模式,当目标设备拉低SDA发起IBI(如Hot-Join)时,控制器自动检测

kI3C_IbiRespManual:

控制器在收到IBI后不立即响应,而是进入等待状态,由应用程序决定是否ACK或NACK

此阶段的配置是为了确保控制器能够捕捉到Hot-Join请求,并将处理权交给软件层

4.2轮询MSTATUS寄存器,等待Hot-Join IBI到来

do{
mstatusVal = I3C0->MSTATUS;
}while(((mstatusVal & I3C_MSTATUS_NACKED_MASK) == I3C_MSTATUS_NACKED(1)) ||
((mstatusVal & I3C_MSTATUS_IBITYPE_MASK) != I3C_MSTATUS_IBITYPE(3)) ||
((mstatusVal & I3C_MSTATUS_SLVSTART_MASK) != I3C_MSTATUS_SLVSTART(1)) ||
((mstatusVal & I3C_MSTATUS_MCTRLDONE_MASK) != I3C_MSTATUS_MCTRLDONE(1)) ||
((mstatusVal & I3C_MSTATUS_COMPLETE_MASK) != I3C_MSTATUS_COMPLETE(1)) ||
((mstatusVal & I3C_MSTATUS_IBIWON_MASK) != I3C_MSTATUS_IBIWON(1)));

4.3手动ACK Hot-Join请求

mctrlVal &= ~(I3C_MCTRL_IBIRESP_MASK | I3C_MCTRL_REQUEST_MASK);
mctrlVal |= I3C_MCTRL_IBIRESP(kI3C_IbiRespAck) |
I3C_MCTRL_REQUEST(kI3C_RequestIbiAckNack);
I3C0->MCTRL = mctrlVal;

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并动态分配地址。

f50419bc-3eae-11f1-90a1-92fbcf53809c.png

小结

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

作者:Harry Zhang

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5620

    浏览量

    130423
  • 总线
    +关注

    关注

    10

    文章

    3060

    浏览量

    91868
  • 串行通信
    +关注

    关注

    4

    文章

    610

    浏览量

    37230

原文标题:一键上车:LPC55S36 I3C Hot-Join处理流程详解

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    LPC55S16 MCU获得了PSA 2级和SESIP 2级保证认证

    LPC55S16 MCU属于EdgeVerse™计算和安全产品组合,是基于Arm® Cortex®-M33内核的通用LPC5500 MCU系列的成员。
    发表于 11-21 09:28 2197次阅读

    I3C IBI 启动时如何删除 MDB 后的停止条件LPC55S36

    我正在尝试对 I3C IBI 进行编程,强制字节数据之后没有停止条件,并在之后连接重新启动条件以读取数据。我该怎么办? 下面是我用 MDB 做的 IBI 波形。 void
    发表于 03-02 07:16

    为什么无法 LPC55S36 使用 BLHost 转储代码(两块板的 USB 连接问题)?

    。 设置详细信息: 工具:BLHost 2.6.7 主机作系统:Windows 10 连接:USB 电缆(设备管理器检测到 COM 端口) 目标:LPC55S36 MCU 驱动程序:已安装并验证
    发表于 04-17 10:04

    I3C协议标准

    的缺陷如下:sensor等设备的增加,对控制总线的速度和功耗提出了更加严苛的要求;处于解决上述问题的原因,推出了I3C的接口总线和协议.
    发表于 10-26 09:35

    使用MCU链接调试器对LPC55s36板进行编程,调试会话后它永远不会连接的原因?

    我正在尝试使用 MCU 链接调试器对 LPC55s36 板进行编程。板子第一次连接,但在调试会话后它永远不会连接!我不同的板试过,现在我无法对它们的任何一个进行编程。 有人对此有
    发表于 04-17 06:16

    如何使用LPC55S36目标模式下实现读取操作?

    我们正在尝试使用 LPC55S36 目标模式下实现读取操作。为此,我们控制器模式下使用另一个 LPC55S36,它初始化总线(处理 DA
    发表于 05-18 08:41

    请问LPC5536是否包含代码看门狗 (CDOG) 外设?

    fsl_cdog.h 和 fsl_cdog.c)。 CDOG 外设[i]确实出现在 LPC55S36 的头文件(例如 LPC55S36.
    发表于 05-29 08:56

    Samsung S3C2440平台上的Vxworks BSP移植

    研究基于S3C2440平台上的Vxworks BSP移植具有重要的意义。本文就BSP的概念、BSP移植过程重点修改的几个文件、串口和网口驱动以及BSP的调试和仿真做详细的介绍。
    发表于 08-10 11:42 4631次阅读
    Samsung <b class='flag-5'>S3C</b>2440<b class='flag-5'>平台上</b>的Vxworks BSP移植

    I3C协议规范的详细内容

    本文讲解 I3C 协议规范的详细内容,从规范可以看出,I3CI2C 复杂很多,硬件简单带来的是软件的复杂。 对于 Linux 常用版
    的头像 发表于 07-22 16:13 5632次阅读
    <b class='flag-5'>I3C</b><b class='flag-5'>协议</b>规范的详细内容

    I3C Introduction是什么意思

    I3C Introduction I3C :Improved Inter Integrated Circuit ,是 MIPI(Mobile Industry Processor Interface
    的头像 发表于 07-22 16:16 2006次阅读
    <b class='flag-5'>I3C</b> Introduction是什么意思

    I2CI3C的区别有哪些

    I2CI3C 主要区别如下: I2C 虽然也是两条线,但是很多时候传感器需要一条额外的中断线,来告诉主控数据已经准备好。I3C 允许从设备直接在总线上产生中断,不再需要一条额外的
    的头像 发表于 07-22 16:20 1w次阅读
    <b class='flag-5'>I2C</b>和<b class='flag-5'>I3C</b>的区别有哪些

    I2CI3C关于功耗和传输速率的对比

    断支持 热连接支持 I3C BASIC 不支持:同步计时支持和异步计时冲压 secondary master support 不支持 I2C master 不支持从机 clock st
    的头像 发表于 07-22 16:24 3696次阅读
    <b class='flag-5'>I2C</b>和<b class='flag-5'>I3C</b>关于功耗和传输速率的对比

    I3C接口通信基础

    I 2 CI3C之间显着的变化是时钟速度。I 2 C 通常为 100 kHz、400 kHz 或 1 MHz,而
    发表于 05-03 10:22 7003次阅读
    <b class='flag-5'>I3C</b>接口通信基础

    推出多端口I3C集线器设备P3H2x4xHN

    P3H2x4xHN是一款多端口I3C集线器设备,一端通过I3C / I2C / SMBus总线连接主机CPU,另一端则连接多个外围设备。
    的头像 发表于 12-04 10:46 2133次阅读
    <b class='flag-5'>恩</b>智<b class='flag-5'>浦</b>推出多端口<b class='flag-5'>I3C</b>集线器设备P<b class='flag-5'>3</b>H2x4xHN

    探索P3S0200 I3C开关:高性能硬件的卓越选择

    、产品概述 P3S0200专为通信和服务器应用的高速I3C信号切换而设计,适用于I3C I/O有限的设备。其52MHz的宽带
    的头像 发表于 12-25 09:35 611次阅读