Linux, PC und Hardware


Prof. Jürgen Plate

Standard-Schnittstellen

Chip-Schnittstellen

Das Serial Peripheral Interface (SPI)

SPI wurde von Motorola (heute Freescale) entwickelt, jedoch nie standardisiert. Da SPI nie patentiert oder lizensiert wurde und einfach zu implementieren ist, hat es eine weite Verbreitung erlangt. SPI ist ein synchroner serieller Bus. Dieser ermöglicht die Anbindung von Peripheriekomponenten an einen Mikrocontroller. Auch die Verbindung mehrerer Mikrocontroller untereinander ist möglich. SPI erreicht hier sehr hohe Datenübertragungsraten, da das Taktsignal bis zu mehreren MHz betragen kann. Außerdem werden die Daten vollduplex in beide Richtungen gleichzeitig übertragen.

SPI ist als Master-Slave Bus ausgelegt, d. h. ein Master muss immer die Datenübertragung einleiten und den jeweiligen Slave selektieren. Der Master stellt auch das Taktsignal bereit. Die Daten werden auf zwei Datenleitungen übertragen. Diese werden mit MISO (Master-In Slave-Out, Dateneingang Master) und MOSI (Master-Out Slave-In, Datenausgang Master) bezeichnet. Jeder Slave besitzt ein Slave-Select–Signal oder Chip-Select–Signal (Low-Aktiv). Solange ein Slave nicht ausgewählt ist, sind Takt- und Datenleitunge im TriState-Mode. Synchron zum Taktsignal des Masters werden Informationen über die Datenleitungen ausgegeben. Master und Splave verhalten sich wie Schieberegister.

Je nach Aufgabenstellung weist ein SPI-Baustein eine unterschiedlich hohe Komplexität auf, die von einem einfachen Schieberegister bis hin zu einem eigenem Subsystem reicht. Hier zeichnet sich schon ein wichtiger Punkt ab, der bei der Konzeption eines SPI-Bussystems bzw. bei der Verarbeitung berücksichtigt werden muß: Die Länge der Schieberegister ist nicht fest definiert, sondern kann von Baustein zu Baustein verschieden sein. Normalerweise sind die Schieberegister acht Bit lang (oder ein ganzzahlig Vielfaches davon). Die empfangenen Daten liegen nach dem Datentransfer im gleichen Register wie die Sendedaten. Es existiert also nur ein Register für Sende-/Empfangsdaten.

Da es keine offizielle Spezifikation des SPI gibt, müssen gegebenenfalls die Datenblätter der verwendeten Bausteine zu Rate gezogen werden. Wichtig sind hierbei die erlaubte Taktfrequenz und die Art der gültigen Flanken. Bei welcher Taktflanke die Daten übernommen werden, ist nicht vorgeschrieben. In der Praxis haben sich vier Betriebsarten herausgebildet. Diese vier Betriebsmodi ergeben sich durch die Möglichkeit der Einstellungen von CPOL und CPHA.

SPI-ModusCPOLCPHA
000
101
210
311

Ist die Phase des Clocksignals gleich null, also CPHA=0, dann findet bei CPOL=0 die Datenübernahme bei steigender Taktflanke, bei CPOL=1 bei fallender Taktflanke statt. Ist CPHA=1, dann drehen sich die Polaritäten um. Bei CPOL=0 findet die Datenübernahme dann bei fallender Taktflanke und bei CPOL=1 bei steigender Flanke statt.

Bei den Mikrocontrollern von Frescale kann die Polarität und die Phase des Taktsignals eingestellt werden. Wird eine positive Polarität gewählt erfolgt die Übernahme bei steigender Taktflanke. Die Daten werden aber schon bei der fallenden Flanke auf die Datenleitung geschickt, um sicherzustellen, daß sie bei der Übernahme stabil vorliegen. Bei den meisten Peripheriebausteinen, die nur Slave sein können, kann man von dieser Konfiguration ausgehen.

