Protokolle: SPI-Kommunikation

SPI steht für “Serial Peripheral Interface” und findet häufig den Einsatz bei Sensoren, welche mit einem Master (Mikrocontroller) kommunizieren. Gängige Beispiele für Sensoren, welche eine SPI-Schnittstelle besitzen sind zum beispiel die folgenden:

Ein besonderer Vorteil von SPI ist die Tatsache, dass Daten ohne Unterbrechung übertragen werden können. Es können beliebig viele Bits in einem kontinuierlichen Strom gesendet oder empfangen werden. Bei I2C und UART werden Daten in Paketen gesendet, die auf eine bestimmte Anzahl von Bits begrenzt sind. Start- und Stoppbedingungen definieren den Anfang und das Ende jedes Pakets, so dass die Daten während der Übertragung unterbrochen werden.

Geräte, die über SPI kommunizieren, stehen in einer Master-Slave-Beziehung. Der Master ist das Steuergerät (in der Regel ein Mikrocontroller), während der Slave (in der Regel ein Sensor, eine Anzeige oder ein Speicherchip) Anweisungen vom Master entgegennimmt. Die einfachste Konfiguration von SPI ist ein einzelnes Master- und Single-Slave-System, aber ein Master kann mehr als einen Slave steuern (mehr dazu später).

Die Leitungen haben dabei die folgende Bedeutung:

  • MOSI: Master out Slave in (Daten werden Master zum Slave übertragen)
  • MISO: Master in Slave out (Daten werden vom Slave zumn Master übertragen)
  • SCLK: Clock (Tackt der Datenübertragung)
  • SS/CS: Slave Select / Chip Select) Auswahl des Slaves mit welchem kommuniziert werden soll.

Eigenschaften:

Anzahl der Leitungen4
Max. Übertragungsgeschwindigkeitbis zu 10 Mb/s
Synchron oder Asynchron Synchron
Parallel oder Seriellseriell
Max. Anzahl an Mastereinheiten1
Max. Anzahl an Slaveeinehteintheoretisch unbegrenzt

Der Ablauf:

Tackt:

Das Taktsignal synchronisiert die Ausgabe von Datenbits vom Master mit dem Abtasten von Bits durch den Slave. Ein Bit von Daten wird in jedem Taktzyklus übertragen, so dass die Geschwindigkeit der Datenübertragung durch die Frequenz des Taktsignals bestimmt wird. Die SPI-Kommunikation wird immer vom Master initiiert, da der Master das Taktsignal konfiguriert und erzeugt.

Jedes Kommunikationsprotokoll, bei dem sich Geräte ein Taktsignal teilen, wird als synchron bezeichnet. SPI ist ein synchrones Kommunikationsprotokoll. Es gibt auch asynchrone Methoden, die kein Taktsignal verwenden. So werden beispielsweise bei der UART-Kommunikation beide Seiten auf eine vorkonfigurierte Baudrate eingestellt, die die Geschwindigkeit und den Zeitpunkt der Datenübertragung bestimmt.

Das Taktsignal in SPI kann über die Eigenschaften von Taktrichtung und Taktphase verändert werden. Diese beiden Eigenschaften arbeiten zusammen, um zu definieren, wann die Bits ausgegeben und wann sie abgetastet werden. Die Taktrichtung kann vom Master so eingestellt werden, dass Bits ausgegeben und entweder bei steigender oder fallender Flanke des Taktzyklus abgetastet werden können. Die Taktphase kann so eingestellt werden, dass die Ausgabe und Abtastung entweder auf der ersten oder zweiten Flanke des Taktzyklus erfolgt, unabhängig davon, ob sie ansteigt oder fällt.

Slave Select:

Der Master kann wählen, mit welchem Slave er kommunizieren möchte, indem er die CS/SS-Leitung des Slaves auf einen niedrigen Spannungspegel stellt. Im Ruhezustand, nicht sendend, wird die Slave-Select-Leitung auf einem hohen Spannungsniveau gehalten. Auf dem Master können mehrere CS/SS-Pins verfügbar sein, so dass mehrere Slaves parallel geschaltet werden können. Wenn nur ein CS/SS-Pin vorhanden ist, können mehrere Slaves durch Daisy-Chaining mit dem Master verbunden werden.

Verschaltung mehrer Slaves:

SPI kann neben der Vrbindung von nur einem Slave mit einem Master auch so eingesetzt werden, dass mehrere Slaves an einem Master angebunden sind. Es gibt zwei Möglichkeiten, mehrere Slaves an den Master anzuschließen. Wenn der Master über mehrere Slave-Select (SS/SC) verfügt, können die Slaves wie folgt parallel geschaltet werden:

Wenn nur ein Slave-Select-Pin verfügbar ist, können die Slaves wie folgt hintereinander geschaltet werden:

MISO und MOSI:

Der Master sendet Daten bitweise, seriell über die MOSI-Leitung an den Slave. Der Slave empfängt die vom Master gesendeten Daten am MOSI-Pin. Daten, die vom Master an den Slave gesendet werden, werden in der Regel mit dem höchstwertigen Bit zuerst gesendet.

Der Slave kann auch Daten über die MISO-Leitung seriell an den Master zurücksenden. Die vom Slave an den Master zurückgesendeten Daten werden in der Regel mit dem niederwertigsten Bit zuerst gesendet.

Reihenfolge bei der SPI-Datenübertragung:

  1. Der Master gibt das Taktsignal aus:

2. Der Master zieht zur Auswahl des Slaves die “Slave Select”-Leitung auf GND Potential:

3. Der Master sendet die Daten bitweise an den Slave über die MOSI-Leitung. Der Slave liest die Bits, während sie empfangen werden:

Bei einer Antwort sendet der Slave bitweise Daten an den Master entlang der MISO-Leitung. Der Master liest die Bits, während sie empfangen werden:

Vorteile von SPI:

  • Keine Start- und Stoppbits, so dass die Daten kontinuierlich und ohne Unterbrechung gestreamt werden können.
  • Kein kompliziertes Slave-Adressiersystem wie bei I2C
  • Höhere Datenübertragungsrate als bei I2C (fast doppelt so schnell)
  • Separate MISO- und MOSI-Leitungen, so dass Daten gleichzeitig gesendet und empfangen werden können.

Nachteile von SPI:

  • Verwendet vier Leitungen (I2C und UART verwenden zwei)
  • Keine Bestätigung, dass die Daten erfolgreich empfangen wurden.
  • Keine Form der Fehlerprüfung wie das Paritätsbit in UART (CRCs können in SW implementiert werden)
  • Erlaubt nur einen einzigen Master