0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

IIC為什么要配置GPIO為開(kāi)漏輸出?

STM32嵌入式開(kāi)發(fā) ? 來(lái)源:STM32嵌入式開(kāi)發(fā) ? 作者:STM32嵌入式開(kāi)發(fā) ? 2023-03-28 10:16 ? 次閱讀

最近在調(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)漏輸出。

060b2e7a-cca3-11ed-bfe3-dac502259ad0.png

推挽輸出和開(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ò)軟件配置上拉電阻。

061b645c-cca3-11ed-bfe3-dac502259ad0.png

如上,左圖為開(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)漏輸出。

063170a8-cca3-11ed-bfe3-dac502259ad0.png

線與:

開(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)漏輸出。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 通信協(xié)議
    +關(guān)注

    關(guān)注

    28

    文章

    883

    瀏覽量

    40309
  • IIC
    IIC
    +關(guān)注

    關(guān)注

    11

    文章

    300

    瀏覽量

    38338
  • MOS
    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)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    一文詳解單片機(jī)的GPIO開(kāi)模式

    3.3V供電單片機(jī),開(kāi)模式GPIO內(nèi)部示意圖如下所示,當(dāng)內(nèi)部MOS管關(guān)斷時(shí),上拉電阻的作用下,GPIO可以正常輸出5V。
    發(fā)表于 11-15 15:23 ?5530次閱讀
    一文詳解單片機(jī)的<b class='flag-5'>GPIO</b><b class='flag-5'>開(kāi)</b><b class='flag-5'>漏</b>模式

    IIC為什么用開(kāi)輸出和上拉電阻?

    IIC通信協(xié)議推挽輸出開(kāi)輸出開(kāi)
    發(fā)表于 02-26 06:48

    GPIO實(shí)現(xiàn)推挽輸出開(kāi)輸出的關(guān)鍵是什么

    以STM32參考手冊(cè)中的GPIO輸出配置圖為例:看到輸出驅(qū)動(dòng)器虛線框中的內(nèi)容,輸出驅(qū)動(dòng)器中的P-MOS和N-MOS兩個(gè)MOS管就是實(shí)現(xiàn)推挽
    發(fā)表于 02-28 06:48

    STM32的GPIO知識(shí)點(diǎn):開(kāi)輸出和推挽輸出

    “推挽輸出”和“開(kāi)輸出”的模式。這里的電路會(huì)在下面很詳細(xì)地分析到。 TTL肖特基觸發(fā)器:信號(hào)經(jīng)過(guò)觸發(fā)器后,模擬信號(hào)轉(zhuǎn)化為0和1的數(shù)字信號(hào)。但是,當(dāng)
    發(fā)表于 12-22 18:10

    開(kāi)輸出_什么是開(kāi)輸出

    什么是開(kāi)輸出,開(kāi)輸出:OC門(mén)的輸出就是
    發(fā)表于 03-31 15:31 ?7358次閱讀

    開(kāi)輸出與推挽輸出比較

    stm32 gpio 開(kāi)輸出與推挽輸出的區(qū)別。
    發(fā)表于 05-19 15:32 ?16次下載

    GPIO的推挽輸出開(kāi)輸出以及其優(yōu)缺點(diǎn)分析

    GPIO的功能,簡(jiǎn)單說(shuō)就是可以根據(jù)自己的需要去配置輸入或輸出。但是在配置GPIO管腳的時(shí)候,常
    的頭像 發(fā)表于 01-05 15:31 ?3.4w次閱讀
    <b class='flag-5'>GPIO</b>的推挽<b class='flag-5'>輸出</b>和<b class='flag-5'>開(kāi)</b><b class='flag-5'>漏</b><b class='flag-5'>輸出</b>以及其優(yōu)缺點(diǎn)分析

    IIC為什么要用開(kāi)輸出和上拉電阻?

    最近在調(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
    的頭像 發(fā)表于 03-09 13:57 ?1.8w次閱讀
    <b class='flag-5'>IIC</b>為什么要用<b class='flag-5'>開(kāi)</b><b class='flag-5'>漏</b><b class='flag-5'>輸出</b>和上拉電阻?

    IIC 開(kāi)輸出相關(guān)分析資料下載

    電子發(fā)燒友網(wǎng)你提供IIC 開(kāi)輸出相關(guān)分析資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用
    發(fā)表于 03-28 08:44 ?16次下載
    <b class='flag-5'>IIC</b> <b class='flag-5'>開(kāi)</b><b class='flag-5'>漏</b><b class='flag-5'>輸出</b>相關(guān)分析資料下載

    STM32-GPIO端口模式配置--推挽、開(kāi)

    上拉輸入、下拉輸入、浮空輸入、模擬輸入、推挽輸出、開(kāi)輸出的分析
    發(fā)表于 11-30 21:06 ?8次下載
    STM32-<b class='flag-5'>GPIO</b>端口模式<b class='flag-5'>配置</b>--推挽、<b class='flag-5'>開(kāi)</b><b class='flag-5'>漏</b>等

    GPIO配置

    有關(guān)推挽輸出、開(kāi)輸出、復(fù)用開(kāi)輸出、復(fù)用推挽
    發(fā)表于 12-01 10:36 ?13次下載
    <b class='flag-5'>GPIO</b><b class='flag-5'>配置</b>

    GPIO推挽輸出開(kāi)輸出模式區(qū)別詳解

    以STM32參考手冊(cè)中的GPIO輸出配置圖為例:看到輸出驅(qū)動(dòng)器虛線框中的內(nèi)容,輸出驅(qū)動(dòng)器中的P-MOS和N-MOS兩個(gè)MOS管就是實(shí)現(xiàn)推挽
    發(fā)表于 01-13 16:24 ?19次下載
    <b class='flag-5'>GPIO</b>推挽<b class='flag-5'>輸出</b>和<b class='flag-5'>開(kāi)</b><b class='flag-5'>漏</b><b class='flag-5'>輸出</b>模式區(qū)別詳解

    STM32的GPIO的輸入,輸出開(kāi),推挽,上拉,下拉的關(guān)系

    STM32的GPIO的輸入,輸出開(kāi),推挽,上拉,下拉的關(guān)系
    發(fā)表于 01-14 14:45 ?25次下載
    STM32的<b class='flag-5'>GPIO</b>的輸入,<b class='flag-5'>輸出</b>與<b class='flag-5'>開(kāi)</b><b class='flag-5'>漏</b>,推挽,上拉,下拉的關(guān)系

    開(kāi)輸出和推挽輸出

    在STM32或者GD32中,普通的輸出GPIO輸出方式主要是開(kāi)輸出和推挽
    的頭像 發(fā)表于 11-24 10:23 ?1.4w次閱讀
    <b class='flag-5'>開(kāi)</b><b class='flag-5'>漏</b><b class='flag-5'>輸出</b>和推挽<b class='flag-5'>輸出</b>

    什么是浮動(dòng)輸入和開(kāi)輸出

    一些微控制器輸出可以設(shè)置開(kāi)(或者只能設(shè)置開(kāi)
    的頭像 發(fā)表于 11-27 15:45 ?1256次閱讀
    什么是浮動(dòng)輸入和<b class='flag-5'>開(kāi)</b><b class='flag-5'>漏</b><b class='flag-5'>輸出</b>