Wie viele i2c-Slaves kann ein i2c-Master unterstützen?

17

Gibt es eine maximale Anzahl von i2c-Slaves, die ein i2c-Master ansteuern kann? Was sind die physikalischen Grenzfaktoren?

user768421
quelle
1
Sie haben eine 7-Bit-Adresse. Das heißt, Sie können bis zu 127 Slaves ansprechen.
Botnic
Vielen Dank. Gibt es physikalische Begrenzungsfaktoren wie Stromantrieb, Kapazität oder ähnliches, die verhindern, dass die Anzahl der Slaves 127 erreicht?
user768421
1
@Botnic ignoriert i2c-Switches, Hubs, Puffer, Repeater und alle i2c-Geräte, mit denen Sie einen Bus erweitern können, vollständig.
Passant

Antworten:

22

Der Software-Begrenzungsfaktor ist die Größe der Adresse, die für die Slaves verwendet wird: 7-Bit oder 10-Bit, die 127 bzw. 1023 Geräte unterstützen. Physikalisch gibt es zwei Einschränkungen. Erstens die physikalische Größe des Busses, da der Bus nur für kurze Strecken gedacht ist (der Inter-IC-Teil). Wenn der Bus zu groß ist, gibt es kapazitive Belastungs- und Laufzeitverzögerungseffekte, die behandelt werden müssen. Zweitens können einige Geräte nicht den gesamten Bereich der I2C-Adressen unterstützen. Das MPU6050-Gyroskop unterstützt beispielsweise nur zwei Adressen, und einige Geräte reservieren bestimmte Adressen für spezielle Zwecke.

vini_i
quelle
2
Sie haben einen Fehler von eins zu eins. Die 7-Bit-Adressierung unterstützt 128 Adressen (0 bis 127). 10-Bit-Adressierung unterstützt 1024 Adressen (0 bis 1023).
CurtisHx
3
Dies ist kein Fehler. Es handelt sich um einen Fehler "Aus um 6", da nicht nur eine, sondern 7 reservierte Adressen vorhanden sind.
Kruemi
Das Adressierungsschema wird von den Geräten am Bus, Master oder Slave vorgegeben. Einige Geräte haben voreingestellte Adressbereiche und reservierte Adressen. Andere Geräte, z. B. viele Mikrocontroller, haben keine reservierten Adressen und können jede Adresse in einem bestimmten Bitschema verwenden.
vini_i
Diese Zahlen sind einigermaßen korrekt, es ist jedoch eine Einschränkung erforderlich. Es gibt einige reservierte Adressen wie 1111 XXX und 0000 XXX. Dies bedeutet 7-Bit = 2 ^ 7 - 16 = 112 verwendbare Adressen, 10-Bit ist die vollständige 2 ^ 10 1024. 8-Bit ist nicht (sollte keine Sache sein), es enthält typischerweise das R / W-Bit auf 7-Bit. nxp.com/docs/en/user-guide/UM10204.pdf
busfault
@busfault Ich erkenne an, dass 8-Bit-Adressen keine wirkliche Sache sind. Ich habe sie aus meiner Antwort entfernt. Die meisten Mikrocontroller können einige oder alle reservierten Adressen ignorieren und den gesamten Adressbereich nutzen. Ich stelle in meiner Antwort fest, dass dies gerätespezifisch ist.
Vini_i
10

Die maximale Anzahl von Knoten ist durch den Adressraum und die Gesamtbuskapazität von 400 pF begrenzt, wodurch die praktischen Kommunikationsentfernungen auf einige Meter beschränkt werden.

Lesen Sie mehr bei I²C

Junior
quelle
9

Durch die Adressierung wird die Anzahl der Geräte begrenzt. Einige können eine 10-Bit-Adressierung verwenden (ziemlich selten), wodurch die Anzahl der Adressen auf 1024 begrenzt wird. Es gibt eine Handvoll 'reservierter' Adressen.

I2C (im Gegensatz zu "Zweidrahtbus" oder was auch immer andere ähnliche Busse nennen möchten) sollte dem NXP-Standard (geb. Philips), der UM10204- I2C- Busspezifikation und dem Benutzerhandbuch folgen . Dies sollte Ihr primäres Referenzdokument sein, nicht die verschiedenen Interpretationen und Teilmengen, die an anderer Stelle existieren.

Die maximale Anzahl von Geräten wird durch die Ansteuerungsfähigkeit des schwächsten Ausgangs (der wiederum den minimalen Pullup-Widerstand bestimmt), die Verdrahtungs- und Eingangskapazität sowie die Betriebsart / Frequenz beeinflusst. Siehe Abschnitt 7.2 Betrieb über der maximal zulässigen Buskapazität, wenn die maximale Kapazität überschritten werden muss:

Bildbeschreibung hier eingeben

Spehro Pefhany
quelle
7

