Startseite>ESP8266 Teil 4: Die SPI-Schnittstelle des ESP8266
Aus Raspberry Pi Geek 05/2016

ESP8266 Teil 4: Die SPI-Schnittstelle des ESP8266

© David Benes, 123RF

Immer der Reihe nach

Martin Mohr

Mittels SPI binden Sie schnell weitere Komponenten an einen ESP8266. Vorteile beim Verkabeln gehen aber unter Umständen durch komplexe Programmierung verloren.

Die GPIO des ESP8266 ist eine außerordentlich flexible Schnittstelle, aber keineswegs seine einzige. Auch über das SPI-Interface können Sie interessante Halbleiter ansteuern, unter anderem viele Displays. Um die Schnittstelle optimal zu nutzen, müssen Sie sich vorab mit deren Funktionsweise vertraut machen. Dabei hilft eine einfache Ausgabe über normale TTL-Schieberegister. Der Betrieb eines A/D-Wandlers über den SPI-Bus gerät da schon etwas komplexer.

SPI-Schnittstelle

Das Kürzel SPI steht für Serial Peripheral Interface. Wie der Name schon erkennen lässt, laufen die Daten seriell über den Bus. SPI stammt ursprünglich aus den Labors von Motorola. Da der Bus komplett frei von Lizenzen und Patenten ist, nutzen viele Halbleiterhersteller die Technik für ihre Bausteine.

Die Übertragung erfolgt synchron, sodass die Teilnehmer eine Leitung für das Taktsignal (SCLK) benötigen. Beim SPI-Bus steuert der Busmaster komplett die Kommunikation. Um den Teilnehmern zu signalisieren, dass Sie die auf dem Bus befindlichen Daten übernehmen dürfen, gibt es eine weitere Steuerleitung (CS). Die eigentlichen Daten laufen über zwei weitere Leitungen (MOSI, MISO). Die Tabelle “SPI-Bus” zeigt die nötigen Kanäle im Überblick.

SPI-Bus

Abkürzung

Bedeutung

SCLK

Serial Clock

MOSI

Master Output, Slave Input

MISO

Master Input, Slave Output

CS

Chip Select

SPI arbeitet prinzipiell wie ein Schieberegister, sodass man theoretisch beliebig viele Teilnehmer an den Bus hängen könnte. Es gibt keine Adressen, wie Sie sie unter Umständen von anderen Bussystemen her kennen. Einzig und alleine die Position des einzelnen Halbleiters ist entscheidend.

Dieses Prinzip setzt voraus, dass der Busmaster die Topologie des kompletten Busses genau kennt, da er sonst nicht in der Lage ist, die Daten nicht an die richtigen Positionen zu schieben. Sie dürfen daher die Reihenfolge der Teilnehmer nicht einfach verändern – das hätte Auswirkungen auf das Programm im Busmaster. Der Master schiebt die Daten so lange durch alle Teilnehmer hindurch, bis sie an der richtigen Position ankommen.

Der SPI-Bus kennt zwei Betriebsarten, das Kaskadieren der Halbleiter (“Daisy Chain”) und die Sternstruktur. Beim Kaskadieren, der häufigsten Form von SPI-Bussen, hängen alle Teilnehmer hintereinander. Sie schließen also die Ausgangsleitung des einen Halbleiters an den Eingang des nächsten an. Der Ausgang des letzten Halbleiters in der Kette kommt wieder an den Eingang des Busmasters. Die CS-Leitung schließen Sie an alle Teilnehmer parallel an.

Bei der Sternstruktur schalten Sie die zwei Datenleitungen (MOSI/MISO) der einzelnen Halbleiter parallel. Dabei steuern Sie über mehrere CS-Leitungen, welcher Halbleiter zum Einsatz kommt. Diese Art der Implementation kann schon bei wenigen Bauteilen alle Vorteile eines seriellen Bussystems komplett zunichte machen.

Das serielle Übertragen soll ja eigentlich die Zahl der Leitungen zwischen den unterschiedlichen Halbleitern minimieren, um das Layout simpel und kompakt zu halten und Platz auf den Platinen einzusparen. Viele CS-Leitungen bewirken exakt das Gegenteil. Zudem muss der Busmaster all diese zusätzlichen Steuerleitungen bereitstellen, was beim ESP8266 schnell zum Problem gerät: Er besitzt nur wenige I/O-Anschlüsse.

Um die Funktion des Busses zu verstehen, lohnt es sich, die Unterschiede zwischen I2C- und SPI-Bus zu kennen: So erhalten Sie ein besseres Gefühl dafür, welche der zwei Schnittstellen sich für ein bestimmtes Szenario besser eignet. Dazu haben wir im Kasten “SPI vs. I2C”) die wichtigsten Unterschiede zusammengestellt.

