SPI
ist ein serielles Kommunikationsprotokoll, das von Motorola entwickelt wurde. Es ist ein Vollduplex-Protokoll basierend auf einem Master-Slave-Prinzip.
Funktionsweise
SPI verwendet vier Signale:
Den SPI-Takt (SCLK),
den Master Output/Slave Input (MOSI),
den Master Input/Slave Output (MISO)
und den Slave Select (SS).
Drei dieser Signale werden von allen Busteilnehmern erwendet: SCLK, MOSI und MISO. SCLK wird vom Master erzeugt und zur Synchronisierung des Datenstroms verwendet. MOSI und MISO sind die Datenleitungen. Ihre Namen geben zugleich die Datenflussrichtungen an. Daten werden auf dem SPI-Bus immer zugleich gesendet und empfangen, allerdings können z.B. Daten von einem Slave der nur eine Ausgabeeinheit hat (DA-Wandler) einfach ignoriert werden. Genauso ein Slave, der nur Daten zu versenden hat (Temperatursensor), die empfangenen Daten einfach ignorieren.
Jeder Slave hat seine eigene SS Leitung. Im Ruhezustand ist diese Leitung i.A. auf High-Pegel. Der Master zieht diese Leitung auf ‚0’ um einen Übertragungsstart auzuzeigen.
Hier eine SPI Beispielkonfiguration
Die Datenübertragung selber hat kein definiertes Protokoll. Deshalb ist sie ideal für beliebige Datenstromübertragungen. Daten können ohne Protokolloverhead mit hoher Geschwindigkeit (bis zu mehreren 10MHz) übertragen werden. Die Kehrseite der Medaille ist allerdings, dass keinerlei Rückmeldung oder Datenflusskontrolle vom Slave zum Master definiert ist. Eventuell bemerkt der Master nicht einmal einen funktionsunfähigen Slave.
SPI basiert auf gekoppelten Schieberegistern. Die Daten, die z.B. aus dem Master-Schieberregister herausgetaktet werden, werden mit dem nächsten Takt im Slave-Schieberegister eingelesen und weitergeschoben. Abhängig vom verwendeten Flipflop kann das Einlesen auf die steigende oder fallende Flanke erfolgen.
Hier eine Übersicht der 4 möglichen SPI-Modi

