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.

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-Modus | CPOL | CPHA | Ruhepegel Clock | Datenübernahme bei |
|---|---|---|---|---|
| Modus 0 | 0 – LOW | 0 – LOW | LOW | steigender Flanke |
| Modus 1 | 0 – LOW | 1 – HIGH | LOW | fallender Flanke |
| Modus 2 | 1 – HIGH | 0 – LOW | HIGH | fallender Flanke |
| Modus 3 | 1 – HIGH | 1 – HIGH | HIGH | steigender Flanke |

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.

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
Least Significant Bit
SPI ist besonders effizient, da die Daten ohne Start- oder Stopbits übertragen werden können, was eine unterbrechungsfreie Kommunikation ermöglicht.


SPI – Standard Pins der Mikrocontroller
| Mikrocontroller | SCLK | MOSI / COPI | MISO / CIPO | CS / SS |
|---|---|---|---|---|
| ESP8266 / Wemos D1 Mini | GPIO 14 | GPIO 13 | GPIO 12 | GPIO 15/13 |
| ESP32 | GPIO 18 | GPIO 23 | GPIO 19 | GPIO 5 |
| Arduino Nano / UNO | D13 | D11 | D12 | D10 |
| Arduino Mega | D52 | D51 | D50 | D53 |
Wenn dir dieser Beitrag geholfen hat, freue ich mich über einen kleinen Beitrag für die Kaffeekasse.

