最近在調(diào)ICM20602模塊,一個(gè)六軸陀螺儀和加速度計(jì),使用IIC通信協(xié)議,這個(gè)過(guò)程中遇到一個(gè)困擾我很長(zhǎng)時(shí)間的問(wèn)題。
IIC協(xié)議正確,但是一直讀取失敗,最后發(fā)現(xiàn)因?yàn)闆](méi)配置GPIO為開(kāi)漏輸出。
推挽輸出和開(kāi)漏輸出
推挽輸出:
輸出邏輯0,則N-MOS激活;
輸出邏輯1,則P-MOS激活。
開(kāi)漏輸出:
在不接上拉電阻時(shí), 輸出邏輯0,則N-MOS激活;
輸出邏輯1,P-MOS不會(huì)激活, 不會(huì)輸出高電平。
在接上拉電阻時(shí), 輸出邏輯0,則N-MOS激活;
輸出邏輯1,P-MOS激活, 可以輸出高電平。
也就是說(shuō)開(kāi)漏輸出如果不接上拉電阻, 沒(méi)有輸出高電平的能力。
如果需要開(kāi)漏輸出有輸出高電平的能力需要接一個(gè)上拉電阻。目前很多單片機(jī)GPIO可以通過(guò)軟件配置上拉電阻。
如上,左圖為開(kāi)漏輸出(接上拉電阻),右圖為推挽輸出。
開(kāi)漏輸出的作用
防止短路:
在一些情況下(比如總線), 多個(gè)GPIO口可能會(huì)連接在同一根線上, 存在某個(gè)GPIO輸出高電平, 另一個(gè)GPIO輸出低電平的情況. 如果使用推挽輸出, 你會(huì)發(fā)現(xiàn)這個(gè)GPIO的VCC和另一個(gè)GPIO的GND接在了一起, 也就是短路了。
如果換成開(kāi)漏輸出呢? VCC和GND多了個(gè)電阻, 這樣電路就是安全的.所以總線一般會(huì)使用開(kāi)漏輸出。
線與:
開(kāi)漏輸出還能實(shí)現(xiàn)線與,減少一個(gè)與門(mén),簡(jiǎn)化電路。
IIC為什么用開(kāi)漏輸出和上拉電阻
IIC協(xié)議支持多個(gè)主設(shè)備與多個(gè)從設(shè)備在一條總線上, 如果不用開(kāi)漏輸出, 而用推挽輸出, 會(huì)出現(xiàn)主設(shè)備之間短路的情況。
至于為什么需要上拉電阻, 那是因?yàn)镮IC通信需要輸出高電平的能力。
為了實(shí)現(xiàn)多個(gè)主設(shè)備搶占總線時(shí)的仲裁,IIC只有兩根線(SCL和SDA),怎么判斷哪個(gè)主設(shè)備占用總線,當(dāng)然是先來(lái)后到了。
假設(shè)主設(shè)備A需要啟動(dòng)IIC,他需要在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)不是高電平, 而是低電平. 說(shuō)明其他主設(shè)備搶占總線的時(shí)間比它早, 主設(shè)備A只能放棄占用總線. 如果是高電平, 則可以占用。
這就是開(kāi)漏輸出在IIC通信中的另一個(gè)作用。
SDA是高電平, 說(shuō)明主設(shè)備A可以占用總線, 然后主設(shè)備A將SDA拉低, 開(kāi)始通信。
SDA是低電平, 說(shuō)明有人已經(jīng)捷足先登了, 主設(shè)備A不能占用總線, 結(jié)束通信。
因此,模擬IIC一定要將GPIO端口設(shè)置為開(kāi)漏輸出并加上上拉電阻,硬件IIC會(huì)自動(dòng)配置為開(kāi)漏輸出。
審核編輯:湯梓紅
-
通信協(xié)議
+關(guān)注
關(guān)注
28文章
883瀏覽量
40309 -
IIC
+關(guān)注
關(guān)注
11文章
300瀏覽量
38338 -
MOS
+關(guān)注
關(guān)注
32文章
1271瀏覽量
93769 -
GPIO
+關(guān)注
關(guān)注
16文章
1204瀏覽量
52104 -
開(kāi)漏輸出
+關(guān)注
關(guān)注
0文章
34瀏覽量
7327
原文標(biāo)題:IIC為什么要配置GPIO為開(kāi)漏輸出?
文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論