有個已經出有一段時間的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有寫

 


 

arrow
arrow

    JL8051 發表在 痞客邦 留言(0) 人氣()