【阿福的隨筆】淺談 I3C 的 SDR broadcast, Direct CCC,及如何變更速率

 1.何謂 I3C

I3C 是 Improved Inter Integrated Circuit ( 改進的內部集成電路 ) 的縮寫,也可以說是 I2C 的改進版本,是 MIPI(Mobile Industry Processor Interface)這個聯盟推出的,
可以向下相容於 I2C ,但是不支援 10bit slave address 的這種比較特殊的擴展的 slave address 。MIPI I3C的連結如下=>

https://www.mipi.org/specifications/i3c-sensor-specification

 

 1.1 I3C 的通訊流程方塊圖

方塊圖,如圖 1.1.1

 

圖 1.1.1

1.2 I3C 的broadcast

I3C
的 broadcast 是什麼=>

I3C 要與傳統的 I2C 的命令有所不同的前置命令,若是有支援 I3C ,Host 下了 broadcast ( 0x7E ) 且一定要是 Write時,
( 原
I2C 是 Read ID 的其中一個位址,目前已幾乎不支援 ) 必須要能回 ACK,讓 Host 知道在 BUS上有 device 能支援 I3C,
並且在分配動態位址之前,是每一次開始 I3C傳輸的前導值

 
1.3 I3C 的CCC

CCC 的全名是Common Command Codes 一般稱為 通用命令代碼或是共用命令代碼,

要如何下CCC 命令呢 ? 前導命令就是剛剛說的 broadcast ( 0x7E ) 且一定要是 Write,接下來就是 CCC 通用命令代碼,格式分成四種

  • Broadcast Write ( 廣播模式下只有寫,無法回讀 )

每個 Bus 上的裝置都能收到 廣播封包,但各個 device 可自己決定要執行或是 忽略收

的廣播封包

  • Direct Read/Write

直接讀/寫 CCC 是可以一次對一個I3C 目標做讀取或寫入數據,由目標動態地址選擇。

例如,它可以寫入,然後從同一目標讀取,以驗證是否接受了更改。

每個直接讀/寫 的 CCC 命令都以 STOP 或 Repeated START 結束,

然後是 I3C 廣播地址 (7’h7E) 為開始傳輸的前導命令。

這種類型也可能具有跟據 CCC(代碼)的不同,而寫入或讀取數據長度也不同。

  • Direct Write

直接寫入 CCC 是可以一次對一個I3C 目標做寫入數據,由目標動態地址選擇。

此類的 CCC 命令只支援寫入的方式

每個直接寫入的 CCC 命令都以 STOP 或 Repeated START 結束,

然後是 I3C 廣播地址 (7’h7E) 為開始傳輸的前導命令。

  • Direct Read

直接讀取 CCC 是可以一次對一個I3C 目標做讀取數據,由目標動態地址選擇。

此類的 CCC 命令只支援讀取的方式

每個直接讀取的 CCC 命令都以 STOP 或 Repeated START 結束,

然後是 I3C 廣播地址 (7’h7E) 為開始傳輸的前導命令。


1.4 
I3C 的位址

I3C 在一開始溝通時,可以先使用目的裝置靜態位址,來確認是否有回應,或是直接使用廣播方式看看是否有裝置回 ACK,並且可以使用設定動態位址之後,
來使用動態位址來進行傳輸資料

 

I3C 的 動態位址是什麼=>

每一個裝置會有唯一身份 ( Unique ID ) 的動態位址,其中包含了裝置的優先權,越高位元先為低位準的裝置,則優先權越高

ENTDAA ( Enter Dynamic Address Assignment ) CCC  命令格式,如圖  1.4.1


圖 1.4.1

先介紹 48 bit 的 Unique ID 是什麼

Bits[47:33]: MIPI Manufacturer ID ,例如 : NXP Semiconductors =>01h 1Bh  


Bit[32]: Provisioned ID Type Selector (One bit, 1’b1: Random Value, 1’b0: Vendor Fixed Value)

 

Bit[31:0]:32 位,包含供應商固定值或隨機值,具體取決於Bit [32] 的值

如果 Bit[32] 的值為 1’b0:Vendor Fixed Value,則:

Bit[31:16]:部件ID:這個16 位字段的含義由設備供應商定義。

Bit[15:12]:實例 ID:此 4 位字段中的值應標識單個設備,使用系統設計者選擇的方法。

Bit[11:0]:該12 位字段的含義留待定義,具有附加含義。

 

如果 Bit[32] 的值為 1’b1:隨機值,則:

Bit[31:0]:設備隨機生成的32 位值。該值可以通過以下方式查詢通用測試模式,使用 CCC命令代碼進入測試模式 ( ENTTM Enter Test Mode 0x0B )

BCR : 總線特性寄存器(Bus Characteristic Register)8bits 各代表的意義,如圖1.4.2


圖 1.4.2

 

DCR : 設備特性寄存器(Device Characteristics Register)代表的意義,如圖1.4.3


圖 1.4.3

以範例波形為例,如圖 14.4  廣播地址 (7’h7E) Write為開始傳輸的前導命令,CCC(代碼)ENTDAA  ( Enter Dynamic Address Assignment 0x07 ) 
再 Repeat Start
 (7’h7E) Read ,裝置需回傳 48 bit 的Unique ID + BCR  1 byte + DCR 1 byte 的 8bytes

接著再加上 7bit target address 不含 RW Bit 所以bit0為0 的1 byte,總共 9 bytes,1bit PAR  還有最後的 ACK bit

 

圖 1.4.4

 

MIPI Manufacturer ID ,例如 : NXP Semiconductors =>01h 1Bh  
對應 SDK程式的地方是 slaveConfig.vendorID   = 0x123U; //Test //0x11B //NXP

對應的波形,如圖 1.4.5


圖 1.4.5


整個範例波形 加上 bit 解析,如圖 1.4.6


圖 1.4.6


1.5 I3C
的速度設定

I3C 在變換速時,會先將 high level 的時間縮短,在確定 目的裝置有回應之後,後來才會整個 high /Low level 成新的設定速度,
若是目的裝置無法回應 ACK,則此次的變換速度的 CCC 命令就算是失敗的,如圖 1.5.1



圖 1.5.1

要設定 I3C SDR mode 且 push poll mode為 4MHz,相對應修改 SDK的程式如下

masterConfig.baudRate_Hz.i3cPushPullBaud  = 4000000U;

masterXfer.busType      = kI3C_TypeI3CSdr;

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論