spi interfaces

Serial Peripheral Interface (SPI) auf STM-Mikrocontrollern

Eine sehr häufig verwendete serielle Schnittstelle ist das Serial Peripheral Interface (SPI). Anders als beim I²C-Bus erfolgt hier die Ansteuerung der reichhaltig verfügbaren Peripherie (Echtzeituhren, externes RAM oder Flash-ROM, D/Aund A/D-Wandler usw.) aber nicht über Adressen: Hier wird das Zielgerät über eine Enable-Leitung ausgewählt.

SPI wurde von der Firma Motorola entwickelt und von Beginn an für hohe Datenübertragungsraten im MHz-Bereich ausgelegt. SPI ist, ebenso wie I²C, ein synchrones Bussystem und benötigt daher ein Taktsignal, das vom Master generiert wird. SPI ist ein Voll-Duplex-Bus. Das bedeutet, dass Daten gleichzeitig gesendet und auch empfangen werden können.

Um das zu erreichen, sind für die Daten zwei Leitungen erforderlich: Über die SDO-Leitung, die häufig auch als MOSI (Master Out, Slave In) bezeichnet wird, sendet der Master Daten an das Zielgerät. Über die SDI-Leitung, die entsprechend als MISO (Master In, Slave Out) bekannt ist, empfängt der Master Daten, die von einem Slave als Antwort gesendet werden.

Wenn Halb-Duplex ausreicht – und Voll-Duplex demnach nicht erforderlich ist –, kann für das Senden und Empfangen von Daten auch die MOSI-Leitung des Masters genutzt werden: Hierfür lassen sich die SPI-Interfaces der STM32F4xx-Mikrocontroller so konfigurieren, dass die MOSI- und die MISO-Leitungen intern unmittelbar miteinander verbunden werden.

Hinweis: Der STM32F446 verfügt über insgesamt vier SPI-Schnittstellen. SPI1 und SPI4 sind an den APB2-Bus angeschlossen und können somit mit einer Frequenz von bis zu 90 MHz getaktet werden. Die Interfaces SPI2 und SPI3 sind an APB1 angeschlossen und können daher »nur« mit 45 MHz getaktet werden.

Die dritte Leitung ist dann die SCK-Leitung, über die das Taktsignal gesendet wird. Die übliche Bezeichnung, oben auch Enable-Leitung genannt, lautet offiziell SS, was für Slave Select steht.

Die Abbildungen zeigen die möglichen Konfigurationen:

spi interfaces
SPI im Voll-Duplex-Betrieb
SPI im Halb-Duplex-Betrieb

Wenn der Datentransfer ausschließlich in eine Richtung erfolgen muss, besteht zudem die Möglichkeit, die SPI-Interfaces der STM-Mikrocontroller für den Simplex-Modus zu konfigurieren. In diesem Fall wird ebenfalls nur eine Datenleitung benötigt. Für die Auswahl des Datenempfängers (Slave) wird für jeden Slave eine GPIO-Leitung benötigt (um hier Portleitungen einzusparen, können Sie wieder einen PCF8574/PCF8575 verwenden, den Sie im I²C-Kapitel kennengelernt haben). Die GPIO-Leitungen sind in der letzten beiden Abbildungen mit NSS bezeichnet, wobei das N bedeutet, dass der Pegel auf 0 V »heruntergezogen« werden muss, um den entsprechenden Slave zu aktivieren. Die Abbildung unten zeigt eine typische Anwendung.

spi interfaces
Typische Anwendung von SPI

Wichtig: Bei der in der Abbildung gezeigten typischen Anwendung wird der mit NSS bezeichnete Anschluss des Masters nicht verwendet. Er muss in diesem Fall deaktiviert werden, um Konflikte bei der Slave-Ansteuerung zu vermeiden. Dies erreicht man durch das Setzen der Bits SSM und SSI im Steuerregister 1 (SPI_ CR1) auf den Wert »1«.

Wichtig: Weiterhin ist es wichtig, dass die alternative Funktion der entsprechenden GPIOPins aktiviert werden muss. Die Pins werden im Push-Pull-Modus betrieben.

Der oberen erwähnte NSS-Pin bietet, abhängig von der Betriebsart, verschiedene Funktionen: Er kann dazu genutzt werden, einen bestimmten Slave als Ziel auszuwählen. Er kann ebenfalls eingesetzt werden, um Daten-Frames miteinander zu synchronisieren. Die dritte Anwendungsmöglichkeit besteht darin, einen Konflikt in einem Multi-Master-System zu entdecken.


Dieser Artikel ist ein Auszug aus dem Buch STM32“ von Ralf Jesse. Alle Infos zum Buch, das Inhaltsverzeichnis und eine kostenlose Leseprobe findet ihr bei uns im Shop.

Kommentar verfassen