Serial Peripheral Interface: Unterschied zwischen den Versionen

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
Zeile 59: Zeile 59:
* [[Porterweiterung mit SPI]]
* [[Porterweiterung mit SPI]]
* [[MMC- und SD-Karten]]
* [[MMC- und SD-Karten]]
* [http://www.mikrocontroller.net/topic/54441 SPI Codetuning]


== Weblinks ==
== Weblinks ==
* http://www.mct.net/faq/spi.html (Clock-Einstellungen, Slave-IC Liste, etc.)
* http://www.mct.net/faq/spi.html (Clock-Einstellungen, Slave-IC Liste, etc.)
* http://www.matuschek.net/atmega-spi (ATMega SPI Performance Tuning)
* http://www.matuschek.net/atmega-spi (ATMega SPI Performance Tuning)

Version vom 1. August 2007, 15:47 Uhr

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) oder auch SDO (Serial Data Out)
  • MISO (Master In <- Slave Out) oder auch SDI (Serial Data In)
  • SCK (Takt)

Zusätzlich zu diesen drei Leitungen wird für jeden Slave eine Slave Select (SS) oder auch Cable Select (CS) genannte Leitung benötigt, durch die der Master den Slave zur aktuellen Kommunikation selektiert. Dies geschieht dadurch, dass der Mater 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 Vorteil des SPI-Buses ist, dass er mit einer Taktfrequenz von mehreren Megaherz betrieben werden kann.

Es gibt viele verschiedene ICs, die als Slave an dem SPI-Bus betrieben werden können, diese gehen von einfachen Schieberegistern (siehe auch Porterweiterung mit SPI) bis hin zu RTCs oder Diplaytreibern 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 definiert:

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 Slave Select/Chip Select (CS) den jeweils richtigen Modus einstellen.

Siehe auch

Weblinks