Raspberry Pi – SPI und I2C aktivieren

Erstellt am 14. Dezember 2014 von At2oo1

Der Raspberry Pi besitzt ein ausgeklügeltes Daten-Bus-System um mit anderen Systemen und Geräten kommunizieren zu können. Vielen von euch sind sicherlich die Namen I2C, SPI und UART schon mal in dem Ein oder Anderen Artikel oder Projekt begegnet, heute möchte ich euch daher kurze eine Einführung in die Unterschiede eben und zeigen wie SPI, UART und I2C am Raspberry Pi aktiviert werden können.

Beim Modell B / B+ sind die I2C, UART und SPI Pins auf der GPIO Leiste P1:

  • I2C0 SDA – PIN 3 bei der Revision 2 ist es I2C1 SDA
  • I2C0  SCL – PIN 5 bei der Revision 2 ist es I2C1 SDA
  • UART0 TX – PIN8
  • UART0 RX – PIN10
  • SPI MOSI – PIN19
  • SPI MISO – PIN 21
  • SPI SCLK – PIN23
  • SPI CS0 – PIN24
  • SPI SC1 – PIN26

Was ist I2C?

I2C ist ein serielles Protokoll für ein zweiadriges (Two Wire) Interface. Es wird dazu verwendet um Geräte wie EEPROMs, A/D- und D/A Konverter, I/O Interfaces und andere Geräte in einer miteinander zu verbinden. Ursprünglich wurde das Protokoll von Philips entwickelt und wird nun nahezu von allen IC Herstellern verwenden.

Was ist SPI?

Der Serial Peripheral Interface (kurz SPI) Bus ist ein synchrones Datenbus-Systemen das von Motorola entwickelt wurde mit dem digitale Schaltungen nach dem Master-Slave-Prinzip miteinander verbunden werden können. Der Bus wird für kurze Distanzen verwenden und findet zum Beispiel in Embedded Systemen, Sensoren und SD Karten seinen Einsatz.

Der SPI hat vier logische Signale

  • SCLK : Serial Clock (output from master).
  • MOSI : Master Output, Slave Input (output from master).
  • MISO : Master Input, Slave Output (output from slave).
  • SS : Slave Select (active low, output from master).

Was ist UART?

Der Universal Asynchronous Receiver Transmitter, kurz UART , ist eine elektronische Schaltung, die zur Realisierung digitaler serieller Schnittstellen dient. Eine UART-Schnittstelle dient also zum Senden und Empfangen von Daten und bildet den Standard der seriellen Schnittstellen an Computern und Mikrocontrollern. Auch im industriellen Bereich ist die Schnittstelle mit verschiedenen Interfaces wie zum Beispiel RS-232 verbreitet. Die Besonderheit besteht darin, dass bei der asynchronen Betriebsweise kein eigenes Taktsignal auf einer Übertragungsleitung verwendet wird.

Aktivieren von SPI, I2C und UART

Um die Schnittellen am Raspberry Pi benutzen zu können müssen wir das entsprechend passende Kernel Modul laden, hier zeige ich euch wie die Module für die beiden Schnittstellen SPI und UART bei jedem Start des Raspberry Pi automatisch geladen werden. Zentraler Dreh- und Angelpunkt ist hierbei die Datei /etc/modules welche wir mit dem Editor nano bearbeiten.

sudo nano /etc/modules

Um die Kernel Module bei jedem Start automatisch zu laden fügen wir entsprechend der Schnittelle folgende Zeilen am Ende der Datei hinzu:

Für I2C benötigen wir die Module i2c-dev und i2c-bcm2708

i2c-dev
i2c-bcm2708

Für SPI benötigen wir das Modul spi-bcm2708

spi-bcm2708

Gespeichert wird bei Nano mit STRG+X, Y und Enter.

Danach müssen wir noch die Datei /etc/modprobe.d/raspi-blacklist.conf ändern, diese verhindert noch das die Kernel Module bei jedem Start geladen werden (da viele Benutzer die Schnittelle bzw. die Module nicht benötigen wurden diese auf die Blacklist gesetzt).

sudo nano /etc/modprobe.d/raspi-blacklist.conf

Ihr könnt entweder die beiden Zeilen aus der Datei löschen oder durch auskommentieren (voranstellen einer # (Raute)) unwirksam machen.

Für i2c das Modul ” i2c-bcm2708″ aus der Blacklist entfernen
Für SPI das Modul “spi-bcm2708″ aus der Blacklist entfernen

Ich habe beide aktiviert und daher auch beide auskommentiert

#blacklist spi-bcm2708
#blacklist i2c-bcm2708
blacklist snd-soc-pcm512x
blacklist snd-soc-wm8804

Speichern wieder mit STRG+X, Y und enter.

Nun könnt ihr euren RasPi neustarten oder die Module mit modprobe manuell aktivieren. Das manuelle aktivieren könnt ihr, wenn ihr die Kernel Module nicht bei jedem Start automatisch mit laden wollt, nach Bedarf anwenden (in diesem Fall müssen die Module nicht in die /etc/modules eingetragen werden).

sudo modprobe i2c-bcm2708 
modprobe i2c-dev
sudo modprobe spi-bcm2708

Das Aktivieren und Einrichten von UART unterscheidet sich zu den beiden gezeigten, das habe ich euch daher in meinem Artikel – UART auf dem Raspberry Pi aktivieren – erklärt.

Viel Spaß!