I2C總線是由Philips公司開發的一種簡單、雙向二線制同步串行總線,它采用同步方式串行接收或發送信息,I2C總線是由串行數據線SDA和串行時鐘線SCL組成。因為I2C只有一根數據線,故發送信息和接收信息無法同時進行,I2C工作時的傳輸速率在標準模式下可達100kbit/s,快速模式下可達400kbit/s,高速模式下可達3.4Mbit/s。I2C總線采用漏極開路的設計,且SDA和SCL通過上拉電阻連接V CC 。今天就和大家來探討一下I2C為什么需要用開漏輸出和上拉電阻。
首先,讓我們簡單地來回顧一下上周所介紹的推挽輸出和開漏輸出。
開漏輸出:如果輸出控制電路接收到低電平(0)時,此時地N-MOS導通,不管有沒有接上拉電阻,I/O端口處的電平都會被N-MOS管拉低。但是當輸出控制電路接收到高電平(1)時,N-MOS管截止,有上拉電阻存在時,輸出高電平,沒有上拉電阻存在時,輸出電路開路,不能輸出高電平。簡而言之,開漏輸出只有接上上拉電阻時,才有輸出高電平的能力。
推挽輸出:因為增加了一個P-MOS管,當CPU輸出邏輯“1 ”時,P-MOS管導通,輸出高電平。當CPU輸出邏輯“0 ”時,P-MOS管截止,輸出低電平。
為什么I2C需要用開漏輸出?
因為I2C協議是支持多個主設備與多個從設備在一條總線上的,此時就會有多個GPIO口連接在同一條總線上,就勢必會出現輸出高、低電平不統一的情況,如果采用推挽輸出時,就可能會出現某個GPIO的Vcc和GND連接在一起造成短路的情況,當你采用開漏輸出時,因為有上拉電阻的存在就可以避免這一問題的出現。
為什么要上拉電阻?
①:因為開漏輸出不接上拉電阻時無法輸出高電平。而I2C通信需要有輸出高電平的能力,故在漏極接上上拉電阻
②:I2C總線由SDA(串行數據接線)和SCL(串行時鐘線)及上拉電阻組成,這樣能夠實現“線與”功能,不僅簡化了電路,而且依照“線與”邏輯,可以實現多個主設備搶占總線時的仲裁,因為如果一個設備需要啟動I2C時,它需要在SCL為高電平時,將SDA由高電平拉低作為啟動信號,SDA拉高后,設備會對SDA的電平進行檢查,如果此時SDA為低電平,就表示總線已經被占用,如果SDA為高電平,就說明總線可以被占用。
上拉電阻阻值怎么確定?
一般I\\0端口的驅動能力在2mA-4mA量級。
阻值不能過小:
當上拉電阻阻值過小時會導致從VCC輸入的電路較大,進而使得MOS管不完全導通(由飽和狀態變成放大狀態),因為I2C協議規定,端口輸出低電平的最高允許值為0.4V,故這樣就會使得端口輸出的低電平值增大。所以上拉電阻選取時不能低于1KΩ。
阻值不能過大:
因為上拉電阻和總線電容之間形成了RC,如果電阻過大會導致總線拉高的時間拉長以及輸出阻抗的增大,當輸出阻抗增大到可以與負載阻抗抗衡時,輸出的高電平會因為分壓而減少。
綜上所述,建議上拉電阻選擇使用1.5K、2.2K、4.7K。
-
上拉電阻
+關注
關注
5文章
359瀏覽量
30609 -
總線
+關注
關注
10文章
2878瀏覽量
88052 -
I2C
+關注
關注
28文章
1484瀏覽量
123620 -
SDA
+關注
關注
0文章
124瀏覽量
28127 -
開漏輸出
+關注
關注
0文章
34瀏覽量
7319
發布評論請先 登錄
相關推薦
評論