I3C (pronounced 'eye-three-see')
## I3C Bus
* multi-master protocol
* 所有 I3C 裝置必須被指派一個 **Dynamic address** 才能溝通,如果裝置有 **Static address** **(legacy I2C address)**,才 I2C protocol 也能使用。
* I3C 還有定義 **Boradcast address**,用來搜尋 I3C bus 上的裝置
## I3C Device discovery
I3C 定義一個機制去偵測在 Bus 上的所有裝置,此機制稱為 **DAA (Dynamic Address Assignment)**
在 **DAA** 運行中,I3C 裝置會回傳三個重要的東西。
* **BCR**: Bus Characteristic Register. 這 8-bit 的暫存器描述 the device bus related capabilities
* **DCR**: Device Characteristic Register.這 8-bit 的暫存器描述此裝置提供的功能
* **Provisioned ID:** 一個 48-bit 的識別碼。 I3C bus 上不能有識別碼衝突,會導致 DAA 失敗
## I3C slave events
I3C 允許 slave 裝置生成自己的 event,因此他們被允許暫時的擁有 bus 的控制權
此機制稱作 **IBI (In Band Interrupts)**
當同時有兩個裝置發起 IBI ,此時 Dynmaic address 越小的裝置擁有會高的優先度。
I3C master 被允許抑制任何 IBI 產生。抑制的命令可以透過 Bordcast 或是特定裝置的形式發送。
## I3C Hot-Join
Hot-Join 的機制類似於 USB 熱插拔。允許 slave 裝置在 I3C bus 初始化後加入。
涵蓋下面兩個例子:
* 在 DAA 期間,裝置尚未被供電
* 裝置在其他板子上進行熱插拔的行為
此機制需依靠 slave 裝置發起 event 通知 master 有新裝置加入。
Master 可以選擇分配或不分配 Dynmaic address 給 slave
## I3C transfer types
I3C 除了兼容 I2C 的傳輸,還有另外三種傳輸類型
### I3C CCC commands
**CCC (Common Command Code)** 有關 I3C 管理或是 I3C 裝置常見的功能
CCC 包含一組 8-bit CCC ID,表示哪個命令被執行,此外 MSB 用來表示此命令是 boradcast (bit7 = 0) 或指定裝置 (bit7 = 1)。
根據 Command 需要,可以在 CCC ID 後加上 payload
Payload 的長度並不會在傳輸的提及,需要從 CCC ID 去解析。
供應商可以使用 0x61-0x7f 和 0xe0-0xef 的 CCC ID,去定義自己的 command
### I3C Private SDR transfers
**Private SDR (Single Data Rate) transfer** 應用該裝置特定且不須高速傳輸的命令
類似於 I2C transfer,但在 I3C 中,每次傳輸必須加上 Dynamic address.
且較 I2C transfer 快 (通常為 12.5MHz)
### I3C HDR commands
**HDR commands** 應用於該裝置特定且須高速傳輸的命令。
第一個需要加在 HDR command 後的就是 **HDR mode**,目前 I3C 定義了三種模式。
* HDR-DDR: Double Data Rate mode
* HDR-TSP: Ternary Symbol Pure. 用在 bus 上沒有 I2C 裝置的時候。
* HDR-TSL: Ternary Symbol Legacy 用在 bus 上有 I2C 裝置的時候。
想傳輸 HDR command,必須先透過 CCC command boradcast Bus 進入 HDR mode。
HDR command 組成如下:
* 1 個 16-bits command word (big-endian)
* N 個 16-bits data words (big-endian
根據選擇的 HDR mode,這些 words 可能會加入前綴或後綴,詳見 Spec.
16-bits command word 組成如下:
* bit[15]: 方向位元,read = 1,write = 0
* bit[14:8]: command code. 用來識別執行什麼指令,有多少 data words,和他們的意義。
* bit[7:1]: I3C address。 命令要送往的位址
* bit[0]: reserved/parity-bit
## 兼容 I2C 裝置
I3C 允許 bus 上有 I2C 及 I3C 的裝置並存。但 I2C 裝置最好是搭配 50 ns spike filters
由於 I2C 裝置必須靜態設置完成,軟體的設計必須透過 **LVR (Legacy I2C Virtual Register)** 提供相關的訊息。