I2C中為什麼SDA1是釋放匯流排?為什麼不是SDA

2021-03-04 10:03:40 字數 770 閱讀 8942

1樓:匿名使用者

要解釋『釋放』這個詞,就得搞清i2c的io配置模式,i2c的io是開漏或者開集電極模式,即i2c對應的io口只能輸出:

①「低電平(邏輯0,io被接在gnd上,只能是低電平)」

②「高阻態(邏輯1,io可以被拉高或者拉低)」兩種狀態,而所謂的「高電平」其實是在輸出邏輯1、io為高阻態時,io被外部或者內部上拉電阻拉高的。

sda=0時,sda腳在ic內部被直接接在gnd上,它只能是低電平,外部器件也無法把sda腳拉高,這叫拉低。

sda=1時,sda腳為高阻態,(相當於在萬用板上焊了一根io,這個io誰都不接,這就是高阻了),這時sda可以被別的器件拉低或者拉高,即,這時sda腳的控制權是「釋放狀態」,如果誰都不去管這個高阻態的腳,這個腳會被上拉電阻拉高以保證不會被空氣裡的電磁波干擾而高高低低亂跳。

所以,要真正理解釋放這個詞,先要搞清io口內部的構造,瞭解推輓輸出和開漏輸出的本質

2樓:哈哈我是賈馬爾

個人理解:io口用的是oc門(三極體)或od門(mos管)。oc、od門可以在輸出端直接「線與」。

iic的sda線上連有多個器件,他們之間是 與 邏輯關係。當微控制器(主機)的埠p21(sda)為0,由於 與 邏輯關係,其他器件(從機)無論輸出0還是1,匯流排上都是0,不會改變,即匯流排被主機佔用。當p21為1,即主機釋放匯流排,此時主機io口(oc、od門)為高阻態,就是直接懸空的狀態,這樣匯流排電位由其它器件控制,從機中有一個器件為0,匯流排就為0,全都是1,匯流排為1。

如有錯誤的地方請不吝賜教!

C語言,為什麼for i 1 i5 iprintfd ,i輸出卻是6呢

估計你是不小心在後面多加了一個分號,導致迴圈時執行 空語句 等到i 6時不滿足迴圈條件,退出時才列印,所以會這樣。你打它改為 for i 1 i 5 i printf d i 試試?因為i 5的時候還會進入for這時候i 在加1所以i等於6 c語言 int a 6 i,f 1 for i 1 i 5...

c語言中,inta 3,b 2,c 1,為什麼賦值語句a b c 1錯誤了

賦值語句沒有錯,錯的應該是變數的說明語句 inta 3應該在變數與型別說明符間加空格以示區別 int a 3,b 2,c 1 沒有錯啊。include int main inta 3 這個連起來寫已經錯了。當然,排除你是筆誤。a b c 1,是合法的。沒有錯誤。在vs 2010中可以編譯通過。因為a...

cpu是i5 7500,b250主機板,為什麼2400記憶體變

cpu不支援2400mhz的記憶體,所以在開機時,記憶體也只能以2133mhz執行 1 這是指控制程式中指令的執行順序。程式中的各指令之間是有嚴格順序的,必須嚴格按程式規定的順序執行,才能保證計算機工作的正確性。2 一條指令的功能往往是由計算機中的部件執行一系列的操作來實現的。cpu要根據指令的功能...