題:
一個i2c主設備可以支持多少個i2c從設備?
user768421
2015-07-27 17:17:10 UTC
view on stackexchange narkive permalink

i2c主設備可以驅動的i2c從設備數是否最大?什麼是物理限制因素?

您有一個7位地址。這意味著您可以尋址多達127個從站。
謝謝。是否存在諸如電流驅動,電容之類的物理限制因素,或諸如此類的因素會阻止從機數量達到127個?
@Botnic完全忽略了i2c交換機,集線器,緩衝區,轉發器以及任何允許您擴展總線的i2c設備。
九 答案:
vini_i
2015-07-27 17:51:43 UTC
view on stackexchange narkive permalink

軟件限制因素是用於從站的地址大小:7位或10位,分別支持127個和1023個設備。從物理上講,有兩個限制。首先,總線的物理尺寸,因為總線僅用於短期運行(IC間部分)。如果總線太大,則需要處理電容性負載和傳播延遲效應。其次,某些設備不能支持全部I2C地址。例如,MPU6050陀螺儀僅支持兩個地址,某些設備保留用於特殊目的的特定地址。

您有一個錯誤的錯誤。7位尋址支持128個地址(0到127)。10位尋址支持1024個地址(0到1023)。
這並非一by而就。這是一個“偏離6錯誤”,因為有7個保留地址,而不僅僅是一個。
尋址方案由總線,主機或從機上的設備決定。某些設備具有預設的地址範圍和保留的地址。其他設備,例如許多微控制器,沒有保留的地址,並且可以在給定的位方案中使用任何地址。
這些數字是正確的,但是需要警告。有一些保留地址,例如1111 XXX和0000 XXX。這意味著7位= 2 ^ 7-16 = 112個可用地址,10位是完整的2 ^ 101024。8位不是(應該不是問題)它通常包括R / W位在7位上https://www.nxp.com/docs/zh-CN/user-guide/UM10204.pdf
@busfault我承認8位地址實際上並不是問題。我已將其從答案中刪除。大多數微控制器可以選擇忽略部分或全部保留地址,並使用整個地址範圍。我在回答中註意到這是特定於設備的。
Junior
2015-07-27 17:53:08 UTC
view on stackexchange narkive permalink

最大節點數受地址空間以及總線總電容400 pF的限制,這將實際通信距離限制在幾米之內。

I²C

中了解更多信息
Spehro Pefhany
2015-07-27 18:29:51 UTC
view on stackexchange narkive permalink

尋址限制了設備的數量-有些設備可以使用10位尋址(很少使用),這將地址數量限制為1024。有少數“保留”地址。

I2C(而不是“兩線製總線”或其他任何想調用類似總線的東西)應遵循NXP(飛利浦)標準,即 UM10204 I2C-總線規範和用戶手冊。那應該是您的主要參考文件,而不是其他地方存在的各種解釋和子集。

最大數量的設備將受到最弱輸出(反過來決定最小上拉電阻)的驅動能力,佈線和輸入電容以及工作模式/頻率的影響。如果必須超過最大電容,請參閱第7.2節在最大允許總線電容以上操作

enter image description here

Passerby
2015-08-19 09:47:51 UTC
view on stackexchange narkive permalink

i2c總線主要受總線電容(以及速度)和可訪問設備地址的限制。物理板空間。

但是,當考慮總線緩衝區,擴展器,中繼器,集線器,多路復用器,開關(或可以在多個總線之間切換的設備的任何其他名稱)時,並沒有真正的上限)。這些可能會增加一些i2c開銷,因為可以通過同一i2c總線進行訪問。例如,PCA9548A是8位總線開關。

從理論上講,該單芯片可以使i2c從站的數量(127 * 8)增加兩倍。而且PCA9548A可以在一條總線上最多配置8個地址,因此8 * 8 * 127個設備。 (可能關閉)。

坦率地說,如果調整電容,則沒有理論限制。

CurtisHx
2015-07-27 18:17:59 UTC
view on stackexchange narkive permalink

I2C指定2個地址長度,分別為 7位和10位,這在理論上最多提供128個和1024個不同的地址。

但是,有一些保留地址,例如0x00(常規調用)。這進一步限制了地址空間。

如果要構建直接控制I2C設備的系統,您可以 使用保留的地址供自己使用,但是系統將不再符合I2C標準。

除了尋址之外,還存在物理總線限制。總線上的每個設備都需要能夠在一定時間範圍內將總線拉低(取決於總線速度)。如果總線上有很多電容,設備可能無法將SDA拉低到足夠低的速度,並且上拉可能無法使SDA拉回足夠快的時間。

現在,可以通過以下方法解決硬件問題:驅動程序硬件的一點點。我現在正在開發一個項目,該項目使用I2C與數十米的設備進行通信。主總線使用24v,每塊板上都有一個驅動器,可將其降壓至3.3v。

在堅果殼中,可以克服I2C的物理限制。可以克服尋址 的問題,但前提是您可以直接控制設備。

自從您從事非常長的i2c總線以來,已經快三年了。他們工作正常嗎?
@wallyk發布答案後不久,我離開了那家公司。我要說的是,只要有了正確的硬件,您就可以使I2C進行更長距離的通信。但是,還有其他一些針對長距離設計的通信協議,可能會比I2C更好。
supercat
2015-07-27 21:49:20 UTC
view on stackexchange narkive permalink

主機可以驅動的從機數量的主要限制通常是由電氣因素引起的,例如總線電容,洩漏,驅動強度等。如果可以構造具有零寄生電容和零洩漏的從機,並且可以將它們與零電容的電路板走線連接起來,那麼總線電容就不會成為一個因素,但是在實踐中,這兩種假設都不會成立。

在設備上尋址彼此“了解”的設備另一方面,這並不是真正的問題。設計一種外圍設備將是微不足道的,該外圍設備將允許使用一個讀和一個寫地址連接數十億個芯片。只需指定每個設備必須具有唯一的四字節ID,並且始終需要偵聽寫入地址,但必須退出前四個傳輸的數據字節與其ID不匹配的每個事務。進一步指定設備只有在聽到的最後一個寫事務與它們的地址匹配時才可以對讀地址做出響應。

如果要增加使主機確定所有連接的從機ID的能力,則可以為此保留一些特殊的ID範圍。例如,可以說如果第一個ID字節是FF,那麼接下來的四個字節將是一個掩碼,後面的四個字節將是一個ID;如果設備指定的掩碼部分與命令中指定的部分匹配,則設備應保持連接狀態(並確認最後一個ID字節)。這將允許主機使用64個事務標識至少一個設備,並使用每個62個或更少的事務標識其他設備。也許不是最快的設備識別方法,但考慮到數十億個設備ID的搜索空間,效果還不錯。

kruemi
2015-08-18 21:29:03 UTC
view on stackexchange narkive permalink

簡短答案:這取決於

如果您擁有(通用)具有7位地址的設備(最多104個設備)(128個地址-保留地址(保留0x00-0x07和0xF0-0xFF)))(一定局限性)如果您有(較少見的)設備支持10位尋址,最多可支持1024個設備(您可以將7bit和10bit設備混合使用,最多可以達到1136個設備)

現在由於局限性:大多數簡單設備只能配置為兩個到8個不同的地址。您可以通過自定義訂購具有不同基址的設備來克服這一問題(但這通常意味著您訂購的設備數量最少)也存在硬件限制(主要是總線電容),但這可以通過特殊的i2c驅動程序來解決。

如果您想在更遠的距離上連接許多設備,我建議還是使用現場總線! I2C用於在設備(例如電視機)內部進行通信。我自己使用帶有RaspberyPi的I2C,並使用了長達50cm的外部電纜(即使使用T型節,也不應在總線系統中使用)。效果出奇的好。

Ravindra Prajapati
2016-07-05 22:17:31 UTC
view on stackexchange narkive permalink

連接到總線的設備數量僅受總允許總線電容400 pF的限制。由於大多數具有I²C接口的IC均使用低功耗,高阻抗CMOS技術,因此在達到最大電容之前,可以將許多IC連接到I²C總線上。

這不能完全解決OP的問題。即使使用近似值,也要嘗試回答問題的所有方面。指定和/或保留指向您的信息源的鏈接。
filo
2017-08-07 15:12:21 UTC
view on stackexchange narkive permalink

通過添加多路復用器芯片(例如TCA9544A)或緩衝器(例如PCA9515B),可以克服所有限制-總線電容和尋址。

您可以將3個具有相同地址的設備放在一個多路復用器後面,並僅選擇其中一個,與之通信,然後再選擇另一個。當然,軟件會變得更加複雜。

如果佈線較長,可以在中間放置一個緩衝器,以克服電容限制。

不,您仍然會受到限制:4通道/多路復用器,每個通道有4個子通道,然後您有子子通道,子子通道等。每個通道切換器有3條地址線:是4 ^(2 ^ 3)= 65536個通道。每個通道有2 ^ 8-7-8 + 2 ^ 10 = 1265個設備/通道(當您還使用緩衝區時)(-7用於保留地址,-8用於多路復用地址)。1265 * 65536 = 82903040最多設備數。
編輯:很抱歉有一個錯誤:它是2 ^ 7-7-8 + 2 ^ 10 = 1137設備/通道=> 1137 * 65536 = 74514432設備。但是,當您使用IO-Expander來打開和關閉某些緩衝區時,可能還有更多的可能性(這是實際使用中的一種形式,但是在理論上是可行的)。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...