最近看IIC原理,釋放一詞經常用遇到,在nxp的標准中也有看到,有點疑惑,因此百度,在百度知道中,有大佬的解釋,可以看看何為“釋放”,結合數字電子技術,應該可以理解了。
下面總結了一下三個解釋何為“釋放”的原文:
1、
iic 注意到一點,硬件上總線的輸出級必須是漏極開路或集電極開路,這就讓總線具備線與功能。線與:顧名思義就是“與操作”,那么當總線上只要存在一個低電平,整個總線上的電平都會被拉低,而只有保持總線所有設備都為高電平,整個總線的電平才會為高電平,這也是高電平被定義默認電平的原因。因此高電平表示釋放。
當SDA和SCL都為高電平時,就稱之為釋放總線。
可以看下協議內容,停止信號:SCL保持高電平的狀態下,SDA出現上升沿。停止信號過后,總線被認為“空閑”。
2、
要解釋‘釋放’這個詞,就得搞清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口內部的構造,了解推挽輸出和開漏輸出的本質
3、
個人理解:io口用的是oc門(三極管)或od門(mos管)。oc、od門可以在輸出端直接“線與”。iic的sda線上連有多個器件,他們之間是 與 邏輯關系。當單片機(主機)的端口p21(sda)為0,由於 與 邏輯關系,其他器件(從機)無論輸出0還是1,總線上都是0,不會改變,即總線被主機占用。當p21為1,即主機釋放總線,此時主機io口(oc、od門)為高阻態,就是直接懸空的狀態,這樣總線電位由其它器件控制,從機中有一個器件為0,總線就為0,全都是1,總線為1。