時鐘展開(Clock stretching)
clock stretching通過將SCL線拉低來暫停一個傳輸.直到釋放SCL線為高電平,傳輸才繼續進行.clock stretching是可選的,實際上大多數從裝置不包括SCL驅動,所以它們不能stretch時鐘.
從位元組級來看,一個裝置可能在快速模式下接受資料,但是需要更多的時間來儲存接收到的位元組或者準備將要傳輸的另一個位元組.從機可以以一種握手的處理方式在接受和應答位元組後將SCL線拉低來強制使得主機進入wait狀態知道從機準備好下一個位元組的傳輸.
從位級來看,I2C匯流排上的裝置可以通過增長每一個時鐘的低周期來降低匯流排時鐘.所以每個主機可以適應這個裝置的內部操作速率.
在Hs模式,握手處理只能用在位元組層級.
從機地址和R/W bit
下圖是資料轉送的格式:
在開始條件(S)後,發送從機地址.地址是7bit,後面的第8bit是資料的讀寫bit,0表示寫,1表示讀.具體的看下圖:
資料轉送被主機產生的終止條件(P)終止.然而,主機也可以無需先產生終止條件,產生一個重複的開始條件(Sr)和定址另一個從機,
可能的資料轉送格式如下:
主-發送器傳到從-接收器.傳輸方向不變.從-接收器應答每一個位元組.如下:
在第一個位元組後主機從從機讀資料.第一個應答後,主-發送器變為主-接收器而從-接收器變為從-發送器.第一個應答仍然是由從機產生的.主機產生餘下的應答.主機在產生終止條件之前要發送一個NA.如下:
複合模式.在傳輸過程中改變方向,開始條件和從機地址都要重複,而讀寫bit要取反.如果主-接收器發送一個重複的開始條件,那麼它在這之前要發送一個NA.
注意:
1.複合模式可以在比如控制串列記憶體器時用到.在第一個資料位元組時一定要寫記憶體器內部的地址.開開始條件和從地址重複後,資料就開始傳輸了.
2.自動增加或減少之前訪問的記憶體位置都由裝置的設計者決定.
3.每一個位元組後面都跟著一個應答位,在圖中用A或非A來表示.
4.相容I2C匯流排的裝置在接收到開始條件或重複開始條件時都一定要重啟它們的匯流排邏輯,即使開始條件都不是正確的格式,它們都期望發送從機地址.
5.開始條件後立馬跟著一個終止條件是不合法的格式.很多裝置在設計時考慮了這一點,可以處理.
6.串連到匯流排上的每個裝置都由唯一的地址來確定.通常是簡單的主從關係,但可能存在多個一樣的從機可以同時接收和響應,比如說組播.這裡是以NXP的PCA9546A作為例子說明.(PCA9546A是NXP半導體生產的一款基於I2C匯流排控制的4通道雙向多工器和開關。使用PCA9546A可以將一路SCL/SDA輸入擴充為4路SCL/SDA輸出,在對內部控制寄存器進行相應配置後,可同時選擇一路或多路下行I2C匯流排與上行I2C匯流排通訊。)