I2C之知(四)--I2C總線(xiàn)的7bit從機地址
clock stretching通過(guò)將SCL線(xiàn)拉低來(lái)暫停一個(gè)傳輸.直到釋放SCL線(xiàn)為高電平,傳輸才繼續進(jìn)行.clock stretching是可選的,實(shí)際上大多數從設備不包括SCL驅動(dòng),所以它們不能stretch時(shí)鐘.
從字節級來(lái)看,一個(gè)設備可能在快速模式下接受數據,但是需要更多的時(shí)間來(lái)存儲接收到的字節或者準備將要傳輸的另一個(gè)字節.從機可以以一種握手的處理方式在接受和應答字節后將SCL線(xiàn)拉低來(lái)強制使得主機進(jìn)入wait狀態(tài)知道從機準備好下一個(gè)字節的傳輸.
從位級來(lái)看,I2C總線(xiàn)上的設備可以通過(guò)增長(cháng)每一個(gè)時(shí)鐘的低周期來(lái)降低總線(xiàn)時(shí)鐘.所以每個(gè)主機可以適應這個(gè)設備的內部操作速率.
在Hs模式,握手處理只能用在字節級別.
從機地址和R/W bit
下圖是數據傳輸的格式:

在開(kāi)始條件(S)后,發(fā)送從機地址.地址是7bit,后面的第8bit是數據的讀寫(xiě)bit,0表示寫(xiě),1表示讀.具體的看下圖:

數據傳輸被主機產(chǎn)生的終止條件(P)終止.然而,主機也可以無(wú)需先產(chǎn)生終止條件,產(chǎn)生一個(gè)重復的開(kāi)始條件(Sr)和尋址另一個(gè)從機,
可能的數據傳輸格式如下:
主-發(fā)送器傳到從-接收器.傳輸方向不變.從-接收器應答每一個(gè)字節.如下:

在第一個(gè)字節后主機從從機讀數據.第一個(gè)應答后,主-發(fā)送器變?yōu)橹?接收器而從-接收器變?yōu)閺?發(fā)送器.第一個(gè)應答仍然是由從機產(chǎn)生的.主機產(chǎn)生余下的應答.主機在產(chǎn)生終止條件之前要發(fā)送一個(gè)NA.如下:

復合模式.在傳輸過(guò)程中改變方向,開(kāi)始條件和從機地址都要重復,而讀寫(xiě)bit要取反.如果主-接收器發(fā)送一個(gè)重復的開(kāi)始條件,那么它在這之前要發(fā)送一個(gè)NA.

注意:
1.復合模式可以在比如控制串行內存器時(shí)用到.在第一個(gè)數據字節時(shí)一定要寫(xiě)內存器內部的地址.開(kāi)開(kāi)始條件和從地址重復后,數據就開(kāi)始傳輸了.
2.自動(dòng)增加或減少之前訪(fǎng)問(wèn)的內存位置都由設備的設計者決定.
3.每一個(gè)字節后面都跟著(zhù)一個(gè)應答位,在圖中用A或非A來(lái)表示.
4.兼容I2C總線(xiàn)的設備在接收到開(kāi)始條件或重復開(kāi)始條件時(shí)都一定要重啟它們的總線(xiàn)邏輯,即使開(kāi)始條件都不是正確的格式,它們都期望發(fā)送從機地址.
5.開(kāi)始條件后立馬跟著(zhù)一個(gè)終止條件是不合法的格式.很多設備在設計時(shí)考慮了這一點(diǎn),可以處理.
6.連接到總線(xiàn)上的每個(gè)設備都由唯一的地址來(lái)確定.通常是簡(jiǎn)單的主從關(guān)系,但可能存在多個(gè)一樣的從機可以同時(shí)接收和響應,比如說(shuō)組播.這里是以NXP的PCA9546A作為例子說(shuō)明.(PCA9546A是NXP半導體生產(chǎn)的一款基于I2C總線(xiàn)控制的4通道雙向多路復用器和開(kāi)關(guān)。使用PCA9546A可以將一路SCL/SDA輸入擴展為4路SCL/SDA輸出,在對內部控制寄存器進(jìn)行相應配置后,可同時(shí)選擇一路或多路下行I2C總線(xiàn)與上行I2C總線(xiàn)通信。)
評論