【技術(shù)論壇】I2C協(xié)議分析
發(fā)布時間:2021-11-25 15:32:35
IIC(Inter-IntegratedCircuit)總線是一種由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。它是由數(shù)據(jù)線SDA和時鐘SCL構(gòu)成的串行總線,可發(fā)送和接收數(shù)據(jù)。在CPU與被控IC之間、IC與IC之間進(jìn)行雙向傳送,高速IIC總線一般可達(dá)400kbps以上。由于只有一根數(shù)據(jù)線SDA,所以I2C協(xié)議是半雙工的。I2C設(shè)備有主設(shè)備和從設(shè)備,時鐘由主設(shè)備提供。
2.1 空閑
I2C總線總線的SDA和SCL兩條信號線同時處于高電平時,規(guī)定為總線的空閑狀態(tài)。此時各個器件的輸出級場效應(yīng)管均處在截止?fàn)顟B(tài),即釋放總線,由兩條信號線各自的上拉電阻把電平拉高。
2.2 開始和結(jié)束
開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。
結(jié)束信號:SCL為高電平時,SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。
從上面這副圖中我們可以看到,在開始條件之前,以及停止條件之后,SDA和SCL都是高,這就是I2C總線的空閑狀態(tài)。在SCL為高的情況下,SDA的變化就會引起通信狀態(tài)的變化(開始或停止)。而在正常數(shù)據(jù)通信數(shù)據(jù)發(fā)生變化時,必須保持SCL為低。
2.3 應(yīng)答
發(fā)送方在發(fā)送完8bit數(shù)據(jù)后,在第9個時鐘期間釋放數(shù)據(jù)線,等待接收方的應(yīng)答信號。接收方此時應(yīng)給出應(yīng)答(ACK)或非應(yīng)答信號(NAK),SCL被拉低表示為應(yīng)答信號,SCL置高為NAK信號。注意應(yīng)答信號由接收方發(fā)出(可能為主,也可能為從,主從和發(fā)送接收不要混淆)。接收器在第9個時鐘脈沖之前的低電平期間將SDA線拉低,并且確保在該時鐘的高電平期間為穩(wěn)定的低電平。如果接收器是主控器,則在它收到最后一個字節(jié)后,發(fā)送一個NACK信號,以通知被控發(fā)送器結(jié)束數(shù)據(jù)發(fā)送,并釋放SDA線,以便主控接收器發(fā)送一個停止信號P。
不論是讀還是寫,都是由主設(shè)備發(fā)起和結(jié)束的。也就是由主設(shè)備產(chǎn)生開始和結(jié)束條件。I2C設(shè)備地址為8bit,其中最低位為讀寫位,0為寫,1為讀。實際地址位為7bit。
3.1 寫過程
可以總結(jié)為以下過程:
1.發(fā)送起始位
2.發(fā)送設(shè)備地址信息
3.發(fā)送寄存器信息
4.發(fā)送數(shù)據(jù)信息
5.發(fā)送停止位
上述過程省略了等待應(yīng)答,每發(fā)送一個字節(jié)數(shù)據(jù)都會等待應(yīng)答。
3.2 讀過程
讀過程相對來講會復(fù)雜一些,需要先寫(寫要讀的寄存器)再讀。并且讀的時候由主設(shè)備發(fā)送ACK
1.發(fā)送起始位
2.發(fā)送設(shè)備地址信息(寫)
3.發(fā)送要讀的寄存器信息
4.重新開始,restart
5.發(fā)送設(shè)備地址信息(讀)
6.讀取數(shù)據(jù)
7.接收完畢,發(fā)送NAK
8.發(fā)送停止信號
以上就是關(guān)于I2C協(xié)議的相關(guān)知識,希望能對大家有所幫助!
- 上一篇:純干貨!GPIO八大工作模式介紹
- 下一篇:什么是平衡二叉樹(中)