Theorie
 
 
 
 
 
Schnittstellen
 
 
 
 
 
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.
 
 
 
 
www..de