SPI kennt verschiedene Modi, die über Konfigurationsregister eingestellt werden. Am häufigsten kommt der 3-Wire-Master-Slave-Modus vor. Hierbei werden nur die beiden Datenleitungen und die Taktleitung benötigt. Das Chip-Select- oder Slave-Select-Signal des Slaves liegt fest auf Masse. Damit ist der Slave immer angewählt und eskann kein weiterer Slave angesteuert werden.

Beim 4-Wire-Master-Slave- bzw. 4-Wire-Multi-Master-Modus existiet zusätzlich noch ein Slave-Select-/Chop-Select-Signal vom Master. Dieser wählt vor dem Datentransfer den Slave aus, mit dem er kommunizieren will. Der Multi-Master-Modus wird hauptsächlich verwendet, wenn zwei Mikrocontroller miteinander verbunden sind. Hier kann jeder Mikrocontroller einen Datentransfer einleiten. Während eines Datentransfers ist einer als Master und einer als Slave konfiguriert. Im Ruhezustand verhalten sich beide als Slave. Die Umschaltung erfolgt automatisch.

Die SPI-Peripheriebausteine lassen sich in folgende Kategorien unterteilen:

In den ersten drei Kategorien sind die meisten Bausteine zu finden. Die Auswahl bei den Analog/Digital- und Digital/Analog-Wandlern ist gross. Die Auflösung der Wandler reicht von 8 bis 24 Bit (am häufigsten 8, 10, 12 und 16 Bit), wobei die Taktfrequenz zwischen 30.000 und 600.000 Samples/s liegt. Die Kapazität der Speicherbausteine reicht von einigen Bits bis hin zu 64 KBit. Bei den Speichern kann eine Taktfrequenz von bis zu 3 MHz errreicht werden.

Durch den SPI-Bus ist ein Embedded System recht einfach erweiterbar. Das Embedded System selbst bildet dabei den SPI-Master. Die Programmierung einer SPI-Schnittstelle unter Linux ist sehr einfach, weil in der Regel nur parallele E/A-Bits benötigt werden. Somit sind nur die elementaren E/A-Funktionen notwendig, um aus einem Linux-Programm auf einen SPI-Slave zuzugreifen. Einziger Nachteil: die Leitung zwischen E/A-Port und Peripherie sollte höchstens einige Zentimeter betragen. Man kann aber tricksen und RS232- oder RS485-Pegelwandler einsetzen, um die Verbindung zu verlängern.

I2C-Bus

Philips entwickelte Anfang der 90er Jahre diese serielle bidirektionale Zweidraht-Schnittstelle für die Kommunikation zwischen verschiedenen ICs in elektronischen Systemen. Daher auch der Name "Inter-IC-Bus", kurz "IIC-Bus", "I2C-Bus" oder "I2C-Bus". Das Interface besteht aus den beiden Signalleitungen SDA (serial data) und SCL (serial clock) sowie einer gemeinsamen Masseleitung (ground). Am Bus können mehrere Teilnehmer angeschlossen werden. Jeder der Teilnehmer hat eine vorgegebene sieben Bit lange Adresse (das achte Bit entscheidet, ob gelesen oder geschrieben wird). In den meisten Fällen kontrolliert ein Master die verschiedenen Slaves. Es ist aber auch möglich, mehrere Master an einen I2C-Bus anzuschließen. In der Praxis kann an einen Microcontroller ein ganzes Netzwerk von Chips mit nur zwei I/O-Pins angeschlossen werden, die sich mit einfacher Software steuern bzw. für bestimmte Funktionen nutzen lassen. Das folgende Bild zeigt schematisch die Möglichkeiten, verschiedener Standardbausteine.

