I2C之知(四)--I2C總線的7bit從機地址
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總線通信。)
評論