I2C匯流排基礎知識

2021-08-13 17:54:23 字數 2001 閱讀 7742

在i2c匯流排中有2個口線:sda和scl,這兩個口線均為oc輸出。oc就是開漏輸出(open collector)的簡稱,有時候也叫od輸出(open-drain),od是對mos管而言,oc是對雙極型管而言,在用法上沒什麼區別。

相對於oc輸出,另一種輸出叫推挽輸出(push-pull),一般的mcu管腳輸出可以設定這兩種模式。這裡分別介紹下這兩種輸出模式的不同點。

推挽輸出 : 可以輸出高、低電平連線數字器件,推挽結構一般是指兩個三極體分別受兩互補訊號的控制,總是在乙個三極體導通的時候另乙個截止。

開漏輸出 : 輸出端相當於三極體的集電極未接任何電平, 要得到高電平狀態需要上拉電阻才行,適合於做電流型的驅動,其吸收電流的能力相對強(一般20ma以內)。

對於mcu的開發者來講,簡單的這樣理解就可以了。如果管腳設定成推挽輸出模式,輸出高時,io口相當於vcc, 輸出低時io口相當於接地。如果管腳設定成開漏輸出模式,輸出高時,io口的電平會和與其相連的口線進行與操作,如果都為高,才會被上拉成高電平,輸出為低時,也相當於接地。

i2c匯流排要實現線與的功能,所以sda和scl口線都必須設定為開漏輸出模式。我們使用mcu的硬體i2c介面時,口線會被自動設定成開漏。但有時候我們會使用io口來模擬i2c匯流排,這個時候設定口線要分兩種情況:

(1)mcu的口線支援開漏輸出模式:可以直接把sda和scl設定成開漏輸出。例如silicon 的c8051系列mcu,它的口線就支援開漏和推挽輸出。

(2)mcu的口線不支援開漏輸出(例如msp430):在網上我們看到很多的例程**都是直接設定io口的高低電平,這樣做其實是不太合理的。因為我們只滿足了i2c匯流排在自己這端的時序要求,而沒有考慮到連線在匯流排上的其他器件,如果匯流排上其他器件的電平和mcu輸出的電平一致,這樣做是沒問題的,如果兩邊的電平不一致時,這樣做就有一定風險造成io的損壞。

當你輸出高時,相當於io口連線到vcc,如果對方這是恰好輸出的是低電平,那就相當於短路了。當然如果軟體做的合理,是可以避免這樣的事情的,但匯流排上的很多器件都不是由我們控制的,這時候最合理的做法是,當設定口線電平為高時,把口線設定成輸入狀態,然後利用口線上的上拉電阻來把口線拉高。這樣即使是兩邊電平不一致時,也不會造成io口的損壞。

i2c是由sda、scl兩個口線組成的。這兩個口線的高低電平組合、上公升下降邊沿組合就形成了匯流排的各種時序。圖2.1是i2c匯流排的各種時序組合:

圖 2.1 i2c 電平組合

上圖中灰色部分不是i2c匯流排關心的,9,10分別被定義為i2c的start和stop訊號。

i2c資料匯流排sda是在時鐘為高時有效,在時鐘scl為高期間,sda如果發生了電平變化就會終止或重啟i2c匯流排,所以我們在資料傳輸過程中,要在scl為低的時候去更改sda的電平。

在上一節中講到了由sda和scl能形成的各種電平組合,那麼這一節我們講一下這些組合在i2c匯流排上的應用,下面我們一步一步的來分析i2c匯流排的邏輯時序。

首先是i2c的start訊號。

start訊號是在scl為高電平時,sda從高電平變成低電平。圖3.1為start訊號的時序圖。

圖3.1 start訊號

這樣的設計和i2c的多主效能有一定關係。因為i2c的匯流排是開漏輸出的,匯流排接上拉電阻後,scl和sda就變成了高電平,這個時候掛接在匯流排上的任意乙個i2c主機口可以把sda拉高,即產生了乙個start訊號,掛接在匯流排上的其他i2c主機檢測到這個訊號後就不能去操作i2c匯流排了,否則會發生衝突。直到檢測到乙個stop訊號為止。

然後講一下i2c的stop訊號。

stop的訊號是在scl口線為高時,sda產生乙個上公升沿。圖3.2為stop訊號的時序圖。stop訊號之後,i2c匯流排恢復到初始狀態。

圖3.2 stop訊號

下面我們以msp430為例,講一下這兩個時序在軟體中實現的**。 首先,我們需要把sda和scl的口線都設定成輸入模式,當口線設定成輸入模式時,pxout暫存器的值是用來設定口線是上拉還是下拉,這裡pxout需要設定成上拉,因為如果設定成下拉的話,一般i2c的匯流排會接2個上拉電阻,就相當於匯流排上是圖3.3的等效電路。

圖3.3 等效電路

當我們設定口線為輸入時,口線的高電平就不會是vcc,而是乙個分壓後的電平。

2級C語言公共基礎知識

第1章資料結構與演算法 經過對部分考生的調查以及對近年真題的總結分析,筆試部分經常考查的是演算法複雜度 資料結構的概念 棧 二叉樹的遍歷 二分法查詢,讀者應對此部分進行重點學習。詳細重點學習知識點 1 演算法的概念 演算法時間複雜度及空間複雜度的概念 2 資料結構的定義 資料邏輯結構及物理結構的定義...

W24CXX並口I2C讀寫軟體使用說明

w24cxx軟體說明 w24cxx 並口程式設計軟體說明 程式開發 林曉斌 sonicss email 或 sos class txt 開發工具 borland c builder 6.0 updata 1 windriver 5.05b 開發環境 windows 2000 profressiona...

I2C的實現以及對接收訊號的解析

一 的簡單介紹 只有兩條匯流排線路,一條是序列資料線 sdl 一條是序列時鐘線 scl 它是乙個真正的多主機匯流排如果兩個或更多主機同時初始化資料傳輸可以通過衝突檢測和仲裁,防止資料被破壞。序列8位雙向資料傳輸速率在標準模式下可達100kbit s,快速模式下可達400kbit s,在高速模式下可達...