![]() |
Linux, PC und HardwareProf. Jürgen Plate |
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-Modus | CPOL | CPHA |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 2 | 1 | 0 |
| 3 | 1 | 1 |
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:
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.

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 Adressierung Adresse Teil 1 R/W-Bit Adresse Teil 2 11110
XX
X
1. ACK
XXXXXXXX
2. ACK
Weitere Informationen:
Jeder Chip besitzt eine eigene Zeitbasis, die die ankommenden Signale nach ihrem logischen Gehalt unterscheiden kann.
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 |