Für umfangreiche Projekte genügen die Anschlussmöglichkeiten der RasPI-GPIO-Schnittstelle oft nicht. Hier bietet der I
README
Viele RasPi-Projekte nutzen zur Kommunikation mit Aktoren oder Sensoren die GPIO-Schnittstelle. Doch diese ist in ihren Möglichkeiten limitiert. Mit dem I2C-Bus steht als Alternative ein industriell standardisierter Datenbus zur Verfügung, der sich mit den richtigen Tools leicht in eigene Projekte einbinden lässt. In dieser Artikelreihe erläutern wir den I2C-Bus des RasPi Schritt für Schritt.
Die leistungsfähige GPIO-Schnittstelle des Raspberry Pi nutzen Bastler für viele interessante Hardware-Projekte. Allerdings lassen sich einige Dinge via GPIO nicht oder nur in begrenztem Umfang umsetzen. Dazu gehören etwa analoge Ein- und Ausgaben, die die GPIO generell nicht unterstützt.
Auch das Vorhandensein von nur einem PWM-Ausgang erweist sich schnell als Bremsklotz. Software-Lösungen wie etwa ServoBlaster [1] bieten dafür zwar schnelle Abhilfe, doch auch diese sind nur von begrenztem Nutzen. Benötigen Sie für ein Projekt wirklich viele digitale IOs, dann stoßen Sie schnell an die Grenzen des Möglichen.
Eine einfache und professionelle Lösung für umfangreiche Projekte stellt der I2C-Bus dar. Auf der Platine des Raspberry Pi finden Sie zwei entsprechende Schnittstellen. In den folgenden Teilen dieser Artikelreihe beschäftigen wir uns mit verschiedenen Halbleitern, die alle eine Gemeinsamkeit aufweisen: eine Schnittstelle zum I2C-Bus.
Allgemeines
Beim I2C-Bus – man spricht das I-Quadrat-C aus – handelt es sich um einen seriellen Master-Slave-Bus, der sich für die Kommunikation über kurze Distanzen eignet, also hauptsächlich innerhalb von Platinen oder Geräten. Die Technik stammt aus den frühen 1980er-Jahren und wurde ursprünglich von Philips (heute NXP Semiconductors) für den Einsatz in der Unterhaltungselektronik entwickelt.
Die Datenübertragung erfolgt synchron über 2 Leitungen: eine Datenleitung (SDA) und eine Taktleitung (SCL). Beide Leitungen ziehen Pullup-Widerstände auf ein positives Potenzial. Ein Bus-Master gibt Takt und Betriebsmodus vor und initiiert die byteweise erfolgende Kommunikation. Die Übertragungsgeschwindigkeit des Busses beträgt zwischen 100 kbit/s bidirektional im Standard-Mode und bis zu 5 MBit/s unidirektional im Ultra-Fast-Mode (siehe Tabelle “I2C-Taktraten”).
I2C-Taktraten
|
Modus |
Maximale Übertragungsrate |
Richtung |
|---|---|---|
|
Standard-Mode |
100 kbit/s |
bidirektional |
|
Fast-Mode |
400 kbit/s |
bidirektional |
|
Fast-Mode Plus |
1 MBit/s |
bidirektional |
|
High-Speed-Mode |
3,4 MBit/s |
bidirektional |
|
Ultra-Fast-Mode |
5,0 MBit/s |
unidirektional |
Der I2C-Bus arbeitet mit einem Adressbereich von 7 Bit. Dadurch ergeben sich bis zu 128 Adressen, von denen allerdings 16 für Sonderaufgaben reserviert bleiben – es gibt also 112 freie Adressen. Das achte Bit teilt dem Slave mit, ob er Daten vom Master empfangen soll oder Daten an den Master zu übertragen hat.
Üblicherweise lassen sich nur die unteren Bits der Adressen an den Slaves frei wählen, die oberen Bits stehen fest. Die möglichen Adressen für einen Baustein entnehmen Sie am besten dem Datenblatt des fraglichen Produkts. Die Tabelle “I2C-Adressen” zeigt einige Beispiele zu den verschiedenen Adressbereichen.
I2C-Adressen
|
Typ |
Funktion |
Adresse |
|---|---|---|
|
PCF8574 |
Port-Expander |
0x20 – 0x27 |
|
PCF8574A* |
Port-Expander |
0x38 – 0x3F |
|
PCF8591 |
A/D- und D/A-Konverter |
0x90 – 0x9F |
|
PCF8583 |
Clock/Calendar |
0xA0 – 0xA2 |
|
* Der Typ A unterscheidet sich nur durch den Adressraum vom Standard-PCF8574. |
||
Benötigen Sie für ein größeres Projekt mehr als die 112 möglichen Adressen, dann sorgen Sie mit einem auf den primären I2C-Bus aufgesetzten Busmultiplexer für neue Adressierungsmöglichkeiten. Diesem speziellen Baustein widmen wir uns in einem der folgenden Teile dieser Reihe.
Aufgrund der ursprünglichen Konzeption, nur wenige Zentimeter überbrücken zu müssen, zeigt sich der I2C-Bus in der Praxis als sehr anfällig für Störungen. Es gibt allerdings verschiedene Möglichkeiten, die elektrischen Eigenschaften des I2C-Busses zu verbessern. Sie reichen vom Anpassen der Pullup-Widerstände bis zum Tunneln durch CAN-Bus-Treiber. In einigen der späteren Teile dieser Reihe setzen wir uns intensiver mit unterschiedlichen I2C-Bus-Treibern auseinander.
Testaufbau
Direkt auf der GPIO des Raspberry Pi finden Sie auch eine I2C Schnittstelle. Die Pins P1-03 (SDA_1) und P1-05 (SCL_1) besitzen sogar schon die benötigten Pullup-Widerstände (1,8 kOhm gegen +3,3 Volt). Eine zweite I2C-Schnittstelle erreichen Sie über den Verbinder P5, allerdings müssen Sie diese erst auf der Rückseite des Raspberry Pi auflöten. Die zweite Schnittstelle sprechen Sie über die Pins P5-3 (SDA_0) und P5-4 (SCL_0) an, es fehlen jedoch die vorbestückten Pullup-Widerstände.






