我們在使用I2C的時候,看看大家是不是會碰到如下問題:
一個通訊無問題的I2C總線,再增加幾個從機設(shè)備,通訊就出問題了。
一個通訊無問題的I2C總線,增加了電平轉(zhuǎn)換電路就通訊不良。
一個通訊無問題的I2C總線,增加了防靜電的TVS管就導(dǎo)致通訊不良。
一個通訊無問題的I2C總線,為了防靜電再串聯(lián)了500歐姆電阻就導(dǎo)致通訊不良。
本文將從如下幾點進(jìn)行拆解:
1、I2C總線硬件。
2、I2C總線通訊速率。
3、I2C總線上拉電阻電源電壓選擇。
4、I2C總線上拉電阻取值范圍計算。
5、I2C總線上拉電阻最大值和最小值對比。
如下圖,為I2C標(biāo)準(zhǔn)文檔給出的I2C典型應(yīng)用案例。

從上圖可以看出,I2C硬件具有如下特征:
硬件連接簡單,不同的器件僅僅通過兩根線就可以完成通訊。
各組通訊線上都加了上拉電阻。
上拉電源電壓有多個名稱,也就是說,這些電壓有可能取不同的電壓值。
以上特征也是I2C通訊相對于其它通訊接口的優(yōu)點。
2、I2C總線通訊速率
I2C有多種通訊速率,比如下面這款芯片,支持3種速率模式。另外還可以看出來一點不一樣的就是,1Mbit/s的這個模式,需要20mA的驅(qū)動電流,注意這個點,后續(xù)會講到。

我們再看看I2C的發(fā)明公司NXP的一款MCU, i.MX RT1170,如下:

可以看出,這款MCU支持5種速率的通訊模式。
如下圖,芯片A和芯片B通過I2C通訊;VCCX的電壓選擇需要滿足如下兩條規(guī)則:
低電壓芯片一方,輸出的高電平需要能夠被高電壓芯片一方識別,也就是VOH大于VIH,這個VIH按0.7*VCC計算。
如果上拉電阻電壓VCCX大于低電壓供電的芯片,需要確保此電壓不會損壞IO。

根據(jù)上述規(guī)則,共6種不同供電電壓的組合如下:

從上面表格信息可以看出,如果低電壓供電的芯片的IO耐壓足夠大,3種不同電壓的通訊都可以通過選擇上拉電壓與高電壓芯片側(cè)一致,就可以正常通訊。
如果IO不具備高耐壓特性,則上述組合全部不可行,這時,就只能加電平轉(zhuǎn)換電路。
下面來看看本文重點關(guān)注的電阻取值范圍如何設(shè)計。
Rp最小值計算:
先看看Rp最小值和什么有關(guān),如下圖,為SDA電平被拉低的情況,此時輸出電平為VOL,Rp取值越小,此電阻和Q2導(dǎo)通電阻分壓,電壓會越大。極限情況下為0歐姆,此時,SDA會一直被拉高到VCC。

根據(jù)標(biāo)準(zhǔn)給的數(shù)據(jù)如下表,VOL不能超過0.4V(VDD>2V)。
如果是1.8V供電,則VOL不能超過0.2*1.8=0.36V。



按不同電源電壓和驅(qū)動電流,計算結(jié)果如下表:

先看看SDA和SCL信號從低到高的過程,如下圖:

芯片B輸入保持為0,Q2 NMOS管截止。芯片A輸入從1切換為0,SDA信號從Q1 NMOS導(dǎo)通拉低到NMOS關(guān)斷,SDA信號電壓從低電平升為高電平。由于電容Cb的存在(Cb為總線電容,包括芯片管腳電容和走線電容之和),此過程會存在一定的時間,不同的通訊速率對時間要求是不同的。Rp和Cb的取值越大,會導(dǎo)致電壓上升時間越長。
下圖展示了標(biāo)準(zhǔn)規(guī)定的不同通訊速率對上升時間的要求。
如何計算Rp最大值呢?
可以假定一種最惡劣的條件,即Cb總線電容都按最大值取值。
下面來計算Rp的最大取值:
波形上升的時間為RC充電,為指數(shù)上升曲線,計算公式如下:

根據(jù)上面公式可以得到
Rise Time Tr=t2-t1=0.8473RC
按上面各速率模式,得到下表電阻計算數(shù)據(jù):

把以上最大值和最小值的數(shù)據(jù)整理為一個表格如下:

多處標(biāo)記黃色的地方都表示計算的上拉電阻最小值大于最大值,圖形化顯示如下:

到這里,可能有人會有疑問,表示自己的I2C設(shè)計上拉電阻一直就用的4.7K,也從來沒出過問題,上面的計算是不是有問題。
這個現(xiàn)象很好解釋,很多產(chǎn)品的總線電容并不會達(dá)到標(biāo)準(zhǔn)給出的最大值。比如,總線上只有5個以下的芯片,我們按50pF的總線電容再計算一下,得到下面數(shù)據(jù):

可以看到,總線電容減小為50pF后,所有模式的上拉電阻計算的最大值都大于最小值。
另外,I2C在不超過400Kbps的條件下,上拉電阻最大可以取7K,所以很多產(chǎn)品即使設(shè)計上拉電阻為4.7K也不會有問題。
在高速模式下,如果總線電容大于100pF,可以用電流源代替上拉電阻,縮短上升沿時間。標(biāo)準(zhǔn)給出的原文如下:


另外還有個Ultra Fast mode(5Mbps),這個模式為了更高速率,直接采用了推挽輸出,且只能單向傳輸。有興趣的朋友可以自行查閱資料。
在I2C標(biāo)準(zhǔn)所給出的參數(shù)條件下,確實存在計算的上拉電阻最小值大于最大值的異常情況。
在實際電路設(shè)計中,總線電容越小,通訊速率越低,上拉電阻的設(shè)計余量越大。
開漏通訊的上拉電阻方案是影響I2C總線速率的主要矛盾,更高速率的通訊模式采用了電流源代替上拉電阻或者直接采用推挽輸出的方式進(jìn)行通訊。
掃碼關(guān)注了解更多公眾文章!
