I2C匯流排通訊協議

2022-05-21 17:24:09 字數 3324 閱讀 8711

i2c是inter-integrated circuit的簡稱,讀作:i-squared-c。由飛利浦公司於2023年代提出,為了讓主機板、嵌入式系統或手機用以連線低速周邊外部裝置而發展。

主要用途:

soc和周邊外設間的通訊(如:eeprom,電容觸控晶元,各種sensor等)。

i2c匯流排只使用兩條雙向漏極開路的訊號線(序列資料線:sda,及序列時鐘線:scl),並利用電阻上拉。i2c匯流排僅僅使用scl、sda兩根訊號線,就實現了裝置間的資料互動,極大地簡化了對硬體資源和pcb板佈線空間的占用。i2c匯流排廣泛應用在eeprom、實時時鐘、lcd、及其他晶元的介面。i2c允許相當大的工作電壓範圍,典型的電壓基準為:+3.3v或+5v。

scl(serial clock):序列時鐘線,傳輸clk訊號,一般是主裝置向從裝置提供

sda(serial data):序列資料線,傳輸通訊資料

i2c匯流排介面內部結構如下圖所示:

i2c使用乙個7bit的裝置位址,一組匯流排最多和112個節點通訊。最大通訊數量受限於位址空間及400pf的匯流排電容。

常見的i2c匯流排以傳輸速率的不同分為不同的模式:標準模式(100kbit/s)、低速模式(10kbit/s)、快速模式(400kbit/s)、高速模式(3.4mbit/s),時鐘頻率可以被下降到零,即暫停通訊。

該匯流排是一種多主控匯流排,即可以在匯流排上放置多個主裝置節點,在停止位(p)發出後,即通訊結束後,主裝置節點可以成為從裝置節點。

主裝置節點:產生時鐘並發起通訊的裝置節點

從裝置節點:接收時鐘並響應主裝置節點定址的裝置節點

1)i2c通訊雙方地位不對等,通訊由主裝置發起,並主導傳輸過程,從裝置按i2c協議接收主裝置傳送的資料,並及時給出響應。

2)主裝置、從裝置由通訊雙方決定(i2c協議本身無規定),既能當主裝置,也能當從裝置(需要軟體進行配置)。

3)主裝置負責排程匯流排,決定某一時刻和哪個從裝置通訊。同一時刻,i2c匯流排上只能有一對主裝置、從裝置通訊。

4)每個i2c從裝置在i2c匯流排通訊中有乙個i2c從裝置位址,該位址唯一,是從裝置的固有屬性,通訊中主裝置通過從裝置位址來找到從裝置。

i2c匯流排多主裝置結構如下圖所示:

序列、同步、非差分、低速率

1)序列通訊,所有的資料以位為單位在sda線上序列傳輸

2)同步通訊,即雙方工作在同乙個時鐘下,一般是通訊的a方通過一根clk訊號線,將a裝置的時鐘傳輸到b裝置,b裝置在a裝置傳輸的時鐘下工作。同步通訊的特徵是:通訊線中有clk。

3)非差分,i2c通訊速率不高,且通訊距離近,使用電平訊號通訊。

4)低速率,i2c一般是同乙個板子上的兩個ic晶元間通訊,資料量不大,速率低。速率:幾百khz,速率可能不同,不能超過ic的最高速率。

i2c匯流排上有兩種狀態:

空閒態:沒有裝置發生通訊。

忙態:其中乙個從裝置和主裝置通訊,i2c匯流排被占用,其他從裝置處於等待狀態。

時序:在通訊中時序是通訊線上按時間順序發生的電平變化,及這些電平變化對通訊的意義。

每個通訊週期都由乙個起始位開始通訊,由乙個結束位結束通訊,中間部分是傳遞的資料。

每個通訊週期,主裝置會先發8位的從裝置位址(從裝置位址由高7位的實際從裝置位址和低1位的讀/寫標誌位組成),主裝置以廣播的形式傳送從裝置位址,i2c匯流排上的所有從裝置收到位址後,判斷從裝置位址是否匹配,不匹配的從裝置繼續等待,匹配的裝置發出乙個應答訊號。

同一時刻,主裝置、從裝置只能有乙個裝置傳送資料。

i2c匯流排通訊由起始位開始通訊,由結束位停止通訊,並釋放i2c匯流排。起始位和結束位都由主裝置發出。

起始位(s):在scl為高電平時,sda由高電平變為低電平

結束位(p):在scl為高電平時,sda由低電平變為高電平

如下圖所示:

i2c資料以位元組(即8bits)為單位傳輸,每個位元組傳輸完後都會有乙個ack應答訊號。應答訊號的時鐘是由主裝置產生的。

應答(ack):拉低sda線,並在scl為高電平期間保持sda線為低電平

非應答(noack):不要拉低sda線(此時sda線為高電平),並在scl為高電平期間保持sda線為高電平

在傳輸期間,如果從裝置來不及處理主裝置傳送的資料,從裝置會保持scl線為低電平,強迫主裝置等待從裝置釋放scl線,直到從裝置處理完後,釋放scl線,接著進行資料傳輸。

如下圖所示:

1)寫資料

開始資料傳輸後,先傳送乙個起始位(s),主裝置傳送乙個位址資料(由7bit的從裝置位址,和最低位的寫標誌位組成的8bit位元組資料,該讀寫標誌位決定資料的傳輸方向),然後,主裝置釋放sda線,並等待從裝置的應答訊號(ack)。每乙個位元組資料的傳輸都要跟乙個應答訊號位。資料傳輸以停止位(p)結束,並且釋放i2c匯流排。

2)讀資料

開始通訊時,主裝置先傳送乙個起始訊號(s),主裝置傳送乙個位址資料(由7bit的從裝置位址,和最低位的寫標誌位組成的8bit位元組資料),然後,主裝置釋放sda線,並等待從裝置的應答訊號(ack),從裝置應答主裝置後,主裝置再傳送要讀取的暫存器位址,從裝置應答主裝置(ack),主裝置再次傳送起始訊號(sr),主裝置傳送裝置位址(包含讀標誌),從裝置應答主裝置,並將該暫存器的值傳送給主裝置;

讀取單位元組資料

主裝置要讀取的資料,如果是只有乙個位元組的數值,就要結束應答,主裝置要先傳送乙個非應答訊號(noack),再傳送結束訊號(p);

讀取多位元組資料

主裝置要讀取的資料,如果是大於乙個位元組的多個資料,就傳送ack應答訊號(ack),而不是非應答訊號(noack),然後主裝置再次接收從裝置傳送的資料,依次類推,直到主裝置讀取的數值是最後乙個位元組資料後,需要主裝置給從裝置傳送非應答訊號(noack),再傳送結束訊號(p),結束i2c通訊,並釋放i2c匯流排。

注意:所有的資料傳輸過程中,sda線的電平變化必須在scl為低電平時進行,sda線的電平在scl線為高電平時要保持穩定不變。如下圖所示:

一種是:i2c匯流排協議的軟體模擬實現方法。

另一種是:linux核心中i2c模組的實現方法。

I2C通訊協議

i2c是一種個非常常見的序列通訊協議,由sda,scl兩根線組成,分別為資料訊號線和時鐘訊號線。直接從它的時序圖開始分析 起始訊號 scl高電平期間,sda由高電平到低電平表示為起始訊號。i2c裝置檢測到起始訊號知道要開始接受傳輸的裝置。結束訊號 scl高電平期間,sda由低電平到高電平表示為結束訊...

i2c通訊協議

通訊協議 用來實現資料傳輸。i2c物理匯流排 scl 時鐘線 sda 資料線 i2c通訊協議是 序列 同步 半雙工 的通訊方式。i2c物理匯流排中,scl時鐘線只能由 mcu來控制。sda資料線可以收發資料。i2c通訊必須是 mcu和 i2c從裝置之間的雙方通訊。一條i2c匯流排上可以掛載多個 i2...

I2C匯流排通訊

uart 屬於非同步通訊,比如電腦傳送給微控制器,電腦只負責把資料通過txd 傳送出來即可,接收資料是微控制器自己的事情。而 i2c 屬於同步通訊,scl 時鐘線負責收發雙方的時鐘節拍,sda 資料線負責傳輸資料。i2c 的傳送方和接收方都以 scl 這個時鐘節拍為基準進行資料的傳送和接收。i2c匯...