Ein i2c-Bus ist hauptsächlich durch die Kapazität des Busses (und damit die Geschwindigkeit) und die erreichbaren Geräteadressen begrenzt. Und physischen Platz auf der Platine.

Es gibt jedoch keine echte Obergrenze, wenn Sie Buspuffer, Extender, Repeater, Hubs, Multiplexer, Switches (oder einen anderen Namen für ein Gerät, das zwischen mehreren Bussen wechseln kann) berücksichtigen. Diese erhöhen den i2c-Overhead, der möglicherweise über denselben i2c-Bus erreichbar ist. Der PCA9548A ist beispielsweise ein 8-Bit-Bus-Switch.

Dieser einzelne Chip kann theoretisch die Anzahl der sonst verfügbaren i2c-Slaves (127 * 8) vervierfachen. Der PCA9548A kann für bis zu 8 Adressen an einem einzelnen Bus konfiguriert werden, also für 8 * 8 * 127 Geräte. (Mathe kann aus sein). Und das ist nur mit diesem Gerät und nicht mehr.

Ehrlich gesagt gibt es keine theoretische Grenze, wenn Sie die Kapazität anpassen.

Passant
quelle
5

I2C spezifiziert 2 Adressenlängen, 7 und 10 Bits , was ein theoretisches Maximum von 128 bzw. 1024 unterschiedlichen Adressen ergibt.

Es gibt jedoch einige reservierte Adressen, z. B. 0x00 (allgemeiner Aufruf). Dies begrenzt den Adressraum weiter.

Wenn Sie ein System bauen , wo Sie direkte Kontrolle über die I2C - Geräte haben, Sie können die reservierten Adressen für den eigenen Gebrauch verwenden, aber das System wird nicht mehr mit dem I2C - Standard entspricht.

Neben der Adressierung gibt es die physikalischen Busbegrenzungen. Jedes Gerät am Bus muss in der Lage sein, den Bus in einer bestimmten Zeitspanne niedrig zu halten (abhängig von der Busgeschwindigkeit). Wenn der Bus über eine große Kapazität verfügt, können Geräte den SDA möglicherweise nicht schnell genug herunterziehen, und die Heraufziehvorgänge können den SDA möglicherweise nicht schnell genug zurückbringen.

Jetzt können die Hardwareprobleme mit ein wenig Treiberhardware behoben werden. Ich arbeite gerade an einem Projekt, das I2C verwendet, um mit Geräten über mehrere Zehntel Meter zu kommunizieren. Der Hauptbus verwendet 24 V, und jede Karte verfügt über einen Treiber, der die Spannung auf 3,3 V absenkt.

In einer Nussschale kann die physikalische Beschränkung von I2C überwunden werden. Die Adressierung kann überwunden werden, aber nur, wenn Sie die direkte Kontrolle über das Gerät haben.

CurtisHx
quelle
Es ist fast drei Jahre her, dass Sie an sehr langen i2c-Bussen gearbeitet haben. Haben sie gut gearbeitet?
Wallyk
1
@wallyk Ich habe das Unternehmen kurz nach dem Posten dieser Antwort verlassen. Ich werde sagen, dass Sie mit der richtigen Hardware I2C über größere Entfernungen kommunizieren lassen können. Es gibt jedoch andere Kommunikationsprotokolle, die für große Entfernungen ausgelegt sind und wahrscheinlich eine bessere Wahl als I2C darstellen.
CurtisHx
5

Die Hauptbeschränkung für die Anzahl der Slaves, die ein Master ansteuern kann, wird im Allgemeinen von elektrischen Faktoren wie Buskapazität, Leckage, Antriebsstärke usw. herrühren Bei Leiterbahnen mit null Kapazität wäre die Buskapazität kein Faktor, aber in der Praxis wird keine der beiden Annahmen zutreffen.

Das Adressieren von Geräten, die sich "auskennen", ist hingegen kein wirkliches Problem. Es wäre trivial, ein Peripheriegerät zu entwerfen, mit dem Milliarden von Chips unter Verwendung einer Lese- und einer Schreibadresse verbunden werden könnten. Geben Sie einfach an, dass jedes Gerät eine eindeutige 4-Byte-ID haben muss und die Schreibadresse die ganze Zeit abhören muss, aber aus jeder Transaktion ausscheiden muss, deren erste 4 übertragenen Datenbytes nicht mit ihrer ID übereinstimmen. Geben Sie außerdem an, dass Geräte möglicherweise nur auf die Leseadresse antworten, wenn die letzte Schreibtransaktion, die sie gehört haben, mit ihrer Adresse übereinstimmt.

