|

Raspberry Pi – SPI und I2C aktivieren

Serial Interfaces1 – Raspberry Pi – SPI und I2C aktivieren

Der Raspberry Pi besitzt ein ausgeklügeltes Daten-Bus-System, um mit anderen Geräten und Modulen kommunizieren zu können. Ob Sensoren, Displays, Echtzeit-Uhren oder andere Mikrocontroller – fast alle nutzen I2C, SPI oder UART. In diesem Artikel zeigen wir euch, wie ihr diese Schnittstellen unter Raspberry Pi OS Bookworm korrekt aktiviert und testet.

Serial-Interfaces

Was ist I2C?

I2C ist ein serielles Protokoll für ein zweiadriges Interface (Two Wire). Es verbindet Geräte wie EEPROMs, A/D- und D/A-Konverter, Sensoren, Displays und andere ICs über nur zwei Leitungen: SDA (Daten) und SCL (Takt). Ursprünglich von Philips entwickelt, wird es heute von nahezu allen IC-Herstellern verwendet.

i2c-bus

Was ist SPI?

Der Serial Peripheral Interface (SPI) Bus ist ein synchrones Datenbus-System, das von Motorola entwickelt wurde. Es funktioniert nach dem Master-Slave-Prinzip und wird für kurze Distanzen eingesetzt – typisch in Embedded-Systemen, Sensoren und SD-Karten.

SPI hat vier Signalleitungen:

  • SCLK: Serial Clock (Ausgang Master)
  • MOSI: Master Output, Slave Input
  • MISO: Master Input, Slave Output
  • SS/CE: Slave Select / Chip Enable (aktiv Low)

SPI

Was ist UART?

Der Universal Asynchronous Receiver Transmitter (UART) ist eine serielle Schnittstelle, die zum Senden und Empfangen von Daten dient. Die Besonderheit: Es wird kein eigenes Taktsignal benötigt – beide Seiten müssen einfach dieselbe Baudrate verwenden. UART wird oft für serielle Konsolen, GPS-Module oder Kommunikation mit Mikrocontrollern verwendet.

uart

GPIO-Pinbelegung für I2C, SPI und UART

Schnittstelle Signal GPIO-Pin (Board)
I2C SDA (I2C1) Pin 3
I2C SCL (I2C1) Pin 5
UART TX Pin 8
UART RX Pin 10
SPI MOSI Pin 19
SPI MISO Pin 21
SPI SCLK Pin 23
SPI CE0 Pin 24
SPI CE1 Pin 26

I2C und SPI aktivieren per raspi-config (empfohlen)

Der einfachste Weg ist das Konfigurationstool raspi-config. Öffnet ein Terminal und gebt ein:

Navigiert zu 3 Interface Options. Dort findet ihr:

  • I4 SPI – SPI aktivieren
  • I5 I2C – I2C aktivieren

Wählt die gewünschte Schnittstelle, bestätigt mit Yes und startet den Pi neu:

I2C und SPI aktivieren per config.txt (Headless / Bookworm)

Wer keinen Desktop verwendet oder headless arbeitet, kann die Schnittstellen direkt in der Konfigurationsdatei aktivieren. Seit Raspberry Pi OS Bookworm liegt diese unter /boot/firmware/config.txt (nicht mehr unter /boot/config.txt):

Fügt am Ende der Datei folgende Zeilen hinzu:

Speichert mit STRG+X, Y, Enter und startet neu:

Hinweis: Die früher verwendeten Methoden mit /etc/modules (i2c-bcm2708, spi-bcm2708) und /etc/modprobe.d/raspi-blacklist.conf existieren in Bookworm nicht mehr. Alles läuft jetzt über Device Tree Overlays in der config.txt.

I2C testen mit i2cdetect

Nach dem Neustart installiert ihr die I2C-Tools und prüft, ob ein angeschlossenes Gerät erkannt wird:

Die Ausgabe zeigt eine Matrix mit den I2C-Adressen aller gefundenen Geräte. Eine RTC wie der DS1307 erscheint z.B. unter Adresse 68:

Seht ihr keine Ausgabe, überprüft eure Verkabelung und ob I2C korrekt aktiviert ist.

SPI testen

Nach dem Aktivieren von SPI sollten die Gerätedateien vorhanden sein:

Ihr solltet /dev/spidev0.0 und /dev/spidev0.1 sehen. Ist das der Fall, ist SPI korrekt aktiv.

Python-Beispiel mit smbus2 (I2C)

Die alte Bibliothek i2c-bcm2708 aus früheren Anleitungen wird nicht mehr verwendet. Für Python nutzt ihr heute smbus2:

Ein einfaches Beispiel, das einen Wert von I2C-Adresse 0x68 (z.B. eine RTC) liest:

Tipp: Für komplexere I2C-Projekte lohnt sich ein Blick auf die Bibliothek adafruit-circuitpython-busdevice, die viele Sensoren out-of-the-box unterstützt.

UART aktivieren

Das Aktivieren von UART unterscheidet sich etwas von I2C und SPI, da beim Raspberry Pi standardmäßig die serielle Konsole auf dem UART liegt. Wie ihr UART korrekt einrichtet, haben wir in einem separaten Artikel beschrieben: UART auf dem Raspberry Pi aktivieren.

Ähnliche Beiträge