大家都知道 I2C ,它的全稱是 Inter Integrated Circuit ,那 I3C 又是什麼?
I3C 是 MIPI (Mobile Industry Processor Interface)移動產業處理器接口聯盟推出的,全稱是 Improved Inter Integrated Circuit ,顧名思義,I3C 就是改進型的 I2C。
I3C 仍然採用 2 根通信線,一根數據線 SDL ,一根時鐘線 SCL ,I3C 向下兼容 I2C ,也就是說 I3C 的總線下是可以掛載傳統的 I2C 接口的(但是不兼容 10 bit 的 I2C 擴展地址),I3C 的典型應用電路類型如下圖所示:
圖 1 I3C 的典型應用電路類型
為什麼要有 I3C ?
常見的板間通信總線有 I2C 、SPI 、UART 、I2S 等,這類總線常用於 ADC 、DAC 、傳感器等外設通信。隨著物聯網的應用越來越廣,湧現各類傳感器,比如溫度、氣壓、心率和陀螺儀等。掛載傳感器的激增,對傳輸功耗、性能、速率的要求也相應的提高,這就暴露出了傳統總線的部分缺陷,主要問題有以下幾點:
一、功耗問題:I2C 、SPI 、UART 設計之初未考慮到功耗問題,而對於物聯網多傳感器的應用來說,對功耗的要求比較嚴苛。
二、I2C 、SPI 、UART 都只支持單一的主機。
三、I2C 、SPI 是同步通信,必須由主機(處理器)發起時鐘進行通信,從機沒辦法主動傳輸數據。
四、I2C 、SPI 一般需增加中斷線通知主機來讀取數據,隨著傳感器數量的增加,會占用大量的 IO 口和中斷資源。
五、UART 是異步通信,雖然沒有三 、四的缺點,但是它是點對點通信,一個總線只能掛一個從設備。
六、對於 I2C 來說,傳輸速率受限。
基於上述的問題,MIPI 主導並提出了 I3C 總線,可以解決現有的問題。
I3C 跟 I2C 的區別在哪?
下面我將通過一個表格讓大家直觀地看到它們的區別。
表1 I3C 和 I2C 的區別
通過表格我們不難看出 I3C 的特點有:
- 支持帶內中斷:
概念:In-Band Interrupt (IBI)。傳統的I2C 需要額外的 PIN 線才能實現中斷電平請求,會占用 IO 和中斷資源,I2C 傳感器是需要主機實時讀取數據,當有新的數據時, I2C 是無法主動發起通訊要求主機讀取的,而 I3C 則是應用了帶內中斷,它的處理過程由主機和從機共同決定, I3C 傳感器可以通過帶內中斷來讓主機讀取數據。
過程:I3C 從機將 SDA 線拉低然後等待主機將 SCL 線拉低來回應 ACK ,當主機將 SCL 拉低以後同時將 SCL 時鐘提供給從機,從機享有 SDA 的控制權,隨後從機通過 SDA 發送帶有自己動態地址的數據(帶有值為 1'b1 的 RnW 位),即強制要求 1'b1 位為 1,否則主機則認為此次請求無效,在經歷了這些過程後,就完成了一次 IBI 請求。
- 支持故障檢測:I3C 協議中為主機和從機分別指定了一組必須方法,針對從設備中七種錯誤類型和主設備中兩種錯誤類型的檢測和恢複方法。更詳細的介紹可以參考連接:I3C協議Single Data Rate(SDR)模式研讀(七):SDR錯誤檢測和恢複方法_sdr common error check pl von s--CSDN博客
- 支持多個主機:接在 I3C 總線上的輔助主機,可以給 I3C 主機發送請求成為當前的主機,需要經過原主機的響應,釋放原主機對總線的控制權,由原來的輔助設備承擔當前主設備,並控制 I3C 總線。
- 支持熱插拔:熱插拔即是允許 I3C 從機在主機完成初始化後才接入 I3C 總線,並且可以再為其分配動態地址,這個機制允許從機進入低功耗狀態,在有需要的時候才喚醒。
- 支持動態尋址:區別於 I2C 靜態地址,動態地址能夠解決地址重複的問題。
- 支持多種通信模式:向下兼容 I2C 、SDR 模式、HDR 模式。
那麼 I3C 到底是怎麼工作的呢?
(下面介紹以 SDR 模式為例)
一、讀寫數據:
I3C SDR 模式下讀寫數據與 I2C 很相似,
寫數據:
圖 2 I3C 寫數據時序
我們可以看到 I3C 主機寫入數據的第 9 位是作為奇偶校驗,而 I2C 的第 9 位是 ACK / NACK ,這個第 9 位被稱作 T-bit 位(為“過渡”)。
讀數據:
圖 3 I3C 讀數據時序
在 I2C 中,從機到主機的第 9 個數據位是主機的 ACK / NACK ,相比之下,I3C 則可以通過回傳 T-bit 的值來允許從設備結束回傳,並允許主機終止讀取。
二、動態地址分配的設備要求
為了支持動態地址分配程序,在開始程序之前,連接到 I3C 總線上的每個 I3C 設備都應該以下面兩種方式之一來標識:
1. 設備有一個靜態地址,(假設主機已經知道該地址)主機可以使用此靜態地址,例如 I2C 所規定的地址。2. 設備具有 48 位的臨時 ID 。這 48 位 ID 由以下部分組成。
圖 4 I3C 48 位設備 ID 的組成
48位 ID 由三部分組成:
[47:33] 位是 MIPI 製造商 ID (15位),其最高位有效位被丟棄,僅使用15 個最低有效位。
[32] 位:臨時 ID 類型選擇(一位,1'b1:隨機值,1'b0 :供應商固定值)
[31:16] 位:部件 ID :此 16 位欄位的含義留給設備供應商定義。
[15:12] 位:實例 ID :此 4 位 欄位中的值用來區分一條總線上的不同的 ID。
[11:0] 位:此 12 位欄位的含義具有自身定義或者其他含義。例如:更深的設備特徵,是什麼樣的傳感器等。
三、帶動態地址分配的總線初始化順序
在此之前我們先了解一下 I3C 的通用命令代碼(CCC),它是全局支持的命令,可以直接傳輸到特定的 I3C 從設備,也可以同時傳輸到 I3C 所有從設備。CCC 命令協議僅使用 I3C SDR 模式進行格式化,並且始終以 I3C 廣播地址 (7'h7E)開頭,也就是說,在啟動或者重複啟動之後,CCC 的命令地址始終都為 7'h7E。
一旦分配了 I3C 從機,所有 I3C 從機都將識別 7'h7E 廣播地址和它們自己的動態地址。
而 I3C 的設備要保持通信功能,說明它們都應該在活動狀態下,這就涉及到設備狀態的配置,即 Enter Activity State 0-3 (ENTAS0 – ENTAS3)。
圖 5 ENTAS 的配置時序
在激活後,主機需要一個或全部 I3C 設備清除 / 復位其主機分配的動態地址,清除後,這些設備為動態地址分配程序做好準備,即 Reset Dynamic Address Assignment (RSTDAA)。
圖 6 RSTDDA 的配置時序
為地址分配做好準備後,要通過命令允許 I3C 主設備設置或獲取一個從設備的最大數據寫入長度(以字節為單位)。該最大寫入長度不影響廣播 CCC 的數據寫入長度。設置 / 獲取最大寫長度值在兩個字節傳輸,最高有效字節(MSb)首先傳輸。最大寫入長度可以設置為的最小值是 8 ,即 Set / Get Max Write Length ( SETMWL / GETMWL)。
僅當從設備實現的任何專用寫入消息或者任何擴展寫入 CCC 支持每個消息的最大數據字節的可變限制時,才需要此 CCC 。
當然 I3C 的初始化指令還有其他的更多,可以通過閱讀指令集了解,參考鏈接為大家送上:I3C協議通訊詳解-CSDN博客
在介紹完上面幾個概念以後,相信大家也比較好理解下面這個總線初始化流程圖了:
圖 7 I3C 總線初始化配置流程圖
可能光這麼說大家還是覺得有點抽象,下面我將第二點、第三點和代碼、波形結合起來方便大家理解。以 NXP LPC865 EVK 板間通信為例子,I3C 初始化配置部分代碼如下:
圖 7 LPC865 I3C 傳輸初始化
在發送廣播地址後,I3C 回傳的設備 ID 如下所示:
圖 8 I3C 從機回傳48位的設備 ID
四、帶內中斷和其仲裁機制
在 I3C 中,帶內中斷有優先級控制,每個從設備的優先級都在其從設備地址中編較低的地址具有較高的優先級,也就是說這個地址更快地被處理,這是 I3C 仲裁機制 的結果,值為 0 的地址優先於值為 1 的地址,我們可以通過下圖例子更直觀地看出區別。
可以通過對比看出 7'h5F 將贏得仲裁。
圖 9 I3C 帶內中斷仲裁機制
註:圖 1、圖 5、圖 6、圖 7 來源於 I3C 總線技術概述。
圖 2、圖 3、圖 4、圖 9 來源於 NXP Semiconductor。
參考資料:
i2c我們用得很多,i3c又是什麼?_i3c和i2c區別-CSDN博客
I3C協議Single Data Rate(SDR)模式研讀(七):SDR錯誤檢測和恢複方法_sdr common error check pl von s--CSDN博客
評論