Die SPI Schnittstelle

Einleitung

SPI bedeutet Serial Peripheral Interface und ist ein synchroner, serieller Bus. Entwickelt wurde der Serial Peripheral Interface von dem Unternehmen Motorola, allerdings gab es nie eine Beendigung der Entwicklungsarbeiten in einer Norm oder einem Standard. Auch hat das Unternehmen Motorola nie ein Softwareprotokoll beschrieben, immer nur die reine Hardware-Funktionsweise. Auf den SPI wurde nie ein Patent angemeldet, somit ist dieser Lizenz frei und dadurch natürlich auch weit verbreitet. Der SPI ermöglicht die Verbindungen von Microcontrollern mit Peripherien oder aber die Verbindung von mehreren Microcontrollern untereinander. Dadurch, dass das Taktsignal bis in den MHz Bereich steigen kann, ist eine sehr hohe Rate der Datenübertragung möglich.

Aufbau der SPI-Schnittstelle:

Die SPI-Schnittstelle hat 3 verschiedene Leitungen, an welche die jeweiligen Verbindungspartner beziehungsweise Teilnehmer angeschlossen werden können.

  • SDO
    Serial Data Out) oder aber MISO oder SIMO (Slave Out, Master In
  • SDI
    Serial Data In) oder aber SIMO oder MOSI (Slave In, Master Out
  • SCK
    Serial Clockoder SCLK, hier wird direkt über den Master ausgegeben

SPI ist ein Bus nach dem Master-Slave-Prinzip, somit werden die Slaves immer vom Master angewählt, auch wird die Datenübertragung von ihm angeführt. Jeder einzelne Slave hat ein meist Low-Aktives Slave Select Signal. Das bedeutet, dass, solange ein Slave noch nicht vom Master gewählt wurde, die Taktsignale sowie Datensignale im TriState Modus verbleiben. Dabei sind sie sehr hochohmig, zur SPI-Verbindung selber werden also weder Daten noch Takte durchgelassen.

Wie arbeitet die SPI-Schnittstelle?

Grundsätzlich stellt der Master immer das Taktsignal her. Parallel dazu werden die Daten an die verschiedenen Leitungen ausgegeben, dies geschieht über ein Schieberegister. Die Ausgabe der Bits erfolgt hierarchisch, das heißt, dass höchstwertige Bit (MSB) wird als erstes ausgegeben, alle anderen, niederwertigeren Bits (LSB) folgen nach. Teilweise kann jedoch auch manuell eingestellt werden, ob MSB oder LSB zuerst gesendet werden sollen, dies ist allerdings nur bei einzelnen Controllern möglich. Wenn eine Datei empfangen wurde, wird sie im selben Register abgelegt, wie die Sendedaten. Das heißt, es gibt nur ein einziges Register, nämlich das für die Sende- und Empfangsdaten. Möchte man feststellen, ob eine Übertragung von Daten abgeschlossen wurde kann man Flags benutzen. Dies sind Statusindikatoren, welche einen bestimmten Zustand kennzeichnen.

Die verschiedenen Modi des SPI:

Grundlage für eine Kommunikation ist es, egal in welchem der Modi, dass es einen Master gibt. Somit ist die Verbindung zu anderen Teilnehmern nicht begrenzt. Der Master muss ein Clock-Signal anfertigen, über ein eine sogenannte „Slave-Select“ (SS) Leitung wird entschieden, mit welchem der Slaves nun kommuniziert werden soll.

Meistens wird der sogenannte „3-Wire Master-Slave“ Modus benutzt. Hier werden zwei der drei Leitungen der SPI-Schnittstelle sowie eine Taktleitung benutzt. Es wird ein Slave ausgewählt, welcher dann immer angewählt ist, ein weiterer Slave kann bei dieser Methode nicht angesteuert werden.

Daneben gibt es noch den sogenannten „4-Wire Master-Slave“ Modus. Es gibt hierbei neben den 3 Leitungen ein Slave-Select Signal, welches vom Master ausgeht, das bedeutet, er wählt einen Slave aus, welcher als Empfänger für die Nachrichten agiert. Benutzt wird dieser Modus, wenn man zwei Controller verbindet, dadurch kann jeder Microcontroller immer einen Datenaustausch beginnen. Allerdings ist es so, dass während dem Datenaustausch selber einer der beiden Controller als Master und einer als Slave konfiguriert ist. Solange keine Daten ausgetauscht werden, agieren beide als Slave, sobald jedoch der Datentransfer eintritt, wird das automatisch umgestellt.

Wo kommt SPI zum Einsatz?

Zumeist wird SPI eingesetzt, um Peripherien mit einem Controller zu verbinden, beziehungsweise Microcontroller untereinander zu verbinden. Beispiele für die verschiedenen Kategorien für Peripherien wären DAC-Wandler, Speicher, Sensoren, RTCs oder USB-Controller. Bestes Beispiel für einen Peripherietypen aus dem alltäglichen Gebrauch ist die MMC Speicherkarte. Diese wird zum Beispiel in Digitalkameras eingesetzt. Abhängig von diesen verschiedenen Peripherietypen und ihrem Einsatz ist die Industriekommunikation, da hier entscheidend ist, welcher Hostprozessor mit welchem Peripherietypen verbunden wird. Zu betonen ist auch, dass dadurch, dass der Bus nicht für einzelne Peripherien angefertigt ist, es eine hohe Anzahl von verschiedenen Peripherien gibt, welche angeschlossen werden können und genau hier liegt der Vorteil des SPI.

Entwicklungen:

Das Unternehmen Motorola hat das Serial Peripheral Interface verbessert, beziehungsweise weiterentwickelt zum sogenannten QSPI. Neu ist hierbei, dass es eine Warteschlange für die Dateien gibt, welche gesendet oder empfangen werden sollen. Vorteil ist, dass man nun nicht mehr warten muss, um nach dem ersten Bit ein nächstes zu senden. Die Warteliste für die zu sendenden Bytes liegt am Speicherort des Prozessors, hierhin muss die Software nun Bytes schicken. Die Hardware selber leitet nun den Prozess des Datenaustausches, ein Eingreifen durch die Software ist hier nicht mehr nötig. Die Bytes können somit nun nacheinander, wie in der Warteliste vorgesehen ausgetauscht, das heißt gesendet beziehungsweise empfangen werden.