Anfangs betrug die Übertragungsrate nur 100 kBit/s bei einer zulässigen Bus-Kapazität von 400 pF. Den ständig steigenden Leistungsanforderungen folgend, wurde die Übertragungsrate 1992 auf 400 kBit/s und und 1998 auf 3,4 Mbit/s angehoben. Ein weiterer großer Vorteil des I2C-Busses besteht darin, dass auch deutlich langsamere Busteilnehmer am Bus betrieben werden können. Als Standard für eine abgesenkte Übertragungsrate haben sich 10 kBit/s eingebürgert. Da keine festen Taktzeiten eingehalten werden müssen, können sowohl langsame als auch sehr schnelle Busteilnehmer eingesetzt werden. Mit Hilfe neuer Expansions- und Steuerungs-Bauelemente kann der I2C-Bus inzwischen über die 400-pF-Grenze hinaus erweitert werden. Dadurch können Entwickler mehr Chips sogar mehrere identische ICs mit der selben Adresse anschließen und flexibel auf die steigende Zahl von I2C-Bauelementen reagieren.

Ein Teilnehmer kann nur Empfänger oder Sender und Empfänger sein. Der Master kontrolliert die Datenflussrichtung und gibt mit dem Clock-Signal die Übertragungsgeschwindigkeit vor. Die SDA- und die SCL-Leitung werden mit Pull-Up-Widerständen versehen. Die Bus-Teilnehmer sind mit Open-Drain-Schaltungen an den Leitungen angeschlossen und ziehen im aktiven Zustand die Leitungen gegen GND. Der Bus-Master initiiert eine Schreib- oder Lesesequenz. Dabei beginnt jede Übertragungssequenz mit einer sogenannten Start-Bedingung (SDA geht vor SCL auf 0) und endet mit einer sogenannten Stop-Bedingung (SCL geht vor SDL auf 1):

Nach der Startbedingung folgt ein Byte mit der Slave-Adresse (Bit 1 bis 7) und dem Read/Write-Bit (Bit 0), das angibt, ob zum Slave geschrieben wird (0) oder von ihm gelesen werden soll (1). Die Kommunikation beginnt immer mit einer Schreibsequenz des Masters. Soll der Slave Daten liefern, folgt anschließend eine Lesesequenz. Nach Senden der Startbedingung gibt der Master das Adressbyte mit R/W = 0 aus. Der Slave antwortet mit ACK (er zieht während Bit 9 der SDA-Leitung auf 0). Danach sendet der Master ein oder mehrere Datenbytes. Nach jedem Datenbyte gibt der Slave eine Bestätigung (ACK) durch LOw-Pegel auf SDA. Die Übertragung endet mit einer Stop-Bedingung. Das Lesen von Daten erfolgt nach dem gleichen Schema.

Das erste Byte, das der Master nach der Startbedingung verschickt, ist die Adresse des angesprochenen Slaves. Die ursprüngliche 7-Bit-Adressierung ermöglicht bis zu 128 (27) Geräte an einem Bus. Damit man nicht nur ein IC eines Typs am Bus haben kann, sondern bei Bedarf auch mehrere, sind bei den meisten Bausteinen die drei unteren Adressbits einstellbar. Dadurch kann man bis zu acht ICs derselben Bauart an den Bus schalten. Eine Adresse besteht somit oft aus einem festen Teil und einer 3-Bit-Subadresse. Das achte Bit des ersten Bytes gibt die Datenrichtung an - es legt fest, ob der Master Daten empfangen oder schicken möchte (R/W-Bit).

Einige Adressen wurden reserviert, um den Bus ausbaufähig zu halten oder um Problemen vorzubeugen.

Adresse R/W Bit Beschreibung
0000000 0 General Call Adresse
0000001 X CBUS Adresse
0000010 X Reserviert für ein anderes Busformat
0000011 X Für zukünftige Erweiterungen reserviert
00001XX X Für zukünftige Erweiterungen reserviert
11111XX X Für zukünftige Erweiterungen reserviert
11110XX X 10-Bit Adressierung

