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;
評論