I2C之知(四)--I2C總線的7bit從機地址
clock stretching通過將SCL線拉低來暫停一個傳輸.直到釋放SCL線為高電平,傳輸才繼續(xù)進行.clock stretching是可選的,實際上大多數(shù)從設備不包括SCL驅(qū)動,所以它們不能stretch時鐘.
從字節(jié)級來看,一個設備可能在快速模式下接受數(shù)據(jù),但是需要更多的時間來存儲接收到的字節(jié)或者準備將要傳輸?shù)牧硪粋€字節(jié).從機可以以一種握手的處理方式在接受和應答字節(jié)后將SCL線拉低來強制使得主機進入wait狀態(tài)知道從機準備好下一個字節(jié)的傳輸.
從位級來看,I2C總線上的設備可以通過增長每一個時鐘的低周期來降低總線時鐘.所以每個主機可以適應這個設備的內(nèi)部操作速率.
在Hs模式,握手處理只能用在字節(jié)級別.
從機地址和R/W bit
下圖是數(shù)據(jù)傳輸?shù)母袷?
在開始條件(S)后,發(fā)送從機地址.地址是7bit,后面的第8bit是數(shù)據(jù)的讀寫bit,0表示寫,1表示讀.具體的看下圖:
數(shù)據(jù)傳輸被主機產(chǎn)生的終止條件(P)終止.然而,主機也可以無需先產(chǎn)生終止條件,產(chǎn)生一個重復的開始條件(Sr)和尋址另一個從機,
可能的數(shù)據(jù)傳輸格式如下:
主-發(fā)送器傳到從-接收器.傳輸方向不變.從-接收器應答每一個字節(jié).如下:
在第一個字節(jié)后主機從從機讀數(shù)據(jù).第一個應答后,主-發(fā)送器變?yōu)橹?接收器而從-接收器變?yōu)閺?發(fā)送器.第一個應答仍然是由從機產(chǎn)生的.主機產(chǎn)生余下的應答.主機在產(chǎn)生終止條件之前要發(fā)送一個NA.如下:
復合模式.在傳輸過程中改變方向,開始條件和從機地址都要重復,而讀寫bit要取反.如果主-接收器發(fā)送一個重復的開始條件,那么它在這之前要發(fā)送一個NA.
注意:
1.復合模式可以在比如控制串行內(nèi)存器時用到.在第一個數(shù)據(jù)字節(jié)時一定要寫內(nèi)存器內(nèi)部的地址.開開始條件和從地址重復后,數(shù)據(jù)就開始傳輸了.
2.自動增加或減少之前訪問的內(nèi)存位置都由設備的設計者決定.
3.每一個字節(jié)后面都跟著一個應答位,在圖中用A或非A來表示.
4.兼容I2C總線的設備在接收到開始條件或重復開始條件時都一定要重啟它們的總線邏輯,即使開始條件都不是正確的格式,它們都期望發(fā)送從機地址.
5.開始條件后立馬跟著一個終止條件是不合法的格式.很多設備在設計時考慮了這一點,可以處理.
6.連接到總線上的每個設備都由唯一的地址來確定.通常是簡單的主從關(guān)系,但可能存在多個一樣的從機可以同時接收和響應,比如說組播.這里是以NXP的PCA9546A作為例子說明.(PCA9546A是NXP半導體生產(chǎn)的一款基于I2C總線控制的4通道雙向多路復用器和開關(guān)。使用PCA9546A可以將一路SCL/SDA輸入擴展為4路SCL/SDA輸出,在對內(nèi)部控制寄存器進行相應配置后,可同時選擇一路或多路下行I2C總線與上行I2C總線通信。)
評論