有個已經出有一段時間的interface,由MIPI協會所制定的介面叫做 I3C( Improved Inter Integrated Circuit ),之前一直都沒有時間研究,最近有些空檔才來開始,大致看起來跟I2C很類似,可以說是升級版的I2C,但仔細看功能卻有差異,光是protocol與交握的機制與硬體架構就不相同,因此大概研究一下該如何學習,並上網找一下支援,發現STM公司的MCU有這個IP,並且資料也算是非常齊全,因此決定來奮發向上學習研究,馬上去貿澤從美國買了兩組開發板回來,NUCLEO-H503RB(開發板Controller) 和 X-NUCLEO-IKS01A3(感測器開發板(Target)) 。要裝了他們家的IDE上面就有簡單的範例程式抓下來參考使用改code,非常讚。
主要從這篇Application note開始學 AN5879
若不會可以到論壇詢問,英文論壇讚讚 https://community.st.com/t5/product-forums/ct-p/product-forums
使用硬體:NUCLEO-H503RB(開發板Controller) + X-NUCLEO-IKS01A3(感測器開發板(Target))
以下是我學習到的一些問題
學習IP:I3C RSTDAA_THEN_ENTDAA (RSTDAA和ENTDAA功能)
遇到問題如下
問題1.使用interrupt ENTDAA command ,卻無法打出0x07
/* Assign dynamic address processus ## Initiate a RSTDAA before a ENTDAA procedure ##*/
if (HAL_I3C_Ctrl_DynAddrAssign_IT(&hi3c1, I3C_RSTDAA_THEN_ENTDAA ) != HAL_OK)
{
Error_Handler();
}
結果1:是LA的軟體沒有升級到最新版本,其實是有打0x07,但protocol解錯
問題2敲出UID後就停止
結果2:少了一段副程式程式碼
void HAL_I3C_TgtReqDynamicAddrCallback(I3C_HandleTypeDef *hi3c, uint64_t targetPayload)
{
TargetDesc1.TARGET_BCR_DCR_PID = targetPayload;
HAL_I3C_Ctrl_SetDynAddr(hi3c, TargetDesc1.DYNAMIC_ADDR);
}
問題3.無法敲出後面的7E STOP指令
結果3.只有感測器 LSM6DSO支援ENTDAA指令, LPS22HH不支援,dattasheet有寫
留言列表