電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 91|回復(fù): 0
收起左側(cè)

I2C通訊為什么要用開漏輸出和上拉電阻?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
匿名  發(fā)表于 2024-5-15 08:35:00 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
點(diǎn)擊上方藍(lán)字關(guān)注我們

一、I2C總線簡介

I2C(Inter-Integrated Circuit)總線是一種雙向串行通信總線,由兩根線組成:SDA(數(shù)據(jù)線)和SCL(時(shí)鐘線)。這兩根線都是雙向的,并且是開漏輸出的,這意味著每個(gè)設(shè)備都可以將線拉低(Ground),但不能將線拉高(Vcc)。這種設(shè)計(jì)使得多個(gè)設(shè)備可以共享同一條總線,以進(jìn)行通信。




二、 I2C接口接外部上拉電阻的原因

I2C(Inter-Integrated Circuit)接口在使用時(shí)需要連接外部上拉電阻,主要原因包括以下幾點(diǎn):
開漏(Open-drain)或開集電極(Open-collector)輸出:I2C總線上的設(shè)備如主設(shè)備和從設(shè)備使用開漏或開集電極的輸出方式來驅(qū)動(dòng)總線。這意味著,設(shè)備只能將線路拉低(接地),而不能直接將線路拉高至供電電壓。因此,需要外部上拉電阻來將線路拉高。多主設(shè)備配置:I2C允許多個(gè)主設(shè)備存在于同一總線上。為了防止輸出沖突(例如,一個(gè)設(shè)備嘗試將線路拉高,而另一個(gè)設(shè)備嘗試將線路拉低),I2C設(shè)計(jì)為只能通過外部上拉電阻來將信號(hào)線拉高,從而簡化了總線管理。邏輯狀態(tài)的穩(wěn)定和可靠性:外部上拉電阻確保在沒有設(shè)備主動(dòng)驅(qū)動(dòng)線路時(shí),數(shù)據(jù)線(SDA)和時(shí)鐘線(SCL)能穩(wěn)定地保持在高電平狀態(tài)。這有助于提高信號(hào)的可靠性和減少誤讀。靈活的電壓級(jí)別:由于I2C設(shè)備可以支持不同的邏輯電平,使用外部上拉電阻可以方便地匹配總線電平到特定的系統(tǒng)電壓,例如3.3V或5V等,從而使得不同電壓等級(jí)的設(shè)備可以共存于同一總線。電氣特性的優(yōu)化:通過選擇合適的上拉電阻值,可以優(yōu)化總線的電氣特性,如上拉速率、功耗和噪聲容限。電阻值太低會(huì)增加功耗和可能導(dǎo)致總線驅(qū)動(dòng)器過載,而電阻值太高則可能導(dǎo)致信號(hào)上升時(shí)間過長,影響總線速率。所以綜上所述,外部上拉電阻在I2C通信中發(fā)揮著至關(guān)重要的作用,保證了通信的穩(wěn)定性和靈活性。在I2C通信中,使用推挽(push-pull)輸出并不是標(biāo)準(zhǔn)的實(shí)現(xiàn)方式,因?yàn)檫@種輸出方式與I2C設(shè)計(jì)的開漏(open-drain)或開集電極(open-collector)輸出方式存在本質(zhì)上的差異。下面詳細(xì)解釋為什么通常不使用推挽輸出:總線沖突的風(fēng)險(xiǎn):I2C總線設(shè)計(jì)為多主設(shè)備和多從設(shè)備可以共享同一總線。如果使用推挽輸出,當(dāng)一個(gè)設(shè)備試圖將總線拉高而另一個(gè)設(shè)備試圖將其拉低時(shí),將會(huì)發(fā)生總線沖突,可能導(dǎo)致設(shè)備損壞。信號(hào)完整性問題:推挽輸出可以同時(shí)驅(qū)動(dòng)高電平和低電平,這在總線空閑和活躍時(shí)都維持總線狀態(tài)。然而,這種方式缺乏開漏輸出的靈活性,例如在總線檢測和仲裁過程中動(dòng)態(tài)改變控制權(quán),這是I2C協(xié)議重要的一部分。電平匹配和靈活性降低:使用推挽輸出意味著所有設(shè)備必須在相同的電壓級(jí)別上操作,這限制了不同電壓級(jí)別設(shè)備的互操作性。相比之下,開漏輸出允許通過外部上拉電阻選擇適當(dāng)?shù)碾妷杭?jí)別,以匹配不同設(shè)備的電壓要求。仲裁和時(shí)鐘同步問題:I2C支持總線仲裁和時(shí)鐘同步,這依賴于能夠檢測總線上的高電平和低電平狀態(tài)。如果總線使用推挽輸出,總線上的電平狀態(tài)將由最后一個(gè)發(fā)送信號(hào)的設(shè)備完全控制,從而使得仲裁和同步變得困難或不可能。因此,盡管理論上可以通過某些特定設(shè)計(jì)讓I2C總線上的設(shè)備使用推挽輸出,但這樣做通常需要額外的硬件支持和復(fù)雜的總線管理策略,且違背了I2C協(xié)議的基本設(shè)計(jì)原則。如果需要在I2C總線上實(shí)現(xiàn)類似推挽的功能,通常建議使用其他通信協(xié)議,如SPI或UART,這些協(xié)議本身就設(shè)計(jì)為支持推挽輸出。

歡迎轉(zhuǎn)發(fā)分享給需要的好友!


微信號(hào):zls_it

掃描下方二維碼添加充電站小助手微信,可以加入微信交流群

群內(nèi)每天分享一些大廠的經(jīng)典C語言、C++面試題以及知識(shí)點(diǎn)解析、技術(shù)話題分享、常見錯(cuò)誤、易混淆的概念答疑等,等你來Get。



START



回復(fù)

使用道具

發(fā)表回復(fù)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表