SPI: Das Kommunikationsprotokoll einfach und klar erklärt

Das ist ein vollwertiger Auszug aus dem Buch Elektronik und Heimautomation DIY.

SPI, kurz für Serial Peripheral Interface, wurde 1987 von Motorola entwickelt und benötigt vier Leitungen zur Kommunikation. Die Open Source Hardware Association betrachtet die traditionellen Bezeichnungen der SPI-Signale („Master“ und „Slave“) als veraltet und hat alternative Begriffe vorgeschlagen, die teils bereits genutzt werden. Obwohl viele Komponenten weiterhin die alten Begriffe verwenden, stelle ich euch hier die neuen Bezeichnungen vor, um mögliche Verwirrung bei Begriffen wie COPI und CIPO zu vermeiden.

Wie funktioniert SPI?

SPI wurde ursprünglich von Motorola entwickelt und zeichnet sich durch seine extrem hohe Geschwindigkeit von bis zu 20 Mbps und seine volle Duplexfähigkeit aus. Das bedeutet, dass Daten gleichzeitig gesendet und empfangen werden können. Während moderne Standards die Begriffe Controller und Peripheral verwenden, findet man in Datenblättern oft noch die veralteten Master/Slave-Bezeichnungen.

Die vier Leitungen des SPI-Busses

  • SCL (Serial Clock): Vom Controller (Master) ausgegebene Taktleitung.
  • MOSI (Master Output, Slave Input): Neu: COPI (Controller OUT, Peripheral IN).
  • MISO (Master Input, Slave Output): Neu: CIPO (Controller IN, Peripheral OUT).
  • CS/SS (Chip Select oder Slave Select): Wird vom Controller auf LOW gezogen, um ein spezifisches Peripheriegerät anzusprechen.
SPI Netzwerk Topologie

Das Clock Signal

Das Clock-Signal synchronisiert die Datenübertragung zwischen Controller und Peripheriegerät. Dabei wird pro Taktzyklus ein Datenbit übertragen, was als synchrone Datenübertragung bezeichnet wird, da ein gemeinsames Clock-Signal verwendet wird.

Die Eigenschaften des Clock-Signals bei SPI können durch zwei Parameter angepasst werden:

Taktpolarität (CPOL): Bestimmt, ob das Clock-Signal im Ruhezustand auf HIGH (1) oder LOW (0) ist.

Taktphase (CPHA): Legt fest, ob Daten am führenden (steigende oder fallende Flanke) oder am nachfolgenden Taktflankenrand erfasst werden.

Die Kombination dieser beiden Parameter definiert einen von vier SPI-Modi:

SPI-ModusCPOLCPHARuhepegel ClockDatenübernahme bei
Modus 00 – LOW0 – LOWLOWsteigender Flanke
Modus 10 – LOW1 – HIGHLOWfallender Flanke
Modus 21 – HIGH0 – LOWHIGHfallender Flanke
Modus 31 – HIGH1 – HIGHHIGHsteigender Flanke
SPI Operation Modi

Die Wahl des Modus hängt von der spezifischen Peripherie ab, mit der kommuniziert wird. Controller und Peripheriegeräte müssen denselben Modus verwenden, um die Datenübertragung korrekt durchzuführen.


Chip Select (CS/SS)

Im Gegensatz zu I²C nutzt SPI keine Adressierung. Stattdessen hat jedes Peripheriegerät eine eigene Chip Select Leitung. Will der Controller mit einem Gerät sprechen, zieht er dessen CS-Leitung auf LOW. Alle anderen Geräte bleiben auf HIGH und ignorieren den Bus-Verkehr.

SPI Chip Select Ablauf

Datenübertragung: MSB vs LSB

Daten werden Bit für Bit seriell übertragen. Standardmäßig sendet der Controller das MSB (Most Significant Bit) zuerst. Peripheriegeräte senden oft das LSB (Least Significant Bit) zuerst zurück, was jedoch im Einzelfall dem Datenblatt entnommen werden muss.

Most Significant Bit

1010011

Least Significant Bit

1100101

SPI ist besonders effizient, da die Daten ohne Start- oder Stopbits übertragen werden können, was eine unterbrechungsfreie Kommunikation ermöglicht.

SPI Clock polarity
SPI Clock Phase

SPI – Standard Pins der Mikrocontroller

MikrocontrollerSCLKMOSI / COPIMISO / CIPOCS / SS
ESP8266 / Wemos D1 MiniGPIO 14GPIO 13GPIO 12GPIO 15/13
ESP32GPIO 18GPIO 23GPIO 19GPIO 5
Arduino Nano / UNOD13D11D12D10
Arduino MegaD52D51D50D53
Unterstütze meine Projekte

Wenn dir dieser Beitrag geholfen hat, freue ich mich über einen kleinen Beitrag für die Kaffeekasse.