SPI vs. I<+>2<+>C

Da der Rechner beim SPI-Bus keine Adressdaten übertragen muss, erzielt er bei gleicher Taktfrequenz einen mindestens doppelt so hohen Durchsatz wie über den I2C-Bus. Geht es aber darum, einzelne Sensoren an einem langen Bus auszulesen, spielt I2C seine Vorteile aus: Damit lesen Sie gezielt die Informationen von einem einzelnen Teilnehmer aus oder schreiben Daten dorthin.

Der SPI-Bus müsste dagegen im Daisy-Chain-Betrieb einmal alle Teilnehmer auslesen und (im schlechtesten Fall) alle wieder beschreiben, um an einen Messwert zu gelangen. SPI kommt daher in der Regel bei Displays zum Einsatz, wo der Rechner viele Daten hintereinander schreibt und das Auslesen oder Schreiben einzelner Daten-Bytes eher selten bis gar nicht vorkommt.

Den I2C Bus verwenden Sie dagegen bei Anwendungen, bei denen der PC unregelmäßig Daten von einzelnen Teilnehmern liest oder an diese schreibt. Auch bei Änderungen der Topologie ist I2C im Vorteil. Solche kommen unter Umständen schneller vor als gedacht.

Denken Sie etwa an ein einfaches Gerät der Unterhaltungselektronik, das es in mehreren Versionen am Markt gibt: Je nach Version sind auf der sonst identischen Basisplatine bestimmte Halbleiter bestückt oder auch nicht – schon liegen unterschiedliche Topologien vor. Für den SPI-Bus müsste das Unternehmen für jede Variante eine passende Software bereithalten. Mit dem I2C-Bus wäre ein Programm in der Lage, alle Versionen zu unterstützen.

Schieberegister

Der im Folgenden beschriebene Testaufbau orientiert sich an jenem aus den letzten Teilen unseres ESP8266-Workshops. Die Spannungsversorgung und den Adapter, der USB auf die serielle Schnittstelle umsetzt, kennen Sie schon von dort. Auch die Arduino-IDE tritt wieder in Aktion. Einzig die SPI-Schnittstelle schließen wir neu an den ESP8266 an.

Für einen ersten Test kommen einfache TTL-Schieberegister (SN74HC595, siehe gleichnamiger Kasten) zum Einsatz. Der SPI-Bus ist ein langes Schieberegister. Der erste Aufbau ermöglicht es, ein Byte auf den Bus zu schreiben (Abbildung 1). Im um einen zusätzlichen SN74HC595 erweiterten Aufbau (Abbildung 2) sehen Sie, wie das Datenbyte durch den ersten Chip hindurch in den zweiten wandert (Abbildung 3).

Abbildung 1: Am ESP8266 ist lediglich ein Schieberegister angeschlossen.

Abbildung 1: Am ESP8266 ist lediglich ein Schieberegister angeschlossen.

Abbildung 2: Zwei Schieberegister am ESP8266 eröffnen die Möglichkeit, den Fluss der Daten zu verfolgen.

Abbildung 2: Zwei Schieberegister am ESP8266 eröffnen die Möglichkeit, den Fluss der Daten zu verfolgen.

Abbildung 3: Der Testaufbau mit zwei Schieberegistern in der Realität.

Abbildung 3: Der Testaufbau mit zwei Schieberegistern in der Realität.

SN74HTC595

Beim SN74HC595 handelt es sich um ein einfaches 8-Bit-Schieberegister. Die Daten laufen also seriell in das Register hinein, danach gibt es die Daten parallel wieder aus. Die Betriebsspannung des Halbleiters beträgt 2 bis 6 Volt, er hat einen sehr geringen Eigenstromverbrauch von nur wenigen Mikroampere. Der Strom pro Ausgang beträgt ±6 mA, was für einfache Leuchtdioden vollkommen ausreicht. Abbildung 4 zeigt die Pinbelegung des Registers, weitere Informationen liefert das Datenblatt [1].

Abbildung 4: Die Pinbelegung des SN74HC595.

Abbildung 4: Die Pinbelegung des SN74HC595.

Damit nun Leben in den Aufbau aus Abbildung 1 kommt, braucht es noch die passende Software. Das Programm aus Listing 1 sorgt dafür, dass alle acht LEDs im Sekundentakt blinken. Hierbei fällt auf, dass man die CS-Leitung komplett manuell steuern muss.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland