|
|
||
|
|
||
| seriell, synchron | ||
| SPI -Schnittstelle | ||
|
|
||
| Das Serial Peripherial Interface (SPI) | ||
|
Das
Serial Peripherial Interface kurz SPI (von Motorola) oder
Microwire (von National Semiduktor) stellen einen synchronen
seriellen Schnittstellentyp dar, bei dem folgende
Übertragungsleitungen vorhanden sind ..
Takt (Clock | SCLK -serial Clock) DataOut (SDO | MOSI -Master Out Slave In) DataIn (SDI | MISO -Master In Slave Out) Der Master ist dabei der Baustein, der den Takt generiert. Sind mehrere Sklaven vorhanden, werden diese an den obigen Signalleitungen parallel angeschlossen. Zu Ihrer Auswahl muss jeder Sklave durch durch eine zusätzliche Signalleitung vom Master her ein- bzw. abschaltbar sein. Diese Leitung wird typischerweise mit Slave Select Leitung bezeichnet. Freigabe (SS -Slave Select | CS -Chip Select | STE -Slave Transmit Enable)
Zur Datenübertragung wählt der Master einen Sklaven über die Freigabeleitung SS aus. Dieser lauscht nun in die Leitung MOSI und übernimmt mit jedem Taktschlag des Masters ein Bit der Datenleitung. Zugleich kann er mit den Taken des Masters seine Datenbits auf die Leitung MISO legen, die wiederum der Masten mit jedem seiner Takte auswertet. Normalerweise stammen die Daten aus einem Schieberegister und werden auf der Empfängerseite wieder in ein solches übertragen. Welches Bit hierbei als erstes herausgeschoben wird, ist nicht festgelegt. Häufig ist es das höchste Bit, was als erstes auf der Datenleitung erscheint, also MSB first, Most Significant Bit als erstes. Ist eine Übertragung abgeschlossen, so kann der Slave dies an der Rücknahme des Slave Select SS -Signals feststellen. Löst dieses Signal hierbei einen IRQ aus, kann nun sein Schieberegister parallel ausgelesen werden. |
||
|
Für
die konkrete Art und Weise der Übertragung gibt es kein
festgelegtes Protokoll. So ist nicht allgemein geklärt,
welches der Ruhezustand des Taktes ist, zu welcher Taktphase die
Daten auf den Datenleitungen gültig sein müssen
(positiv / negative Flanke), oder welches Datenbit, niedriges
(LSB) oder hohes (MSB), als erstes auf den Datenleitungen
erscheinen soll. Auch die Anzahl der zu sendenden Datenbits oder
gar Übertragungs-Kontrollmechanismen wurden bei dieser
Schnittstelle nicht vereinbart. Der Master bekommt also nicht
mit, wenn sich auf der Gegenstelle kein Slave befindet. Derartige
Wünsche müssen 'nachgerüstet' werden.
Positiv an diesem Bus ist die geringe Anzahl der benötigten Leitungen für einen Zweirichtungsbetrieb (Vollduplex), solange nur zwei Bausteine angeschlossen sind und die hohe Übertragungsgeschwindigkeit, die wegen des fehlenden Protokoll-Überhangs möglich ist. Der Takt kann bis in den MHz-Bereich reichen. Es gibt sogar Controller, die für diesen Bus den Multimasterbetrieb unterstützen. |
||
|
Modi
Einige
Protokollabsprachen sind in den folgenden Betriebsmodi
zusammengefasst. Zudem bieten einige Sklaven- bzw.
Masterbausteine durch zusätzliche Steuersignale die
Möglichkeit ihre Protokolle (sprich Modi) aufeinander
abzustimmen. Diese Signale können nachfolgende Bezeichnungen
tragen ..
Data Order DORD: 0 -das MSB (Bit7) wird als erstes Bit gesendet. 1 -das LSB (Bit0) wird als erstes Bit gesendet Clock Polarity CPOL: 0 -Ruhezustand des Taktes bei LOW 1 -Ruhezustand des Taktes bei HIGH Clock Phase CPHA: 0 -Übernahme von Daten bei 1. Taktflanke 1 -Übernahme von Daten bei 2. Taktflanke Die Modi beziehen sich dabei auf die Einstellungen der Polarität des Taktes und die Taktphase, bei welcher die Übernahme der Daten zu geschehen hat. In Bezug auf die Daten Abfolge ist es noch immer möglich das MSB oder das LSB zuerst zu senden. SPI-Mode 0 (0|0) CPOL= 0 => Ruhezustand des Taktes bei log 0 CPHA= 0 => Übernahme bei 1. Flanke (ansteigender Flanke) SPI-Mode 1 (0|1) CPOL= 0 => Ruhezustand des Taktes bei log 0 CPHA= 1 => Übernahme bei 2. Flanke (abfallender Flanke) SPI-Mode 2 (1|0) CPOL= 1 => Ruhezustand des Taktes bei log 1 CPHA= 0 => Übernahme bei 1. Flanke (abfallender Flanke) SPI-Mode 3 (1|1) CPOL= 1 => Ruhezustand des Taktes bei log 1 CPHA= 1 => Übernahme bei 2. Flanke (ansteigender Flanke) Weitere Einstellmöglichkeiten betreffen das Slave-Select Signal. Auch bei diesem muss geklärt und gegebenenfalls eingestellt werden, welches sein Ruhezustand ist und bei welcher Taktflanke ein IRQ ausgelöst werden kann. |
||
|
Ein
Beispiel
In dem
folgenden Beispiel, das sich auf einen Temperatursensor mit SPI-
Masterschnittstelle bezieht, ist der aktive Zustand des Taktes
ein log.0-Signal. Das bedeutet, während der Zeiten mit
log.1-Signal macht es keinen Sinn die Datenleitungen zu lesen,
der Takt befindet sich im Ruhezustand. Während dieser Zeiten
werden vom Master die Datenausgänge vorbereitet.
Master Out Slave In Setzt der Master das Taktsignal von 1 auf 0, wird .. dem Sklaven signalisiert, dass der Master die log.0 oder 1 eines Datenbits auf die Datenleitung gelegt hat. Liest der Sklave nun die Datenleitung (MOSI), kennt er das übermittelte Datenbit. Kurze Zeit nach der Inaktivierung der Taktleitung, also nachdem die Taktleitung ihr Signal von log.0 auf log.1 wechselt, befindet sich die Datenleitung wieder in einem undefinierten Zustand. Die Datenleitung kann also sowohl durch einen IRQ als auch durch Polling gelesen werden. Die nach der zweiten Flanke zu lesende 0 oder 1 besitzt keinen definierten Zusammenhang mehr. Erst wenn wiederum das Taktsignal aktiv wird, macht es für den Sklaven wieder Sinn, die Datenleitung zu lesen. Auf diesem Weg können beliebig viele Datenbits übertragen werden. Bei Controllern sind es meistens und je nach Einstellung 1- maximal 8 Bits. Das Protokoll der Daten Welche Information die übermittelte Bitfolge beinhaltet, ist eine Frage des Protokolls. Es muss zwischen dem Sender und den Empfänger geklärt worden sein, wie viele Bits zu einer Informationseinheit zusammengefasst werden sollen, in welcher Reihenfolge die Bits gesendet werden, und welche Bedeutung die Informationseinheiten besitzen sollen. Typischerweise werden die Informationseinheiten Bytes, also 8 Bit umfassen. Und stellen demnach Zahlen zwischen 00h und FFh dar. Eine zweite Frage die geklärt sein muss, ist die Abfolge, in der die Bits gesendet werden sollen. Wird also erst das niedrigste Bit (LSB -least signifikant Bit) der Zahl gesendet oder erst das höchste Bit (MSB-most signifikant Bit)? Werden die Bits in der entgegengesetzten Reihenfolge zusammengesetzt, wie sie gesendet wurden, so wird aus der Zahl 12h die Zahl 48h, was eindeutig falsch ist. Nun bleibt nur noch die Frage was dem Empfänger die Zahlen sagen sollen. Sind es ASCII-Zeichen, die übermittelt werden oder Messwerte, oder .. oder. Hier kann nur ein Blick auf die Problemstellung oder in das Datenblatt des Senders helfen. Eine allgemeine Normierung gibt es nicht. Konkretisierung Bei dem nachfolgend gezeigten Beispiel der SPI-Schnittstelle des Temperatursensors sind die Informationseinheiten mit einem und vier Bits unterschiedlich gross. Das erste gesendete Bit, das durch ein besonders langes Taktsignal angekündigt wird, ist bei ihm als Vorzeichenbit der nachfolgenden drei, als ungepackte BCD-Ziffern codierten Zahlen zu verstehen. Da ungepackte BCD Ziffern nur 4 Bit benötigen, müssen also nach dem Vorzeichenbit weitere 12 Taktsignale folgen und mit ihnen 3 mal 4 Datenbits. Das Bild zeigt die insgesamt 13 nullaktiven Signale Uclock an der Taktleitung und ordnet sie den 0- und 1- Signalen der Datenleitung zu. So gesehen werden 13 Bits auf der Datenleitung übermittelt, deren Abfolge 1100100010110 lautet. Wegen des Ruhezustands des Taktes bei log 1 und des Lesens der Datenbits bei der zweiten Flanke (hier ansteigend), handelt es sich um die Darstellung des Modus 3. |
||
|
||
|
Erst
durch Kenntnis des Protokolls dieser Übertragung kommt Licht
in die übertragene Information. Mit dem langen Taktsignal
wird das Vorzeichen übertragen. Da in diesem Fall die 0 ein
positives und die 1 ein negatives Vorzeichen darstellen soll,
geht es um eine negative Temperatur.
Die drei mal vier weiteren Bits lassen sich zu den BCD-Ziffern 9,1,6 dekodieren, wenn man der Vereinbarung zu diesem Sender folgt, dass das MSB als erstes gesendet werden soll. (Sonst würde sich 986 ergeben). Die letzte Vereinbarung betrifft die Wertigkeit der Stellen dieses Temperaturwertes. Es gilt .. Zehnerstelle, dann Einerstelle, dann Nachkommastelle ohne dass das Trennzeichen zur Nachkommastelle gesendet würde. Aus diesen Protokollvereinbarungen lassen sich die übertragenen Bits zur gesendeten Information zusammensetzen. Der Temperatursensor misst -91,6°C |
||
| Protokollvereinbarungen wie die obige gibt es bei der SPI-Schnittstelle viele. Grundlegend bleibt die Art der Übertragung über die Leitungen Takt und Data. | ||
|
|
||
|
SIMPLEX,
HALBDUPLEX und VOLLDUPLEX
Das
Beispiel geht von einem Sender aus, der seine Daten zu einem
Empfänger sendet. Kann bei einem seriellen Verfahren die
Datenrichtung nie umgekehrt werden, so spricht man von einer
Simplex-Verbindung. Die liegt bei dem obigen Beispiel tatsächlich
vor, denn der Temperatursensor wird immer nur Senden und nie
empfangen können.
Dennoch lassen sich mit zwei Leitungen der SPI-Schnittstelle auch Halbduplex-Verbindungen herstellen. Bei ihnen kann der Sender zu einem Empfänger werden, wobei der ehemalige Empfänger nun zum Sender wird. In diesem Fall erzeugt letzterer jetzt das Taktsignal und übermittelt seine Daten. Ist dies geschehen könnte nach einer Umschaltung zwischen beiden Geräten, die Senderichtung wieder umgekehrt werden. Zu einer Zeit ist also nur der Betrieb von A nach B oder von B nach A möglich, nicht in beide Richtungen gleichzeitig. Für eine Vollduplex-Verbindung reichen zwei Leitungen nicht mehr aus. Bei dieser Verbindung wird davon ausgegangen, das zwei Geräte gleichzeitig Daten miteinander austauschen können. Jedes ist also zugleich Sender und Empfänger. Wollte man eine solche Verbindung über eine SPI-Schnittstelle aufbauen, so sind die oben genannten drei Leitungen plus Bezugspotential GND notwendig. |
||
| POLLING oder 'INTERRUPTING' Ein letztes Problem, das in dem obigen Beispiel steckt, tritt immer auf, wenn zwei Computer Daten miteinander austauschen sollen. Der obige Sensor liefert jede Minute eine Temperturmessung. Während dieser Zeit ist das Taktsignal im Ruhezustand und es passiert nichts. Was soll der Empfänger während dieser Zeit tun, ohne die nächste Messung zu verpassen?. Beim Polling fragt der Empfänger die Taktleitung in einer unendlichen Schleife ab und ist damit für andere Aufgaben weitgehend blockiert. Dieser Zustand ist in dem meisten Fällen unbefriedigend. Eine Lösung wäre es, mit einer Taktflanke einen Interrupt with Request kurz IRQ am Empfängercomputer auszulösen. Dieser würde den empfangenden Rechner aus jedem beliebigen, gerade von ihm bearbeiteten Programm auf ein Unterprogramm lenken, welches IRQ-Treiber genannt wird. Mit dem IRQ-Treiberprogramm könnte er kurz die übermittelten Daten empfangen und bearbeiten und würde nach getaner Arbeit wieder in sein unterbrochenes Programm zurückspringen. Dieses Verfahren nennt sich Interrupting und ermöglicht es dem Empfänger, neben der Abfrage der Schnittstelle auch noch andere Programmtätigkeiten durchzuführen. | ||
|
|
.de