1. I2C總線簡介I2C是Inter-Integrated Circuit的簡稱,讀作:I-squared-C。由飛利浦公司于1980年代提出,為了讓主板、嵌入式系統(tǒng)或手機用以連接低速周邊外部設(shè)備而發(fā)展。 主要用途: SOC和周邊外設(shè)間的通信(如:EEPROM,電容觸摸芯片,各種Sensor等)。 1.1 物理接口I2C總線只使用兩條雙向漏極開路的信號線(串行數(shù)據(jù)線:SDA,及串行時鐘線:SCL),并利用電阻上拉。I2C總線僅僅使用SCL、SDA兩根信號線,就實現(xiàn)了設(shè)備間的數(shù)據(jù)交互,極大地簡化了對硬件資源和PCB板布線空間的占用。I2C總線廣泛應(yīng)用在EEPROM、實時時鐘、LCD、及其他芯片的接口。I2C允許相當大的工作電壓范圍,典型的電壓基準為:+3.3V或+5V。 SCL(Serial Clock):串行時鐘線,傳輸CLK信號,一般是主設(shè)備向從設(shè)備提供 I2C總線接口內(nèi)部結(jié)構(gòu)如下圖所示:
I2C使用一個7bit的設(shè)備地址,一組總線最多和112個節(jié)點通信。最大通信數(shù)量受限于地址空間及400pF的總線電容。 常見的I2C總線以傳輸速率的不同分為不同的模式:標準模式(100Kbit/s)、低速模式(10Kbit/s)、快速模式(400Kbit/s)、高速模式(3.4Mbit/s),時鐘頻率可以被下降到零,即暫停通信。 該總線是一種多主控總線,即可以在總線上放置多個主設(shè)備節(jié)點,在停止位(P)發(fā)出后,即通訊結(jié)束后,主設(shè)備節(jié)點可以成為從設(shè)備節(jié)點。 主設(shè)備節(jié)點:產(chǎn)生時鐘并發(fā)起通信的設(shè)備節(jié)點
I2C總線多主設(shè)備結(jié)構(gòu)如下圖所示:
1.2 通訊特征串行、同步、非差分、低速率 1)串行通信,所有的數(shù)據(jù)以位為單位在SDA線上串行傳輸 1.3 I2C總線狀態(tài)I2C總線上有兩種狀態(tài): 空閑態(tài):沒有設(shè)備發(fā)生通信。 2. I2C總線通信協(xié)議時序:在通信中時序是通信線上按時間順序發(fā)生的電平變化,及這些電平變化對通信的意義。 每個通信周期都由一個起始位開始通信,由一個結(jié)束位結(jié)束通信,中間部分是傳遞的數(shù)據(jù)。 每個通信周期,主設(shè)備會先發(fā)8位的從設(shè)備地址(從設(shè)備地址由高7位的實際從設(shè)備地址和低1位的讀/寫標志位組成),主設(shè)備以廣播的形式發(fā)送從設(shè)備地址,I2C總線上的所有從設(shè)備收到地址后,判斷從設(shè)備地址是否匹配,不匹配的從設(shè)備繼續(xù)等待,匹配的設(shè)備發(fā)出一個應(yīng)答信號。 同一時刻,主設(shè)備、從設(shè)備只能有一個設(shè)備發(fā)送數(shù)據(jù)。 2.1 起始位和結(jié)束位I2C總線通訊由起始位開始通訊,由結(jié)束位停止通訊,并釋放I2C總線。起始位和結(jié)束位都由主設(shè)備發(fā)出。 如下圖所示:
2.2 數(shù)據(jù)格式與應(yīng)答I2C數(shù)據(jù)以字節(jié)(即8bits)為單位傳輸,每個字節(jié)傳輸完后都會有一個ACK應(yīng)答信號。應(yīng)答信號的時鐘是由主設(shè)備產(chǎn)生的。 應(yīng)答(ACK):拉低SDA線,并在SCL為高電平期間保持SDA線為低電平 在傳輸期間,如果從設(shè)備來不及處理主設(shè)備發(fā)送的數(shù)據(jù),從設(shè)備會保持SCL線為低電平,強迫主設(shè)備等待從設(shè)備釋放SCL線,直到從設(shè)備處理完后,釋放SCL線,接著進行數(shù)據(jù)傳輸。 如下圖所示:
2.3 數(shù)據(jù)傳輸通訊1)寫數(shù)據(jù)開始數(shù)據(jù)傳輸后,先發(fā)送一個起始位(S),主設(shè)備發(fā)送一個地址數(shù)據(jù)(由7bit的從設(shè)備地址,和最低位的寫標志位組成的8bit字節(jié)數(shù)據(jù),該讀寫標志位決定數(shù)據(jù)的傳輸方向),然后,主設(shè)備釋放SDA線,并等待從設(shè)備的應(yīng)答信號(ACK)。每一個字節(jié)數(shù)據(jù)的傳輸都要跟一個應(yīng)答信號位。數(shù)據(jù)傳輸以停止位(P)結(jié)束,并且釋放I2C總線。 2)讀數(shù)據(jù)開始通訊時,主設(shè)備先發(fā)送一個起始信號(S),主設(shè)備發(fā)送一個地址數(shù)據(jù)(由7bit的從設(shè)備地址,和最低位的寫標志位組成的8bit字節(jié)數(shù)據(jù)),然后,主設(shè)備釋放SDA線,并等待從設(shè)備的應(yīng)答信號(ACK),從設(shè)備應(yīng)答主設(shè)備后,主設(shè)備再發(fā)送要讀取的寄存器地址,從設(shè)備應(yīng)答主設(shè)備(ACK),主設(shè)備再次發(fā)送起始信號(Sr),主設(shè)備發(fā)送設(shè)備地址(包含讀標志),從設(shè)備應(yīng)答主設(shè)備,并將該寄存器的值發(fā)送給主設(shè)備; 讀取單字節(jié)數(shù)據(jù):
注意:所有的數(shù)據(jù)傳輸過程中,SDA線的電平變化必須在SCL為低電平時進行,SDA線的電平在SCL線為高電平時要保持穩(wěn)定不變。如下圖所示:
3. 總結(jié)本文講述了I2C總線的特征和總線協(xié)議,具體的實現(xiàn)方法有兩種: 一種是:I2C總線協(xié)議的軟件模擬實現(xiàn)方法。 |
|
|
來自: 新用戶8389DdzY > 《待分類》