Raspberry Pi – SPI und I2C aktivieren

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.

Serial-Interfaces

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.

i2c-bus

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).

SPI

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.

uart

Aktivieren von SPI, I2C und UART

UPDATE 01/2015:
Mit dem Raspbian und Noobs Release vom Januar 2015 und dem Einsatz des neuen Kernel 3.18.x ändert sich das Vorgehen zum aktivieren von Geräten am Raspberry Pi. Lest hierzu den Beitrag zu den Änderungen mit Device Tree. Die FAQs werde ich Stück für Stück aktualisieren.

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.

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

Für SPI benötigen wir das Modul 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).

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

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).

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ß!