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為什么要用開(kāi)漏輸出和上拉電阻?

Q4MP_gh_c472c21 ? 來(lái)源:玩轉(zhuǎn)嵌入式 ? 作者:玩轉(zhuǎn)嵌入式 ? 2021-03-09 13:57 ? 次閱讀

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

76d0b9bc-7ec2-11eb-8b86-12bb97331649.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)漏輸出)。

原文標(biāo)題:IIC為什么需要用開(kāi)漏輸出和上拉電阻?

文章出處:【微信公眾號(hào):嵌入式ARM】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

責(zé)任編輯:haq

聲明:本文內(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)投訴
  • 電阻
    +關(guān)注

    關(guān)注

    86

    文章

    5406

    瀏覽量

    171275
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    5926

    瀏覽量

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

    關(guān)注

    11

    文章

    293

    瀏覽量

    38206

原文標(biāo)題:IIC為什么需要用開(kāi)漏輸出和上拉電阻?

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問(wèn)TPA3130D2 FAULTZ是開(kāi)輸出嗎?

    ,TPA3130鎖死,怎么讓他自恢復(fù)呢? 通過(guò)MCU怎么控制? 3、FAULTZ 是 開(kāi)輸出嗎? FAULTZ直接串聯(lián)10k電阻
    發(fā)表于 10-10 08:16

    IIC信號(hào)線需要增加上電阻,是因?yàn)?b class='flag-5'>IIC的IO是什么

    IIC通信中扮演著至關(guān)重要的角色,而電阻的加入則是實(shí)現(xiàn)這種通信方式有效性和可靠性的關(guān)鍵。以下是對(duì)此現(xiàn)象的介紹: 一、IIC通信與
    的頭像 發(fā)表于 10-06 15:50 ?223次閱讀

    電路設(shè)計(jì)基礎(chǔ):電阻、下拉電阻分析

    ,容易受到外界的干擾。 OC門(mén)和OD門(mén)不具備輸出高電平的能力。此時(shí),如果在集電極或增加上電阻,如下圖所示: 當(dāng)輸入為高電平時(shí),
    發(fā)表于 08-22 13:59

    開(kāi)輸出默認(rèn)是高還是低

    開(kāi)輸出(Open-Drain Output)是一種電子電路的輸出方式,通常用于數(shù)字信號(hào)的傳輸。在這種輸出方式中,
    的頭像 發(fā)表于 07-14 10:48 ?1000次閱讀

    開(kāi)輸出為什么加上電阻

    受到限制。為了提高開(kāi)輸出的性能和可靠性,通常需要在電路中加入電阻
    的頭像 發(fā)表于 07-14 10:46 ?1514次閱讀

    求助,Proteus是否無(wú)法正確仿真STM32的開(kāi)輸出

    Proteus仿真。通過(guò)STM32CubeMX將上述MCU的PB8、PB9引腳配置為開(kāi)輸出且無(wú)內(nèi)部/下拉電阻,并將兩個(gè)引腳分別與PCF8
    發(fā)表于 05-29 06:29

    I2C通訊為什么要用開(kāi)輸出電阻

    一、I2C總線簡(jiǎn)介I2C(Inter-IntegratedCircuit)總線是一種雙向串行通信總線,由兩根線組成:SDA(數(shù)據(jù)線)和SCL(時(shí)鐘線)。這兩根線都是雙向的,并且是開(kāi)輸出的,這意味著
    的頭像 發(fā)表于 05-16 08:10 ?4910次閱讀
    I2C通訊為什么<b class='flag-5'>要用</b><b class='flag-5'>開(kāi)</b><b class='flag-5'>漏</b><b class='flag-5'>輸出</b>和<b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>電阻</b>?

    開(kāi)輸出沒(méi)有外接上電阻,外接個(gè)LED結(jié)果能閃亮是怎么回事?

    開(kāi)輸出,沒(méi)有外接上電阻 void LCD_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitSt
    發(fā)表于 05-16 06:47

    單片機(jī)的輸出開(kāi)模式?

    阻狀態(tài),此時(shí)需要,用一個(gè)K歐姆級(jí)別的電阻進(jìn)行,那么高電平的輸入到達(dá)端口還是高電平,反之低電平到
    發(fā)表于 05-09 11:08

    電阻的作用是什么

    從器件輸出端流出電流。所謂的強(qiáng)和弱指的是
    的頭像 發(fā)表于 05-02 14:51 ?3219次閱讀
    <b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>電阻</b>的作用是什么

    STM32cubemx在開(kāi)和推挽輸出模式下電阻和下拉電阻有什么作用和區(qū)別?

    只配置過(guò)輸入的時(shí)候和下拉電阻。不知道在開(kāi)和推挽輸出模式下
    發(fā)表于 03-27 07:20

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

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

    電阻和下拉電阻的用處

    電阻和下拉電阻的用處和區(qū)別? 電阻和下拉
    的頭像 發(fā)表于 11-22 18:26 ?1616次閱讀

    什么是電阻?P0口電阻有什么用?

    這次簡(jiǎn)單說(shuō)說(shuō)上電阻,那問(wèn)題來(lái)了,什么是電阻
    的頭像 發(fā)表于 11-13 15:33 ?2529次閱讀
    什么是<b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>電阻</b>?P0口<b class='flag-5'>上</b>的<b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>電阻</b>有什么用?

    什么是準(zhǔn)雙向IO和開(kāi)輸出?電阻的好處和選擇原則

    單片機(jī)IO口內(nèi)部的結(jié)構(gòu),主要是三種:準(zhǔn)雙向IO、開(kāi)輸出、強(qiáng)推挽輸出
    的頭像 發(fā)表于 11-09 16:27 ?1387次閱讀
    什么是準(zhǔn)雙向IO和<b class='flag-5'>開(kāi)</b><b class='flag-5'>漏</b><b class='flag-5'>輸出</b>?<b class='flag-5'>上</b><b class='flag-5'>拉</b><b class='flag-5'>電阻</b>的好處和選擇原則