Serial Peripheral Interface

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Das Serial Peripheral Interface, kurz SPI oder auch Microwire genannt, ist ein Bus-System bestehend aus drei Leitungen für eine serielle synchrone Datenübertragung zwischen verschiedenen ICs.

Der Bus besteht aus folgenden Leitungen

  • MOSI (Master Out -> Slave In) auch SDO (Serial Data Out) oder DO
  • MISO (Master In <- Slave Out) auch SDI (Serial Data In) oder DI
  • SCK (Takt)

Zusätzlich zu diesen drei Leitungen wird für jeden Slave eine Slave Select (SS) oder auch Chip Select (CS) genannte Leitung benötigt, durch die der Master den Slave zur aktuellen Kommunikation selektiert. Dies geschieht dadurch, dass der Master die SS/CS-Leitung von High nach Low zieht.

Für den SPI-Bus gibt es kein festgelegtes Protokoll. Die Clock-Polarität (CPOL) und Phase (CPHA) können ebenfalls von Slave zu Slave unterschiedlich sein.

Der SPI-Bus, kann mit einer Taktfrequenz von mehreren Megaherz betrieben werden.

Es gibt viele verschiedene ICs die als Slave an dem SPI-Bus betrieben werden können, diese gehen von einfachen Schieberegistern bis hin zu RTCs oder Displaytreibern mit vorgegebenem Protokoll.

Unter anderem werden die AVR-Microcontroller von Atmel über SPI ISP-programmiert, siehe dazu AVR In System Programmer.

SPI-Modi

Wie schon angesprochen gibt es für das SPI verschiedene Möglichkeiten Polarität und Phase des Taktes einzustellen. Folgende vier Modi sind möglich:

Mode CPOL CPHA
0 0 0
1 0 1
2 1 0
3 1 1


CPOL (Clock Polarity)
0: Takt ist in Ruhe LOW, ein Wechsel auf HIGH zählt als steigende Taktflanke
1: Takt ist invertiert: in Ruhe HIGH, ein Wechsel auf LOW zählt als steigende Taktflanke
CPHA (Clock Phase)
0: Daten werden bei steigender Taktflanke (=abh. von CPOL) eingelesen, bei fallender ausgegeben
1: Daten werden bei fallender Taktflanke eingelesen, bei steigender ausgegeben

Man sieht, dass Mode 0 und Mode 3 bzw. Mode 1 und Mode 2 jeweils fast identisch sind. Der einzige Unterschied ist der Pegel des Taktes in Ruhe. In der Regel sind diese Modi deshalb austauschbar.

CPOL und CPHA lassen sich in den Konfigurationsregistern des Controllers einstellen. Beim AT91SAM hat sich Atmel ein kleines Extra einfallen lassen: hier heißt das Bit zur Einstellung der Clock Phase "NCPHA" und entspricht genau dem invertierten Wert von CPHA.

Es ist problemlos möglich ICs mit verschiedenen SPI-Modi an einem Bus zu betreiben, man muss nur vor dem Aktivieren des Chip Select den jeweils richtigen Modus einstellen.

Siehe auch

Weblinks