Frage:
Kann nur der Master die Kommunikation in SPI initiieren, während in I2C der Slave auch die Kommunikation initiieren kann?
Prawn Hongs
2019-05-13 09:08:48 UTC
view on stackexchange narkive permalink

Kann ein Slave die Kommunikation in SPI initiieren?

Ich dachte aufgrund der Chipauswahl, d. h. nur der NSS-Feature-Master kann die Kommunikation kommunizieren.In I2C kann der Slave jedoch auch die Kommunikation initiieren, indem er das RW-Flag in der i2c-Kommunikation ändert.Ist das richtig?

Um bestehende Antworten zu ergänzen, besteht ein üblicher Ansatz darin, einen separaten GPIO-Pin als Interrupt zu verwenden, der dem Master signalisiert, dass der Slave Daten lesen muss, um gelesen zu werden.
@Prawn_Hongs können Sie klarstellen, was Sie unter "initiieren" verstehen?Ich denke, Sie könnten mit dem Lesen / Schreiben von Daten durch Master / Slave verwechselt werden.
Fünf antworten:
TemeV
2019-05-13 09:39:58 UTC
view on stackexchange narkive permalink

Mit beiden kann nur der Master die Kommunikation initiieren.I²C kann jedoch mehrere Master haben und die Knoten können die Rollen ändern, so dass es etwas flexibler ist.Es ist jedoch immer noch nicht korrekt zu sagen, dass der Slave die Kommunikation initiieren könnte.

Ein gängiger Weg für einen Slave, um anzuzeigen, dass er mit dem Master kommunizieren möchte, ist die Verwendung eines Interrupt-Signals.Bei vielen Sensoren und ADCs werden sie als "datenbereit" oder ähnliches bezeichnet.Nachdem ein Slave das Signal aktiviert hat, weiß der Master, dass dem Slave einige neue Daten zur Verfügung stehen.

user
2019-05-13 15:44:54 UTC
view on stackexchange narkive permalink

Sowohl SPI als auch I2C ermöglichen dem Master nur die Erstkommunikation.Jedoch ist es möglich, dass Slave-Geräte zeigen, dass etwas passiert ist, was die Kommunikation mit ihnen über einen Interrupt-Pin verdient. sind Interrupt-Pins sind bei ICs mit seriellen Bussen ziemlich häufig.Der Pin ändert den Status, um anzuzeigen, dass ein Ereignis aufgetreten ist, und der Master kann dann den Pin beobachten, um zu erfahren, wann er mit dem Slave kommunizieren soll, um herauszufinden, was passiert ist. Selbst Selbst in diesem Fall ist es Sache des Masters, die Kommunikation zu starten, und er kann den Slave einfach ignorieren, wenn er möchte.

Justme
2019-05-13 09:37:17 UTC
view on stackexchange narkive permalink

Nein, in I2C kann nur der Master mit der Kommunikation auf dem Bus beginnen, und alle Slaves müssen dem Master folgen.Ein Slave kann keine Kommunikation initiieren und insbesondere kann der Slave das RW-Flag in keiner Weise ändern.

CL.
2019-05-13 11:10:58 UTC
view on stackexchange narkive permalink

Bei SPI überträgt die MOSI-Leitung immer Daten vom Master zum Slave, und die MISO-Leitung überträgt immer Daten vom Slave zum Master.

Bei I²C gibt es nur eine einzige Datenleitung für beide Richtungen.Das R / W-Bit steuert, welches Gerät Datenbytes überträgt und mit dem Gerät die ACK-Bits überträgt, aber das R / W-Bit selbst wird immer vom Master gesteuert.(Das R / W-Bit kann mit einer wiederholten Startbedingung geändert werden, jedoch nur vom Master.)

Und die Uhr wird immer vom Master gesteuert.(Ein I²C-Slave kann Taktzyklen mit Taktdehnung verzögern, aber keine neuen Taktzyklen erzeugen.)

supercat
2019-05-14 00:19:08 UTC
view on stackexchange narkive permalink

In SPI hat jedes Gerät eine feste Rolle als Master oder Slave. In I2C können sich die Rollen von Geräten dynamisch ändern. Jedes Gerät, das eine Transaktion auf dem Bus initiiert (im Gegensatz zum Auffordern einer Transaktion über Mittel außerhalb des Busses), muss sich als Master für diese Transaktion verhalten, aber dieses Gerät kann sich als Slave für Transaktionen verhalten, die von anderen Geräten initiiert wurden. Mit Ausnahme einiger Details setzt I2C voraus, dass es für eine bestimmte Transaktion genau einen Master und einen Slave gibt:

  1. Bei Verwendung längerer Adressierungsformate können mehrere Geräte vorläufig als Slaves fungieren, während sie auf ihre vollständige Adresse warten. In diesem Zustand können Slaves dem Master nur anzeigen, dass der Slave, an dem der Master interessiert ist, möglicherweise bereit ist zu antworten.

  2. Mehrere Geräte können gleichzeitig als Master fungieren, wenn alle dieselben Daten gleichzeitig senden möchten. Dies kann möglicherweise Probleme verursachen, wenn z. Jeweils zwei Geräte fordern ein Gerät auf, einen Zähler zu erhöhen, und fordern gleichzeitig das Gerät auf, ihn zu dekrementieren. Wenn die beiden Master Bit für Bit identische Anforderungen senden, würde keiner die Schiedsgerichtsbarkeit verlieren, und daher würde jeder denken, dass seine Anforderung erfüllt wurde.

  3. ol>

    Die meisten I2C-Systeme enthalten nur ein Gerät, das jemals als Master fungieren kann, das Protokoll würde jedoch mehrere Geräte zulassen. Sofern nicht erwartet wird, dass ein Bus mehrere Master hat, ist es einfacher, ein Gerät zu implementieren, das erwartet, der einzige Master zu sein, als eines, das mit anderen Mastern auf dem Bus koexistieren kann.

Wie funktioniert die Busarbitrierung mit I2C?Senden I2C-Peripheriegeräte auf MCUs nicht blind, ohne auf Kollisionen zu achten?
@Navin: Jedes Gerät, das eine fallende Flanke bei SCL sieht, muss SCL niedrig halten, bis festgestellt wurde, was, wenn überhaupt, mit SDA zu tun ist, und jedes Mal, wenn der Master SCL freigibt, muss es warten, bis es tatsächlich hoch geht (Jeder hat es veröffentlicht), bevor er fortfährt.Wenn zwei Master gleichzeitig Startbedingungen schaffen, kann jeder denken, dass er den Bus hat (je nachdem, welcher schneller ist, würde warten, bis der andere nach jedem Bit SCL freigibt), bis einer versucht, eine 1 und der andere eine 0 zu senden, an welchem Punkt die 0würde gewinnen und das Gerät, das versuchte, eine 1 zu senden, würde aus dem Bus fallen.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...