Serial Periphial Interface (SPI)

Es ist lange her, dass ich den Post zu I²C geschrieben habe. Jetzt ist Zeit, dass Serial Periphial Interface (SPI) zu beleuchten, dass vom Raspberry Pi und den meisten anderen Single Board Computer und MicroControllern unterstützt wird.

Serial Periphial Interface

SPI wurde 1987 von Motorola zur Anbindung von Peripheriegeräten an einen Prozessor entworfen. Dies können Sensoren oder andere Geräte sein, die seriell kommunizieren.

Es ist ein bidirektionales Protokoll. Das nach dem Master/Slave Prinzip arbeitet.

Da ich diesen Begriff für veraltet halte, benutze ich lieber Controller für Master und Periphial für Slave.

Verschaltung

Um ein Peripheriegerät an den Controller anzuschliessen, werden mehrere Daten und Steuerleitungen benötigt. Diese sind

  • SCL – Das Clocksignal gibt den Takt für die Datenübertragung vor und gilt für alle Periphial gleich.
  • COPI – „Controller Out / Periphial In“, damit sendet der Controller Daten an ein Periphial. Auch diese Leitung teilen sich alle Geräte am Bus. In älteren Dokumenten heißt diese Leitung MOSI.
  • POCI – „Controller In / Periphial Out“, in der Umkehrrichtung sendet das Periphial hierüber Daten an den Controller. Die veraltete Bezeichnung ist MISO.
  • CS – „Chip Select“, damit wird gesteuert, welches Periphial gerade Daten sendet oder empfangen soll. Jedes Periphial hat seine eigene dedizierte CS Leitung. Diese wird veraltet mit SS abgekürzt.
Verschaltung von Peripheriegeräten mit dem Controller

Ein Periphial muss nicht von allen Steuerleitungen Gebrauch machen. Ein Display wird nur die Anzeigedaten entgegennehmen, aber nichts senden. Periphial 4 aus der Grafik oben könnte ein Sensor sein, der nur Daten liefert, aber keine erwartet.

Wie funktioniert SPI?

An der Grafik kannst du sehen, dass es beim Serial Periphial Interface anders als bei I²C immer nur einen Controller gibt.

Wenn dieser Daten an beispielsweise Periphial 2 senden will, setzt er CS2 auf low und sendet die Daten und sendet die Daten mit dem SCL Takt auf der COPI Leitung.

Umgekehrt setzt Periphial 2 CS2 auf low, wenn es Daten über CIPO zum Controller überträgt.

Die Übertragung geschieht seriell bitweise mit maximal 20MBt/sec.

Die CS-Leitung funktioniert wie ein Signal an einer Bahnstrecke: Sie legt fest, welcher Teilnehmer den Bus verwenden darf. Die eigentlichen Daten fahren dann gleichzeitig auf zwei getrennten Gleisen — COPI für die Richtung Controller → Periphial und POCI für Periphial → Controller.

Übertragungsweise

Im Gegensatz zu I²C gibt es bei SPI kein spezielles Datenformat, Periphial und Controller handeln die Übertragungsweise untereinander aus. Auch eine Busadresse gibt es nicht, da die Ansteuerung eines bestimmten Periphial über die CS Leitung geregelt wird.

Die Daten werden bitweise in der Mitte der Taktflanke übertragen, meist mit dem höherwertigen Bit zuerst (MSB= most significant bit). Das Periphial kann aber auf LSB (least significant bit) verlangen.

SPI einschalten

Um SPI überhaupt benutzen zu können, muss die Schnittstelle in der raspi-config auf dem Raspberry Pi aktiviert werden. Dies geschieht im Menüpunkt Interface Options >> SPI

Menüpunkt SPI in den Interface Options
Menüpunkt SPI in den Interface Options

Nach einem Neustart des Raspi steht das SPI dann zur Verfügung.

Fazit

SPI benötigt zwar zum Anschluss mehr Leitungen als I²C, ist aber auf Protokollebene einfacher zu implementieren, da das Adressmanagement wegfällt. Anderseits ist dadurch die Anzahl von Sensoren, die du an deinen SBC bzw. deine MCU anschließen kannst, begrenzt auf die Anzahl der zur Verfügung stehenden GPIO Pins für die CS Leitung.

Ein praktisches Beispiel zu SPI liefere ich schnellstmöglich nach.

Schreibe einen Kommentar

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert
Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
raspithek.de - Olli Graf
WordPress Cookie Hinweis von Real Cookie Banner