Wenn man die Möglichkeit hinzufügen möchte, dass der Master die IDs aller angeschlossenen Slaves ermittelt, kann man für solche Zwecke einige spezielle ID-Bereiche reservieren. Zum Beispiel könnte man sagen, wenn das erste ID-Byte FF ist, dann sind die nächsten vier Bytes eine Maske und die vier danach eine ID; Ein Gerät sollte verbunden bleiben (und das letzte ID-Byte bestätigen), wenn der in der Maske angegebene Teil seiner ID mit dem im Befehl angegebenen übereinstimmt. Dies würde es einem Master ermöglichen, mindestens ein Gerät mit 64 Transaktionen und zusätzliche Geräte mit jeweils 62 oder weniger Transaktionen zu identifizieren. Vielleicht nicht das schnellste Mittel zur Geräteidentifizierung, aber angesichts eines Suchraums von Milliarden von Geräte-IDs nicht schlecht.

Superkatze
quelle
2

Kurze Antwort: Es kommt darauf an

Wenn Sie (gemeinsame) Geräte mit 7-Bit-Adressen haben, können bis zu 104 Geräte (128 Adressen - reservierte Adressen (0x00-0x07 und 0xF0-0xFF sind reserviert)) (bestimmte Einschränkungen gelten) (weniger gemeinsame) Geräte, die 10-Bit unterstützen Adressierung von bis zu 1024 Geräten (Sie können 7-Bit- und 10-Bit-Geräte mischen und auf diese Weise bis zu 1136 Geräte erreichen)

Nun zu den Einschränkungen: Die meisten einfachen Geräte können nur auf zwei bis 8 verschiedene Adressen konfiguriert werden. Sie können dies überwinden, indem Sie Geräte mit unterschiedlichen Basisadressen individuell bestellen (dies bedeutet jedoch normalerweise, dass Sie eine Mindestanzahl von Geräten bestellen). Es gibt auch Hardware-Einschränkungen (hauptsächlich Buskapazität), die jedoch mit speziellen i2c-Treibern behoben werden können.

Wenn Sie viele Geräte über größere Entfernungen anschließen möchten, würde ich empfehlen, trotzdem einen Feldbus zu verwenden! I2C ist für die Kommunikation in einem Gerät (z. B. einem Fernsehgerät) vorgesehen. Ich benutze I2C selbst mit einem RaspberyPi mit externen Kabeln von bis zu 50 cm (auch mit T-Abschnitten, die Sie niemals in einem Bussystem haben sollten). Es funktioniert überraschend gut.

kruemi
quelle
0

Die Anzahl der an den Bus angeschlossenen Geräte ist nur durch die insgesamt zulässige Buskapazität von 400 pF begrenzt. Da die meisten ICs mit einer I²C-Schnittstelle CMOS-Technologie mit niedriger Leistung und hoher Impedanz verwenden, können viele ICs an den I²C-Bus angeschlossen werden, bevor die maximale Kapazität erreicht ist

Ravindra Prajapati
quelle
1
Dies beantwortet die Frage des OP nicht vollständig. Versuchen Sie, alle Aspekte der Frage zu beantworten, auch wenn Sie ungefähre Werte verwenden. Geben Sie an und / oder hinterlassen Sie einen Link zu Ihrer Informationsquelle.
Sparky256
0

Mit zusätzlichen Multiplexer-Chips (wie TCA9544A) oder Puffern (wie PCA9515B) können Sie alle Grenzen überwinden - sowohl die Buskapazität als auch die Adressierung.

Sie können 3 Geräte mit identischen Adressen hinter einem Multiplexer platzieren und nur eines davon auswählen, mit ihm kommunizieren und später ein anderes auswählen. Natürlich wird die Software komplexer.

Wenn Sie lange Kabel haben, können Sie einen Puffer in der Mitte platzieren und die Kapazitätsgrenze überschreiten.

filo
quelle
Nein, Sie sind immer noch eingeschränkt: 4 Kanäle / Multiplexer, pro Kanal haben Sie 4 Unterkanäle, dann haben Sie Unterkanäle, Unterkanäle und mehr. Sie haben 3 Adressleitungen pro Kanalumschalter: 4 ^ (2 ^ 3) = 65536 Kanäle. Pro Kanal haben Sie 2 ^ 8 - 7 - 8 + 2 ^ 10 = 1265 Geräte / Kanäle (wenn Sie auch Puffer verwenden) (die -7 sind für reservierte Adressen und -8 für die Multiplex-Adressen). 1265 * 65536 = 82903040 Maximale Geräte.
12431234123412341234123
Bearbeiten: Leider ist ein Fehler aufgetreten: 2 ^ 7 - 7 - 8 + 2 ^ 10 = 1137 Geräte / Kanal => 1137 * 65536 = 74514432 Geräte. Möglicherweise ist jedoch mehr möglich, wenn Sie mit IO-Expander einige Puffer ein- und ausschalten (was für die Praxis weit entfernt ist, aber eine theoretische Möglichkeit).
12431234123412341234123