Warum werden mehrere I²C-Ports benötigt?


19

Mit dem I²C-Protokoll können theoretisch und mit 7-Bit-Adressierung bis zu 127 Geräte an den Master angeschlossen werden. Dies ist eine große Zahl. Warum sollte ein kostengünstiger Mikrocontroller (z. B. dieser PIC24 ) mehr als einen I²C-Port haben? Warum wird es gebraucht?

Antworten:


23

Anordnung der Sensornaben

In diesem Szenario gibt es zwei I²C-Busse. Nennen wir sie Lokalbus und Hauptbus . Der lokale Bus dient dazu, eine Reihe von Sensoren an einen Mikrocontroller (μC) anzuschließen. Der Zweck des μC besteht darin, die Sensoren abzufragen, Informationen daraus zu aggregieren und bestimmte Ereignisse zu erkennen. Ein μC in dieser Rolle wird als Sensor-Hub bezeichnet . Der Sensor-Hub ist nicht für Funktionen höherer Ordnung verantwortlich. Dafür gibt es einen leistungsstarken Hauptprozessor. Der Hauptbus verbindet den Sensor-Hub mit dem Hauptprozessor. Der Sensor-Hub μC ist also ein Master am lokalen I²C-Bus und ein Slave am I²C-Hauptbus.

SPI und I²C

Der im ursprünglichen Beitrag verknüpfte PIC teilt die Pins nicht zwischen SPI und I²C. Es gibt jedoch auch andere PICs, die dieselben Pins für Hardware-SPI und I²C verwenden, da beide mit demselben MSSP-Peripheriegerät implementiert sind. Wenn ein PIC über zwei separate MSSP-Peripheriegeräte verfügt, kann eines für Hardware-SPI verwendet werden, während das andere für Hardware-I²C verwendet wird.


21

Ein häufiger Grund, mehr als einen Bus zu benötigen, sind Geräte, die mit unterschiedlichen Geschwindigkeiten betrieben werden. Ursprünglich lief I²C mit maximal 100 kHz. Später wurde die Geschwindigkeit auf maximal 400 kHz und später auf 1 MHz und höher erhöht.

Da die Adresse jedes Geräts in das I²C-Protokoll eingebettet ist, müssen Sie den Bus immer mit der niedrigsten gemeinsamen Geschwindigkeit betreiben, wenn Sie Geräte mit unterschiedlichen Übertragungsraten am selben Bus haben, z. B. 100 kHz und 400 kHz an alle Geräte am selben Bus (in diesem Fall 100 kHz).

Wenn Sie den Bus mit der höheren Geschwindigkeit (400 kHz) betreiben, funktioniert das Gerät mit der niedrigeren Geschwindigkeit offensichtlich nicht ordnungsgemäß, und es interpretiert möglicherweise sogar die Adresse des Hochgeschwindigkeitsgeräts als seine eigene, wodurch das 400-kHz-Gerät ausfällt Gut. Aber selbst wenn Sie den Bus anfangs mit 100 kHz betrieben und dann versuchten, den Bus auf 400 kHz zu beschleunigen, nachdem Sie einen Chip mit höherer Geschwindigkeit adressiert haben, könnte der Chip mit niedrigerer Geschwindigkeit einen von ihnen interpretieren (obwohl dies wahrscheinlich unwahrscheinlich ist) die Hochgeschwindigkeitsdatenpakete fälschlicherweise als ihre Adresse und stören somit die Kommunikation auf dem Bus. In jedem Fall würde sich das 100-kHz-Gerät am Ende des Austauschs mit dem 400-kHz-Gerät wahrscheinlich in einem unbekannten Zustand befinden.

Daher ist es am effizientesten, wenn Geräte mit unterschiedlichen Geschwindigkeiten ausgeführt werden und mehrere I²C-Ports vorhanden sind und Sie über die Ersatzpins verfügen, die einen solchen Luxus ermöglichen, z. B. einen I²C für 100-kHz-Geräte, einen für 400-kHz-Geräte und einen anderen je nach Bedarf für 1-MHz-Geräte.

Dies ist bei SPI kein Problem, da jedes Gerät in der Hardware über eine separate Chipauswahlleitung aktiviert (adressiert) wird. Somit kann die Taktrate an die Geschwindigkeit des ausgewählten Chips angepasst werden (10 MHz, 20 MHz, was auch immer), ohne dass dies Auswirkungen auf andere Chips auf demselben Bus hat, da diese nicht aktiviert sind.


19

Sie können auch zwei Geräte mit derselben Adresse unterstützen. Ja, bei den meisten Geräten können Sie die unteren beiden Bits ihrer Adresse mit Straps auswählen. Vor kurzem musste ich 4 Geräte unterstützen, die jeweils nur erlaubten, das LSB ihrer Adresse mit einem Widerstand einzustellen. Zwei Ports zu haben bedeutet für mich keine zusätzlichen Kosten.

Vielleicht möchte ich, dass einer der Master für eine Reihe von Geräten ist und der andere als Slave-Port fungiert, damit mein Master nicht auf den Bus warten muss, um mir einen Befehl zu geben, während ich einen Temperatursensor für den 10.000sten abfrage Zeit.

Es scheint eine Menge anderer guter Antworten in diesem Thread zu geben, die nur meine 2 Cent addieren.


9

Geschwindigkeit.

Wenn Sie gleichzeitig auf zwei I2C-Geräte zugreifen müssen, liegt möglicherweise ein schwerwiegender Konflikt vor. Oder man müsste auf den anderen warten.


9

Zweitens kann I²C verwendet werden, um mehr Bandbreite zu erhalten (Sie können zwei Bytes gleichzeitig empfangen oder senden).

Wenn Sie einen ADC haben, der ununterbrochen arbeitet, ist ein I²C die ganze Zeit beschäftigt.

Das Umschalten der Adresse dauert ebenfalls einige Zeit. In einigen Fällen können Sie zwei Ports für zwei Geräte verwenden und Adressänderungen vermeiden, um Zeit zu sparen.


0

Andere erwähnten viele Gründe, dies zu tun, ich werde einen hinzufügen:

Sie haben eine Reihe von 5V-I2C-Geräten und eine Reihe von 3V3-I2C-Geräten.

Zum Beispiel habe ich ein 3,3-V-Mikro, das zwei I2C-Anschlüsse hat, einen 5-V-toleranten, den anderen nur 3V3.


Aus Neugier, welches Mikro ist das?
Nick Alexeev

1
LPC4330, hier ein Auszug aus dem Handbuch: "Open-Drain-5-V-tolerantes digitales E / A-Pad, kompatibel mit der I2C-Bus-Fast-Mode-Plus-Spezifikation. Dieses Pad erfordert ein externes Pull-up, um die Ausgangsfunktionalität zu gewährleisten. Wenn die Stromversorgung ausgeschaltet ist, ist dies Der mit dem I2C-Bus verbundene Pin ist potentialfrei und stört die I2C-Leitungen nicht. "
Peufeu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.