I2C總線是由Philips公司開發(fā)的一種簡(jiǎn)單、雙向二線制同步串行總線,它采用同步方式串行接收或發(fā)送信息,I2C總線是由串行數(shù)據(jù)線SDA和串行時(shí)鐘線SCL組成。因?yàn)镮2C只有一根數(shù)據(jù)線,故發(fā)送信息和接收信息無法同時(shí)進(jìn)行,I2C工作時(shí)的傳輸速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s,快速模式下可達(dá)400kbit/s,高速模式下可達(dá)3.4Mbit/s。I2C總線采用漏極開路的設(shè)計(jì),且SDA和SCL通過上拉電阻連接V CC 。今天就和大家來探討一下I2C為什么需要用開漏輸出和上拉電阻。
首先,讓我們簡(jiǎn)單地來回顧一下上周所介紹的推挽輸出和開漏輸出。
開漏輸出:如果輸出控制電路接收到低電平(0)時(shí),此時(shí)地N-MOS導(dǎo)通,不管有沒有接上拉電阻,I/O端口處的電平都會(huì)被N-MOS管拉低。但是當(dāng)輸出控制電路接收到高電平(1)時(shí),N-MOS管截止,有上拉電阻存在時(shí),輸出高電平,沒有上拉電阻存在時(shí),輸出電路開路,不能輸出高電平。簡(jiǎn)而言之,開漏輸出只有接上上拉電阻時(shí),才有輸出高電平的能力。
推挽輸出:因?yàn)樵黾恿艘粋€(gè)P-MOS管,當(dāng)CPU輸出邏輯“1 ”時(shí),P-MOS管導(dǎo)通,輸出高電平。當(dāng)CPU輸出邏輯“0 ”時(shí),P-MOS管截止,輸出低電平。
為什么I2C需要用開漏輸出?
因?yàn)镮2C協(xié)議是支持多個(gè)主設(shè)備與多個(gè)從設(shè)備在一條總線上的,此時(shí)就會(huì)有多個(gè)GPIO口連接在同一條總線上,就勢(shì)必會(huì)出現(xiàn)輸出高、低電平不統(tǒng)一的情況,如果采用推挽輸出時(shí),就可能會(huì)出現(xiàn)某個(gè)GPIO的Vcc和GND連接在一起造成短路的情況,當(dāng)你采用開漏輸出時(shí),因?yàn)橛猩侠娮璧拇嬖诰涂梢员苊膺@一問題的出現(xiàn)。
為什么要上拉電阻?
①:因?yàn)殚_漏輸出不接上拉電阻時(shí)無法輸出高電平。而I2C通信需要有輸出高電平的能力,故在漏極接上上拉電阻
②:I2C總線由SDA(串行數(shù)據(jù)接線)和SCL(串行時(shí)鐘線)及上拉電阻組成,這樣能夠?qū)崿F(xiàn)“線與”功能,不僅簡(jiǎn)化了電路,而且依照“線與”邏輯,可以實(shí)現(xiàn)多個(gè)主設(shè)備搶占總線時(shí)的仲裁,因?yàn)槿绻粋€(gè)設(shè)備需要啟動(dòng)I2C時(shí),它需要在SCL為高電平時(shí),將SDA由高電平拉低作為啟動(dòng)信號(hào),SDA拉高后,設(shè)備會(huì)對(duì)SDA的電平進(jìn)行檢查,如果此時(shí)SDA為低電平,就表示總線已經(jīng)被占用,如果SDA為高電平,就說明總線可以被占用。
上拉電阻阻值怎么確定?
一般I\\0端口的驅(qū)動(dòng)能力在2mA-4mA量級(jí)。
阻值不能過?。?/p>
當(dāng)上拉電阻阻值過小時(shí)會(huì)導(dǎo)致從VCC輸入的電路較大,進(jìn)而使得MOS管不完全導(dǎo)通(由飽和狀態(tài)變成放大狀態(tài)),因?yàn)镮2C協(xié)議規(guī)定,端口輸出低電平的最高允許值為0.4V,故這樣就會(huì)使得端口輸出的低電平值增大。所以上拉電阻選取時(shí)不能低于1KΩ。
阻值不能過大:
因?yàn)樯侠娮韬涂偩€電容之間形成了RC,如果電阻過大會(huì)導(dǎo)致總線拉高的時(shí)間拉長(zhǎng)以及輸出阻抗的增大,當(dāng)輸出阻抗增大到可以與負(fù)載阻抗抗衡時(shí),輸出的高電平會(huì)因?yàn)榉謮憾鴾p少。
綜上所述,建議上拉電阻選擇使用1.5K、2.2K、4.7K。
-
上拉電阻
+關(guān)注
關(guān)注
5文章
360瀏覽量
30622 -
總線
+關(guān)注
關(guān)注
10文章
2881瀏覽量
88095 -
I2C
+關(guān)注
關(guān)注
28文章
1487瀏覽量
123787 -
SDA
+關(guān)注
關(guān)注
0文章
124瀏覽量
28138 -
開漏輸出
+關(guān)注
關(guān)注
0文章
34瀏覽量
7327
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論