標題: I2C總線為什么要接上拉電阻? [打印本頁]

作者: 矽杰單片機原廠    時間: 2023-10-16 14:25
標題: I2C總線為什么要接上拉電阻?
I2C由一條時鐘線和一條數(shù)據(jù)線組成,我們先看兩張圖。


I2C的波形

I2C協(xié)議基本形式
I2C的輸入輸出結(jié)構(gòu)采用的是開漏的結(jié)構(gòu) 。 開漏結(jié)構(gòu) 不能夠自主得到高電平,所以需要通過外部上拉電阻 來的實現(xiàn) I2C 通信過程中的高電平。上拉電阻 的大小取決于 I2C 不同模式時的灌電流大小。這種結(jié)構(gòu)作為邏輯輸出時候,必須要有外部上拉,一般是通過電阻加到VCC電源,平時保持高電平,當輸入低電平時也可被拉低,也就是說此時的開漏輸出的可以作為外部的輸入I/O口。
因為多個設(shè)備共用一條I2C總線,如果 I2C 使用的是推挽輸出,假設(shè)在某個時間,A設(shè)備和B設(shè)備剛好在不同的電平輸出,則會引起短路。


下圖是I2C 獲得高低電平的情景。

如果我們不接上拉電阻,設(shè)備的I2C SCL SDA引腳是浮空狀態(tài),浮空的意思是沒有確定的電平,可能是高,也可能是低。而根據(jù)I2C的協(xié)議,在總線空閑期間,SDA和SCL都是高電平,當SDA出現(xiàn)下降沿時信號傳輸開始,如果沒有確定的電平,一旦有外部的干擾,則可能會誤啟動I2C。
上拉電阻取值
上面我們已經(jīng)說到,由于I2C開漏輸出需要輸出高電平我們就需要加上拉電阻。那上拉電阻該如何取值呢?通常情況下我們使用4.7kΩ,就能適用于大多數(shù)應(yīng)用場景。如果需要更精確的電阻值,我們可以使用以下公式:
Rmin = (Vcc - Vol) / Iol
Rmax=Tr / (0.8473 * Cb)
R 是所需的上拉電阻值(Ω);
Vcc 是供電電壓(伏特,V);
Vol 是I2C總線上的輸出電平電壓(通常是0.4V);
Iol 是I2C總線上的輸出電流(通常是3mA);
Tr是上升沿時間,Cb是總線電容,0.8473是標準上升沿時間;
通過上面這個公式可以計算出合適的取值。由上可知,供電電壓決定上拉電阻的最小值,總線負載電容決定上拉電阻的最大值。
常見的上拉電阻阻值有1k、1.5k、2.2k、4.7k、5.1k、10k等。

作者: 人工置頂員    時間: 2023-10-23 04:06
頂一下




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1