Kann ich zwei I2C-Schnittstellen auf derselben STM32-MCU verwenden, um miteinander zu kommunizieren?

Ich habe ein STM32 Discovery Board und möchte das I2C-Protokoll testen, aber ich habe keine anderen Geräte zum Testen. Ich möchte wissen, ob ich zwei I2C-Schnittstellen auf derselben Karte verwenden kann, nur um sich wie zwei verschiedene Geräte zu verhalten?

Ich sehe nicht, warum nicht. Sie sind völlig unabhängige Peripheriegeräte. Solange man alles rechtzeitig verarbeiten kann, was nicht schwer ist, wenn man es richtig macht
Der Suchbegriff, nach dem Sie suchen, lautet „Loopback“.

Antworten (2)

Ja, natürlich können Sie das, es sind zwei völlig unabhängige Schnittstellen.

Initialisieren Sie einfach beide und beginnen Sie mit der Kommunikation, aber zuerst müssen Sie überlegen, was Sie damit erreichen möchten, möchten Sie eine Master-Schnittstelle und eine Slave-Schnittstelle zum Testen oder möchten Sie ein Multimaster-Setup aufbauen, bei dem beide Master und Slaves sein können .

Muss ich Widerstände verwenden oder ist es sicher, sie direkt anzuschließen?

Sie stellen einfach die andere I2C-Schnittstelle in den Slave-Modus und konfigurieren die Adressen usw. entsprechend, und es wird funktionieren.

Ich bin neu in der I2C-Kommunikation, aber ich weiß, dass I2C ein Multi-Master-Protokoll ist, sodass jedes Gerät auf dem Bus Master und Slave sein kann, nicht wahr? Warum sollte ich einen in den Slave-Modus versetzen?
Sie haben Recht mit Multimaster. Es hängt wirklich davon ab, was Sie erreichen wollen. Eine Möglichkeit ist ein I2C-Monitor, der nicht auf Meldungen reagiert, sondern diese lediglich protokolliert. Ein Slave-Gerät wäre etwas, das auf eine Nachricht antwortet, die an eine bestimmte Adresse gesendet wird. Der Meister würde diese Botschaften senden.
Sie können mehrere Master haben, aber nur ein Slave-Gerät kann tatsächlich etwas empfangen. Meister haben keine Adresse, an die sie sich wenden können. Meister initiieren immer Kommunikation. Sie können also mehrere Master haben, aber wenn Sie etwas von einem I2C senden und mit einem anderen empfangen möchten, muss dieser andere zu diesem Zeitpunkt ein Slave sein und eine Adresse haben. Nachdem es alles erhalten hat, kann es zum Master werden und auch selbst die Kommunikation initiieren, kein Problem
Wenn Sie neu bei I2C sind, würde ich zuerst Mittel finden, um den Inhalt der Nachrichten zu sehen. Vielleicht ein benutzerdefinierter Monitor, ein Buspirat oder ein Oszilloskop, das die Nachrichten lesen kann. Probleme mit I2C sind normalerweise etwas Winziges, wie das Vergessen, ein Stoppbit dort zu platzieren, wo es sein sollte.
Der STM32 hat keine separate Initialisierung in den Master- oder Slave-Modus. Es gibt nur eine Initialisierung und Sie müssen sie einschließlich der Slave-Adressen konfigurieren, aber Sie können wählen, ob Sie eine Dummy-Adresse auswählen möchten. Während das I2C-Protokoll Multimaster definiert, sind nicht alle Master Multimaster-fähig und Slaves sind per Definition keine Master. STM32 unterstützt Multimaster.
Außerdem können einige Buspuffer die Verwendung von Multi-Master verhindern. Und einige Implementierungen verwenden I2C "Bit Banging", was eine Softwareimplementierung von I2C bedeutet, ohne die eingebaute HW von STM32 zu verwenden.