I3C協(xié)議與Hot-Join簡介
I3C(Improved Inter Integrated Circuit)是由MIPI聯(lián)盟推出的新一代串行通信協(xié)議,旨在替代傳統(tǒng)的I2C協(xié)議。相比I2C,I3C提供了更高的數(shù)據(jù)速率、更低的功耗以及更豐富的功能特性,如動(dòng)態(tài)地址分配、In-Band Interrupt(IBI)、Hot-Join、節(jié)能模式等。
與傳統(tǒng)的I2C協(xié)議不同,I3C支持動(dòng)態(tài)地址分配和更高效的事件通知機(jī)制。Hot-Join是I3C的關(guān)鍵特性之一,適用于系統(tǒng)運(yùn)行過程中新增傳感器或外設(shè)的場景。控制器必須識(shí)別該IBI為Hot-Join類型,并決定是否接受該設(shè)備加入。
Hot-Join是I3C協(xié)議中的一種機(jī)制,允許新的目標(biāo)設(shè)備在總線運(yùn)行過程中加入通信。目標(biāo)設(shè)備通過拉低SDA線并發(fā)起In-Band Interrupt (IBI)請(qǐng)求,通知控制器其加入意圖。
本文將詳細(xì)介紹在LPC55S36平臺(tái)上如何處理I3C協(xié)議中的Hot-Join(熱插拔)事件,包括控制器寄存器配置、協(xié)議流程解析、目標(biāo)設(shè)備代碼實(shí)現(xiàn),以及邏輯分析儀截圖輔助說明。
硬件環(huán)境:
開發(fā)板:LPC55S36 EVK
軟件環(huán)境:
IDE:MCUXpresso IDE v25.06.0
SDK:SDK Builder | MCUXpresso SDK Builder (nxp.com)
基礎(chǔ)工程:
lpcxpresso55s36_i3c_interrupt_b2b_transfer_master; lpcxpresso55s36_i3c_interrupt_b2b_transfer_slave
I3C協(xié)議中的Hot-Join流程圖
根據(jù)I3C spe中的Hot-Join流程圖,Hot-Join流程概述:

2.1 總線空閑(Bus Idle)
總線處于空閑狀態(tài),目標(biāo)設(shè)備檢測到總線空閑后嘗試發(fā)起Hot-Join。
2.2發(fā)送Hot-Join請(qǐng)求
設(shè)備發(fā)出START條件,并發(fā)送Hot-Join地址(固定為0x7E)。
RnW=0(寫操作),表示Hot-Join請(qǐng)求。
2.3主機(jī)響應(yīng)
主機(jī)根據(jù)當(dāng)前總線狀態(tài)和策略,可能:
2.3.1 ACK:接受Hot-Join
主機(jī)發(fā)送STOP,表示請(qǐng)求完成。
后續(xù)執(zhí)行DAA(Dynamic AddressAssignment)流程,為新設(shè)備分配動(dòng)態(tài)地址。
2.3.2 NACK:拒絕Hot-Join(暫時(shí)不允許加入)
設(shè)備會(huì)稍后重試。
目標(biāo)設(shè)備(Slave) Hot-Join關(guān)鍵代碼
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);
為目標(biāo)設(shè)備的hot join請(qǐng)求。
主設(shè)備(master) Hot-Join關(guān)鍵代碼
在LPC55S36中,控制器通過配置MCTRL寄存器來處理I3C總線上的Hot-Join請(qǐng)求。整個(gè)流程分為兩個(gè)階段:監(jiān)聽階段和響應(yīng)階段,確??刂破髂軌蜢`活應(yīng)對(duì)目標(biāo)設(shè)備的動(dòng)態(tài)接入。
4.1 配置MCTRL寄存器,進(jìn)入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:
控制器進(jìn)入自動(dòng)監(jiān)聽模式,當(dāng)目標(biāo)設(shè)備拉低SDA發(fā)起IBI(如Hot-Join)時(shí),控制器自動(dòng)檢測
kI3C_IbiRespManual:
控制器在收到IBI后不立即響應(yīng),而是進(jìn)入等待狀態(tài),由應(yīng)用程序決定是否ACK或NACK
此階段的配置是為了確??刂破髂軌虿蹲降紿ot-Join請(qǐng)求,并將處理權(quán)交給軟件層
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手動(dòng)ACK Hot-Join請(qǐng)求
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:發(fā)起手動(dòng)ACK/NACK請(qǐng)求
kI3C_IbiRespAck:明確表示接受該Hot-Join請(qǐng)求
此階段是對(duì)第一階段的補(bǔ)充,完成對(duì)目標(biāo)設(shè)備的響應(yīng)
4.4發(fā)送STOP
I3C_MasterEmitStop(I3C0,true);
4.5 執(zhí)行DAA(Dynamic AddressAssignment)流程
I3C_MasterProcessDAA(EXAMPLE_MASTER, addressList, 8);
邏輯分析儀截圖
邏輯分析儀顯示,目標(biāo)設(shè)備發(fā)起Hot-Join,主設(shè)備成功ACK并動(dòng)態(tài)分配地址。

小結(jié)
本文基于LPC55S36平臺(tái),對(duì)I3C Hot Join機(jī)制進(jìn)行了實(shí)踐驗(yàn)證,完整梳理了Hot Join請(qǐng)求的發(fā)起流程以及主機(jī)側(cè)的處理邏輯,為I3C總線設(shè)備的動(dòng)態(tài)接入提供了可行的實(shí)現(xiàn)思路。
作者:Harry Zhang
-
寄存器
+關(guān)注
關(guān)注
31文章
5620瀏覽量
130428 -
總線
+關(guān)注
關(guān)注
10文章
3060瀏覽量
91869 -
串行通信
+關(guān)注
關(guān)注
4文章
610瀏覽量
37231
原文標(biāo)題:一鍵上車:LPC55S36 I3C Hot-Join處理流程詳解
文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
恩智浦LPC55S16 MCU獲得了PSA 2級(jí)和SESIP 2級(jí)保證認(rèn)證
當(dāng) I3C IBI 啟動(dòng)時(shí)如何刪除 MDB 后的停止條件LPC55S36?
為什么無法在 LPC55S36 上使用 BLHost 轉(zhuǎn)儲(chǔ)代碼(兩塊板上的 USB 連接問題)?
I3C協(xié)議標(biāo)準(zhǔn)
使用MCU鏈接調(diào)試器對(duì)LPC55s36板進(jìn)行編程,調(diào)試會(huì)話后它永遠(yuǎn)不會(huì)連接的原因?
如何使用LPC55S36在目標(biāo)模式下實(shí)現(xiàn)讀取操作?
請(qǐng)問LPC5536是否包含代碼看門狗 (CDOG) 外設(shè)?
Samsung S3C2440平臺(tái)上的Vxworks BSP移植
I3C協(xié)議規(guī)范的詳細(xì)內(nèi)容
I3C Introduction是什么意思
I2C和I3C的區(qū)別有哪些
I2C和I3C關(guān)于功耗和傳輸速率的對(duì)比
I3C接口通信基礎(chǔ)
恩智浦推出多端口I3C集線器設(shè)備P3H2x4xHN
在恩智浦LPC55S36平臺(tái)上如何處理I3C協(xié)議中的Hot-Join事件
評(píng)論