Bussysteme verbinden Peripherie-Geräte mit dem Controller. Damit der Aufwand der Verdrahtung möglichst gering bleibt, sollten so wenig Leitungen wie möglich verbaut werden. Aus dieser Grundüberlegung wurden in der Vergangenheit verschiedene serielle Zweidrahtbussysteme entwickelt, die für das Senden und Empfangen von Daten mit nur zwei Datenleitungen auskommen.
Das Serial Peripheral Interface (SPI) besteht aus zwei Datenleitungen und einer Taktleitung, über die das Peripheriegerät angeschlossen ist. Eine vierte Leitung dient als Auswahlleitung.
Die Bezeichnungen von Controller und Peripherie-Geräten waren historisch bedingt Master und Slave. Ich schließe mich der von 🔗arduino.cc vorgeschlagenen Terminologie an und verwende die neuen Namen.
Leider lässt sich dieses Prinzip nicht vollständig durchhalten, weil bei der Programmierung die historischen Namen verwendet werden.
Der SPI-Bus (Serial Peripheral Interface) benötigt zwei Datenleitungen und zwei Steuerleitungen (Taktleitung/Auswahlleitung):
Datenleitungen (in Klammern alternative Bezeichnungen)
Historische Namen | Verwendeter Name | Erklärung | Standard Pin UNO |
---|---|---|---|
MOSI | COPI (DO, SDA) | Controller Out, Peripheral In Daten vom Controller zum Peripherie-Gerät senden | 11 |
MISO | CIPO (SDI, DI, SI, DIN) | Controller In, Peripheral Out Daten vom Peripherie-Gerät empfangen | 12 |
Steuerleitungen (in Klammern alternative Bezeichnungen)
Historische Namen | Verwendeter Name | Erklärung | Standard Pin UNO |
---|---|---|---|
SLCK (CLK, SCK) | Serial Clock → Taktimpulse, dient der Synchronisation der Datenübertragung | 13 | |
SS | CS (CSB, CSN, STE, SYNC) | Chip Select Wird vom Controller aktiviert, um die Kommunikation mit einem Peripheriegerät zu starten | 10 |
Zusätzliche Pins (in Klammern alternative Bezeichnungen)
Bezeichnung | Erklärung | Standard Pin UNO |
---|---|---|
RES (RST, REST) | Reset des Bauteils | 8 |
DC (RS/AO) | Data Communication Daten Kommunikation | 9 |

Testprogramm für die SPI-Pins der Mikrocontroller
Das Testprogramm verwendet die historischen Namen des SPI-Busses, ich habe sie im Kopf des Programms auf die neuen Namen "umgelenkt".
// neue Namen verwenden
#define COPI MOSI
#define CIPO MISO
#define CS SS
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial);
delay(1000);
// SPI-Pins anzeigen
Serial.print("COPI: ");
Serial.println(COPI);
Serial.print("CIPO: ");
Serial.println(CIPO);
Serial.print("SCK: ");
Serial.println(SCK);
Serial.print("CS: ");
Serial.println(CS);
}
void loop()
{
// bleibt leer, Programm läuft nur einmal
}
Pins SPI-Bus verschiedener Mikrocontroller
Arduino UNO/Nano | ![]() |
ESP32-Wroom | ![]() |
ESP32-C6 | ![]() |
XIAO-ESP32-C3 | ![]() |
Wemos D1 Mini | ![]() |

Letzte Aktualisierung: