為什么是開漏輸出?
I2C協(xié)議支持多個(gè)主設(shè)備與多個(gè)從設(shè)備在一條總線上,如果不用開漏輸出,而用推挽輸出,會(huì)出現(xiàn)主設(shè)備之間短路的情況。所以總線一般會(huì)使用開漏輸出。
為什么要接上拉電阻?
接上拉電阻是因?yàn)镮2C通信需要輸出高電平的能力。一般開漏輸出無法輸出高電平,如果在漏極接上拉電阻,則可以進(jìn)行電平轉(zhuǎn)換。
I2C由兩條總線SDA和SCL組成。連接到總線的器件的輸出級(jí)必須是漏極開路,都通過上拉電阻連接到電源,這樣才能夠?qū)崿F(xiàn)“線與”功能。當(dāng)總線空閑時(shí),這兩條線路都是高電平。
上拉電阻阻值怎么確定?
一般IO端口的驅(qū)動(dòng)能力在2mA~4mA量級(jí)。
考慮到功耗問題,阻值不能過小
如果上拉阻值過小,VDD灌入端口的電流將較大,功耗會(huì)很大,導(dǎo)致端口輸出的低電平值增大(I2C協(xié)議規(guī)定,端口輸出低電平的最高允許值為0.4V)。故通常上拉電阻應(yīng)選取不低于1K的電阻(當(dāng)VDD=3V時(shí),灌入電流不超過3mA)。
考慮到速度問題,阻值不能過大
它取決于上拉電阻和線上電容形成的RC延時(shí),RC延時(shí)越大,波形越偏離方波趨向于正弦波,數(shù)據(jù)讀寫正確的概率就越低,所以上拉電阻不能過大。
I2C總線上的負(fù)載電容不能超過400pF。當(dāng)I2C總線上器件逐漸增多時(shí),總線負(fù)載電容也相應(yīng)增加。當(dāng)總的負(fù)載電容大于400pF時(shí),就不能可靠的工作。這也是I2C的局限性。 建議上拉電阻可選用1.5K,2.2K,4.7K。
I2C總線基本操作
根據(jù)I2C總線規(guī)范,總線空閑時(shí)兩根線都必須為高。假設(shè)主設(shè)備A需要啟動(dòng)I2C,他需要在SCL高電平時(shí),將SDA由高電平轉(zhuǎn)換為低電平作為啟動(dòng)信號(hào)。
主設(shè)備A在把SDA拉高后,它需要再檢查一下SDA的電平。為什么? 因?yàn)榫€與,如果主設(shè)備A拉高SDA時(shí),已經(jīng)有其他主設(shè)備將SDA拉低了,由于 1 & 0 = 0 那么主設(shè)備A在檢查SDA電平時(shí), 會(huì)發(fā)現(xiàn)不是高電平,而是低電平。說明其他主設(shè)備搶占總線的時(shí)間比它早,主設(shè)備A只能放棄占用總線。如果SDA是高電平,說明主設(shè)備A可以占用總線,然后主設(shè)備A將SDA拉低,開始通信。
因此,模擬I2C一定要將GPIO端口設(shè)置為開漏輸出并加上拉電阻。
審核編輯:湯梓紅
-
上拉電阻
+關(guān)注
關(guān)注
5文章
357瀏覽量
30540 -
通信
+關(guān)注
關(guān)注
18文章
5950瀏覽量
135787 -
總線
+關(guān)注
關(guān)注
10文章
2859瀏覽量
87914 -
阻值
+關(guān)注
關(guān)注
2文章
63瀏覽量
20934 -
I2C
+關(guān)注
關(guān)注
28文章
1477瀏覽量
123063
原文標(biāo)題:I2C為什么要接上拉電阻?上拉電阻阻值怎么確定?
文章出處:【微信號(hào):電路一點(diǎn)通,微信公眾號(hào):電路一點(diǎn)通】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論