Gibt es eine maximale Anzahl von i2c-Slaves, die ein i2c-Master ansteuern kann? Was sind die physikalischen Grenzfaktoren?
Gibt es eine maximale Anzahl von i2c-Slaves, die ein i2c-Master ansteuern kann? Was sind die physikalischen Grenzfaktoren?
Antworten:
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.
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:
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.
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.
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.
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.
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
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.