導讀
I2C總線在產品設計中被廣泛應用,盡管其結構簡單,但經常發生上拉電阻設計不合理的問題。本文將對I2C上拉電阻的選擇進行簡要分析。
一根信號線上,通過電阻連接一個固定的高電平VCC,信號線初始、空閑時一直保持高電平狀態,稱為上拉電阻。
總線的上拉電阻各有不同作用,如I2C的上拉電阻是由I2C端口內部結構決定的,而RS485和CAN總線的上拉電阻是為了做終端匹配。那這不同總線的上拉電阻,是否接上拉,阻值的選擇有何講究嗎?
是的,這些電阻阻值的選擇都是有理論依據的,如果阻值選擇不正確,會引起一些異常,例如曾經有一個案例,I2C上拉電阻阻值為10K,而應用卻要求I2C跑400KHz的高速率,顯然這樣的上拉電阻不能滿足400kHz的高速率要求,出現通信錯誤也是不可避免的了。
對于RS485和CAN總線而言,則需要根據現場情況進行靈活使用,就算節點數相同的兩個應用,由于布線和所接設備的差異,需要的匹配電阻也是不同的。理論計算值可做為重要的參考依據。
?I2C上拉電阻有什么作用、阻值如何確定?
目的:保證通訊正常。
常說I2C需要加上拉電阻,卻不知道為什么需要加上拉電阻?
第一是I2C本身的協議決定,空閑時兩線均保持高電平狀態,能夠實現線“與”功能。
第二是器件內部結構,如圖1所示,SCL和SDA引腳內部結構,內部無法提供高電平,只能依靠外部高電平。目前部分器件支持上拉功能的復用功能開漏模式,芯片內部可配置為上拉模式(建議使用外部上拉電阻)。
圖1 I2C端口內部結構等效電路
I2C上拉電阻的取值大小怎么確定?
考慮IO灌電流,阻值不能過小。通常在標準模式100Khz,灌電流不超過3mA,
VOL不超過0.4V,若上拉電阻至3.3V,上拉電阻阻值約大于1k。
代入Vdd = 3.3,Vol(max)=0.4,Iol(max)= 3,得到Rmin = 966Ω。
考慮上升時間,阻值不能過大。高電平是靠外部上拉電阻提供,電阻和總線電容組成RC網絡,電阻過大充電時間過長,造成信號上升緩慢,未在規定時間內到達高電平,導致數據錯誤。針對I2C系統,在上拉電壓的30%至70%時來測量上升時間和下降時間,總線電容100pF,總線最大上升時間300ns。
代入Tr=300,Cb=100,計算得到Rmax=3.54kΩ。
根據以上計算,上拉電阻的取值在966~3.54k之間。工程實際設計中,并不是完全按照這個值來設計,通常可選取2.2k,3k,4.7k。
解決I2C通信問題,建議抓取I2C波形,觀察總線上升/下降時間,并分析總線電容和上拉電阻等因素,并結合驅動代碼全面分析。
-
上拉電阻
+關注
關注
5文章
360瀏覽量
30621 -
CAN總線
+關注
關注
145文章
1951瀏覽量
130753 -
I2C總線
+關注
關注
8文章
391瀏覽量
60936
發布評論請先 登錄
相關推薦
評論