Serial Peripheral Interface

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Das Serial Peripheral Interface (kurz SPI) ist ein von Motorola entwickeltes Bus-System mit einem „lockeren“ Standard für einen synchronen seriellen Datenbus (Synchronous Serial Port), mit dem digitale Schaltungen nach dem Master-Slave-Prinzip miteinander verbunden werden können.

Ein ähnliches Bus-System unter der Bezeichnung Microwire existiert von National Semiconductor.

Einfacher SPI-Bus mit einem SPI-Master und Slave.
Bild 1: SPI-Verbindung durch Kaskadierung der Slaves
Bild 2: SPI-Sternverbindung
Bild 3: Datenübertragung bei verschiedenen Einstellungen von CPOL und CPHA(0 - Rot, 1 - Blau)

Grundlagen[Bearbeiten]

Eigenschaften[Bearbeiten]

  • Drei gemeinsame Leitungen, an denen jeder Teilnehmer angeschlossen ist
SDO (englisch Serial Data Out) auch MOSI oder SIMO (englisch Master out, Slave in)
SDI (englisch Serial Data In) auch MISO oder SOMI (englisch Master in, Slave out)
SCK (englisch Serial Clock) auch SCLK, wird vom Master ausgegeben
  • Eine oder mehrere mit logisch-0 aktive Chip-Select-Leitungen, welche alle vom Master gesteuert werden und von denen je eine Leitung pro Slave vorgesehen ist. Diese Leitungen werden je nach Anwendung unterschiedlich mit Bezeichnungen wie SS, CS oder STE für Slave Select, Chip Select oder Slave Transmit Enable bezeichnet, oft noch in Kombination mit einer Indexnummer zur Unterscheidung. Es gibt auch spezielle Anwendungen, bei denen sich mehrere Slaves eine Leitung teilen, siehe Bild 1.
  • Vollduplexfähig
  • Viele Einstellmöglichkeiten, wie
    • mit welcher Taktflanke ausgegeben oder eingelesen wird
    • Wortlänge
    • Übertragung: MSB oder LSB zuerst
  • Unterschiedliche Taktfrequenzen bis in den MHz-Bereich sind zulässig.
  • Vielfältige Einsatzmöglichkeiten in Audio- und Messanwendungen, zur Datenübertragung zwischen Mikrocontrollern.

Viele Einstellungsmöglichkeiten sind unter anderem deshalb erforderlich, weil die Spezifikation für den SPI-Bus in vielen Eigenschaften nicht festlegt ist, wodurch verschiedene, zueinander inkompatible Geräte existieren. Häufig ist beispielsweise für jeden angeschlossenen Schaltkreis eine eigene Konfiguration des steuernden Mikrocontrollers (Master des SPI-Bus) erforderlich.

Viele Mikrocontroller, wie die meisten AVR, erlauben über den SPI-Bus eine In-System-Programmierung (kurz auch ISP).

Protokollablauf und Einstellmöglichkeiten[Bearbeiten]

Es können theoretisch beliebig viele Teilnehmer an den Bus angeschlossen werden, wobei es jedoch immer genau einen Master geben muss, der seinerseits das Clock-Signal an SCK erzeugt. Der Master legt mit der Leitung „Slave Select“ fest, mit welchem Slave er kommunizieren will. Wird sie gegen Masse gezogen, ist der jeweilige Slave aktiv und „lauscht“ an MOSI, so legt er seine Daten im Takt von SCK an MISO. Es wird ein Byte vom Master zum Slave und ein anderes Byte vom Slave zum Master transportiert.

Ein Protokoll für die Datenübertragung wurde von Motorola zwar nicht festgelegt, doch haben sich in der Praxis vier verschiedene „Modi“ durchgesetzt. Diese werden durch die Parameter Clock Polarität (CPOL) und Clock Phase (CPHA) festgelegt. Bei CPOL=0 ist der Clock Idle Low, bei CPOL=1 ist der Clock Idle High. CPHA gibt nun an, bei der wievielten Flanke die Daten übernommen werden sollen. Bei CPHA=0 werden sie bei der ersten Flanke übernommen, nachdem SS auf Low gezogen wurde, bei CPHA=1 bei der zweiten. Somit werden die Daten bei CPOL=0 und CPHA=0 mit der ersten Flanke übernommen, die nur eine High-Flanke sein kann. Bei CPHA=1 wäre es die zweite, also eine Low-Flanke. Bei CPOL=1 ist es folglich genau andersherum, bei CPHA=0 Low-Flanke und bei CPHA=1 High-Flanke.

Der Slave legt bei CPHA=0 seine Daten schon beim Runterziehen von SS an MISO an, damit der Master sie beim ersten Flankenwechsel übernehmen kann. Bei CPHA=1 werden die Daten vom Slave erst beim ersten Flankenwechsel an MISO gelegt, damit sie beim zweiten Flankenwechsel vom Master übernommen werden können. Der Master hingegen legt seine Daten immer zum gleichen Zeitpunkt an, meist kurz nach der Low-Flanke von SCK.

Mit jeder Taktperiode wird ein Bit übertragen. Beim üblichen Bytetransfer sind also acht Taktperioden für eine vollständige Übertragung nötig. Es können auch mehrere Bytes hintereinander übertragen werden, wobei in der Spezifikation nicht festgelegt ist, ob zwischen jedem Byte das SS-Signal kurz wieder auf High gezogen werden muss. Eine Übertragung ist beendet, wenn das Slave-Select-Signal endgültig auf High gesetzt wird.

Für die verschiedenen Konstellationen existiert die Bezeichnung Modes
Mode CPOL CPHA
0 0 0
1 0 1
2 1 0
3 1 1

Weblinks[Bearbeiten]

 Commons: Serial Peripheral Interface – Sammlung von Bildern, Videos und Audiodateien