I2C上拉電阻到底多大

I2C上啦電阻到底多大

1. I2C出現的問題

最近羣裏,由於大部分人都玩攝像頭,在攝像頭初始化,即I2C接口的初始化中,前前後後出現了很多問題,包括我自己。不能理解。。如下部分羣聊記錄:

 

我在當時在驅動ov7670的時候,由於官哥的模塊上沒有默認I2C的上啦電阻,導致三四天I2C時序的設計,testbench,都是如此的崩潰,想哭的衝動都用了,FPGA內部上拉也不行。。。。後來官哥跟我說:“你個傻x,趕緊上啦4.7K”

2. I2C電路舉例

以下是我的電路的設計,聽官哥的,用了4,7K 的上拉電阻

 

下面這個是官哥的

 

 

還有人說,上啦時候,還不行了,首先要降低速度,其次減小上啦電阻,一直都是聽人說,都不知道爲什麼過,人家都說經驗。。。。。人家用到了1K電阻,我5K ,人家速度1K,我100K,屢試不爽,但是就是揪心,吃不好睡不香,這到底爲什麼呢。。。。

3. I2C爲什麼要上拉電阻

這是我最搞不懂的問題,他爲啥不在IC內部做好上啦呢,讓我們在外面再拉一次,麻煩死了。。還有這SCLK明明只是輸出,爲啥也要上啦呢。。這逼迫我不得不研究一下I2C內部電路。。。哎,如下:

借鑑參考:http://bbs.eeworld.com.cn/thread-95337-1-1.html

http://hi.baidu.com/spbeijilang/blog/item/012f13824c2d18b26d811911.html

(1)單片機內部有上啦電阻,有些上拉能力夠了,可以不加上拉電阻,有些不夠,那就必須在外部加上拉電阻。解析如下:

“這 個就要看你使用的單片機是否有標準的IIC標準接口了,如果你使用了標準的IIC接口,這個接口在使能的時候,引腳進入漏極開路模式,不過有一些單片機內 部的上拉電阻可以使能,這樣就省去了外部的上拉電阻,我用過AVR的,就是使能的內部的上拉電阻。但是如果是使用單片機的引腳模擬IIC協議的話,這個就 得另說了,得看你的單片機引腳是否支持漏極開路模式或者上拉模式,不過一般推拉模式的輸出引腳用在IIC裏可能會有問題具體也沒用過。”

(2)也有人回答是爲了保護,如下:

“其 實各個I2C接口工作時只檢測高、低電平,管你有沒有什麼上拉電阻呢!但問題是,你要是直接接電源的來實現高的話,一旦器件拉低時豈不危險?所以,這個上 拉電阻有保護作用。如果你確信直接接電源沒問題(比如有短路保護等,呵呵),也可以試一試,問題的關鍵是主器件要能正確的拉低或置高,從器件要能明確地區 分高、低就可以了,這是問題的關鍵,當然,還有時序問題,不能混亂!”

根據I2C總線規範,總線空閒時兩根線都必須爲高

由於I2C接口採用Open Drain機制,器件本身只能輸出低電平,無法主動輸出高電平,只能通過外部上拉電阻RP將信號線拉至高電平。因此I2C總線上的上拉電阻是必須的!如下圖所示:

 

I2C 總線空閒的時候,兩條信號線應該維持高電平。否則,上拉電阻上會有耗電。特別是在上電過程中,IO線上電平也應保持在高電平狀態。也就是說:當 Master的I2C使用的是IO軟件模擬時,一定要保證該兩個IO上電默認均爲輸入(或高阻)或者輸出高電平,切不可默認爲輸出低電平。IO默認爲輸入 時,可以通過外部上拉電阻將I2C信號線拉至高電平。

4. I2C上拉電阻大小問題

看了一些文檔,還有前輩的提醒,的確I2C上拉電阻也有很大的文章可做啊。有人這樣說道:

“最 直接的,牽涉到兩方面的問題,首先是功耗的問題,其次是速度的問題,二者是矛盾的!如果你想盡量提高速度,那麼就牽涉到總線電容的問題,其實很容易理解, 上拉電阻與總線的電容形成了RC,高速時將直接影響通訊!因爲總線拉高時有個充電時間以及高電平的閥值,如果還沒有充電到足以保證從器件可以識別的高電平 的閥值時主器件就以爲完成了一個總線動作的話,那麼通訊肯定是不能進行的!如果你想儘可能降低功耗,那麼就要儘可能增大電阻以最大可能的減小電路各部分的 消耗電流從而實現整體降低功耗!但不可能無限大,否則充電時間你會受不了的!”

I2C的上拉電阻可以是1.5K,2.2K,4.7K, 電阻的大小對時序有一定影響,對信號的上升時間和下降時間也有影響,一般接1.5K或2.2K。

I2C上拉電阻確定有一個計算公式:

Rmin={Vdd(min)-o.4V}/3mA

Rmax=(T/0.874) *c, T=1us 100KHz, T=0.3us 400KHz

C是Bus capacitance

Rp最大值由總線最大容限(Cbmax)決定,Rp最小值由Vio與上拉驅動電流(最大取3mA)決定;

於是 Rpmin=5V/3mA≈1.7K(@Vio=5V)或者2.8V/3mA≈1K(@Vio=2.8V)

標 準模式,100Kbps總線的負載最大容限<=400pF;快速模式,400Kbps總線的負載最大容限<=200pF,根據具體使用情況、 目前的器件製造工藝、PCB的走線距離等因素以及標準的向下兼容性,設計中以快速模式爲基礎,即總線負載電容<200pF,也就是傳輸速度可以上到 400Kbps是不成問題的。於是Rpmax可以取的範圍是1.8K~7K @ Vio=5V對應50pF~200pF

根據Rpmin與Rpmax的限制範圍,一般取5.1K @ Vio=5V , 負載容限的環境要求也容易達到。在2.8V系統中,console設計選3.3K,portable/handset等低供耗的設計選4.7K犧牲速度換取電池使用時間

總的來說:電源電壓限制了上拉電阻的最小值 ; 負載電容(總線電容)限制了上拉電阻的最大值

上拉電阻阻值的確定

5. I2C上拉電阻電源問題

這部分我也不是非常瞭解,因爲我的設計中,攝像頭和fpga是用的是同一個3.3V,不存在兩個電源的問題,但是問題還是得說,如下:

在 部中分應用中,還存在主從設備以及上拉電阻電源不一致的情況,比如Camera模組。在很多設計方案中,Camera模組不工作時,並不是進入Power Down模式,而是直接關閉模組供電VDDS。此時,處理器與模組相互連接的所有信號線都應該進入高阻態,否則就會有電流漏入模組;而對於此時的I2C控 制信號線來說,由於上拉電阻的存在,必須關斷上拉電阻電源VDDP。如果上拉電阻使用的是系統電源VDDM(VDDP=VDDM),無法關閉,就會有漏電 流進入模組;因此這種情況下,應該使用VDDS作爲上拉電阻電源(VDDP=VDDS),這樣上拉電阻電源與Slave電源即可同時關閉,切斷了漏電路 徑。

另外需要注意的是,在上述應用實例中選擇的IO,應該選取上電默認爲輸入(或高阻)才行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章