So gibt es kaum eine der dann noch möglichen 112 Adressen, die nicht doppelt oder dreifach belegt sind. Aus diesem Grund wurde später ein erweiterter Addressierungsmodus eingeführt, der 10-Bit-Adressen erlaubt. Durch die Reservierung der Adressen 1111 0XX und des R/W-Bits dieser Adresse, werden mögliche 7-Bit-Bausteine am Bus nicht gestört. Es können sogar 7- und 10-Bit-Komponenten an einem Bus betrieben werden. Jedoch gibt es nicht viele ICs mit einer solchen Adresse.

1. Byte  2. Byte 
10-Bit AdressierungAdresse Teil 1R/W-BitAdresse Teil 2
11110 XX X 1. ACK XXXXXXXX 2. ACK

Weitere Informationen:

Der 1-Wire-Bus

Dieser auch MicroLAN genannte Bus wurde von Dallas Semiconductor entwickelt. Er besitzt nur eine einzige Datenleitung, über die alle Aktionen durchgeführt und die 1-Wire-Chips mit Energie versorgt werden. So benötigt der 1-Wire-Bus zwar nicht nur einen, sondern zwei Drähte (Datenleitung und natürlich Masse). Die Form der Energieübertragung bei diesem Bus heißt "parasitic power": Wenn gerade keine Daten übertragen werden, saugt sich der Chip seine Energie aus der aktiven Leitung und speichert sie in einem kleinen Kondensator, der während der Sendeaktivität zur Überbrückung dient.

Jeder Chip besitzt eine eigene Zeitbasis, die die ankommenden Signale nach ihrem logischen Gehalt unterscheiden kann.

Der zeitliche Abstand zwischen beiden Zuständen ist groß genug, um eventuelle Produkttoleranzen zu überbrücken. Der 1-Wire-Bus ist also ein PWM-kodiertes Bussystem. Der Bus unterstützt bis zu 2,8*1014 verschiedene Chips der gleichen Familie. Zur Unterscheidung besitzt jedes Chip eine eindeutige 64 Bit lange Identifikationsnummer: eine 8-Bit-CRC-Prüfinfo, eine 48-Bit-Seriennummer und einen 8-Bit-Family-Code. Der erste Dallas-Chip war ein (serielles) ROM, das nur die obige Information enthielt (DS2401) und den Chip zu einer Art elektronischer Seriennummer zum Beispiel für Leiterplatten oder andere elektronische Geräte machte. Neben diesen reinen ID-Chips existiert eine recht große und stetig wachsende Anzahl von verschiedensten 1-Wire-Chips, angefangen vom einfachen EEPROM über Echtzeituhren mit Eventcounter, Temperatursensoren bis hin zum leistungsfähigen Mehrfach-Analog-Digitalwandler.

Der Busmaster kann unter anderem eigenständig nach allen mit dem Bus verbundenen Chip-IDs suchen oder allen angeschlossenen Chips gleichzeitig einen Befehl schicken. Je mehr Slaves sich in einem seriellen Bus befinden, desto stärker wird er durch den Datenfluss elektrisch und informationstechnisch belastet -- die Chips sind ja zur Versorgung auf eine Mindestpausenzeit angewiesen. Abhilfe schaffen beim 1-Wire-Bus spezielle Busteilerbausteine, die den Bus in mehrere kleinere Äste unterteilen. Für den Einsatz in Zahlungssystemen und industriellen Zugangskontrollen wurde eine Art elektronischer Metall-Tablette mit der Bezeichnung "iButton" entwickelt, die äußerst widerstandsfähig gegenüber äußeren Einflüssen ist, Info unter http://www.ibutton.com).

Zum vorhergehenden Abschnitt Zum Inhaltsverzeichnis Zum nächsten Abschnitt

Copyright © FH München, FB 04, Prof. Jürgen Plate
Letzte Aktualisierung: 26. Okt 2008