I2C匯流排硬體基礎

2021-06-22 03:43:58 字數 1169 閱讀 1336

i2c(內建積體電路)匯流排是由philips公司開發的兩線式序列匯流排,產生於20世紀80年代,用於連線微控制器及其外圍裝置。i2c匯流排簡單而有效,占用很少的pcb(印刷電路板)空間,晶元管腳數量少,設計成本低。i2c匯流排支援多主控(multi-mastering)模式,任何能夠進行傳送和接收的裝置都可以成為主裝置。主控能夠控制資料的傳輸和時鐘頻率,在任意時刻只能有乙個主控。

組成i2c匯流排的兩個訊號為資料線sda和時鐘線scl。為了避免匯流排訊號的混亂,要求各裝置連線到匯流排的輸出端必須是開漏輸出或集電極開路輸出的結構。匯流排空閒時,上拉電阻使sda和scl線都保持高電平。根據開漏輸出或集電極開路輸出訊號的「線與」邏輯,i2c匯流排上任意器件輸出低電平都會使相應匯流排上的訊號線變低。

ps:

「線與」邏輯指的是兩個或兩個以上的輸出直接互連就可以實現「and」的邏輯功能,只有輸出端是開漏(對於cmos器件)輸出或集電極開路(對於ttl器件)輸出時才滿足此條件。工程師一般以「oc門」簡稱開漏或集電極開路。

i2c裝置上的序列資料線sda介面電路是雙向的,輸出電路用於向匯流排傳送資料,輸入電路用於接收匯流排上的資料。同樣地,序列時鐘線scl也是雙向的,作為控制匯流排資料傳送的主機要通過scl輸出電路傳送時鐘訊號,並檢測匯流排上scl上的電平以決定什麼時候發下乙個時鐘脈衝電平;作為接收主機命令的從裝置需按匯流排上scl的訊號傳送或接收sda上的訊號,它也可以向scl線發出低電平訊號以延長匯流排時鐘訊號週期。

當scl穩定在高電平時,sda由高到低的變化將產生乙個開始位,而由低到高的變化則產生乙個停止位,如圖所示:

開始位和停止位都由i2c主裝置產生。在選擇從裝置時,如果從裝置採用7位位址,則主裝置在發起傳輸過程前,需先傳送1位元組的位址資訊,前7位為裝置位址,最後1位為讀寫標誌。之後,每次傳輸的資料也是1個位元組,從msb位開始傳輸。每個位元組傳完後,在scl的第9個上公升沿到來之前,接收方應該發出1個ack位。scl上的時鐘脈衝由i2c主控方發出,在第8個時鐘週期之後,主控方應該釋放sda,i2c匯流排的時序如圖所示:

以上摘自:《linux裝置驅動開發詳解》p25-26;

i2c匯流排時序

一心想踏入linux device driver的世界,想著i2c匯流排相對於usb等其他匯流排較為簡單,就以i2c作為切入點,希望可以逐步理解ldd的設計思想,並能理解其裝置模型的概念。在此對近期於i2c匯流排及驅動原始碼的理解做備忘,以免徒勞。平台友善之臂s70 tiny6410 cpusams...

I2C匯流排死鎖

原文 現象 最近發現訪問i2c裝置時,主裝置復位可能會引起i2c死鎖,表現為scl為高,sda一直為低,後發現是從裝置拉死i2c匯流排,從裝置斷電之後,sda變高,上電後通訊正常。後來通過拉低scl訊號線,sda就會自動變成高電平,i2c匯流排恢復。原因 在正常情況下,i2c匯流排協議能夠保證匯流排...

I 2C匯流排簡介

總共有五種工作狀態 a 匯流排非忙狀態 該狀態時資料線 sda 和時鐘線 scl 都保持高電平。b 啟動狀態 當時鐘線 scl 為高電平狀態時,資料線 sda 由高電平變為低電平的下降沿被認為是 啟動 訊號。c 停止狀態 當時鐘線 scl 為高電平狀態時,資料線 sda 由低電平變為高電平的下降沿被...