Serial Peripheral Interface: Unterschied zwischen den Versionen

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
Zeile 49: Zeile 49:
* Sind die Clock-Flanken sauber genug? Siehe [[Wellenwiderstand]].
* Sind die Clock-Flanken sauber genug? Siehe [[Wellenwiderstand]].
* Sind die Daten während der Datenübernahme stabil?
* Sind die Daten während der Datenübernahme stabil?
* Ist die Zeit zwischen Select-Signal und Übertragungsbeginn?


== Siehe auch ==
== Siehe auch ==

Version vom 8. März 2013, 13:45 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) auch SDO (Serial Data Out) oder DO
  • MISO (Master In <- Slave Out) auch SDI (Serial Data In) oder DI
  • SCK (Serial Clock) - Schiebetakt

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 Megahertz 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 meisten AVR-Microcontroller von Atmel über SPI 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.

Fehlersuche

Immer wieder kommt es zu Problemen bei der Nutzung von SPI, obwohl diese Schnittstelle recht einfach aufgebaut ist. Immer wieder kommt es u.a. zu dem Effekt, dass nur bestimmte SPI-Frequenzen funktionieren, etwas höher oder niedrigere nicht. Das ist ein klares Zeichen für Fehler. Folgende Punkte sollte man mit dem Oszilloskop prüfen.

  • Stimmt jeweils der SPI-Modus?
  • Sind die Select-Signale vorhanden?
  • Sind die erreichten Pegel ausreichend?
  • Sind die Clock-Flanken sauber genug? Siehe Wellenwiderstand.
  • Sind die Daten während der Datenübernahme stabil?
  • Ist die Zeit zwischen Select-Signal und Übertragungsbeginn?

Siehe auch

Weblinks