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