Serielle Peripherieschnittstelle
SPI ( engl . Serial Peripheral Interface, SPI-Bus - Serial Peripheral Interface, SPI-Bus) ist ein serieller synchroner Datenübertragungsstandard im Vollduplexmodus , der für eine einfache und kostengünstige Hochgeschwindigkeitsschnittstelle von Mikrocontrollern und Peripheriegeräten entwickelt wurde. SPI wird manchmal auch als Vierdrahtschnittstelle bezeichnet .
Im Gegensatz zu einer standardmäßigen seriellen Schnittstelle ist SPI eine synchrone Schnittstelle, bei der jede Übertragung mit einem gemeinsamen Taktsignal synchronisiert wird, das vom Host (Prozessor) generiert wird. Das empfangende (Slave-)Peripheriegerät synchronisiert den Empfang der Bitfolge mit dem Taktsignal. Mehrere ICs können mit einer einzelnen seriellen Peripherieschnittstelle eines Master-IC verbunden werden. Der Master wählt den Slave zum Senden aus, indem er das Chip-Select- Signal auf dem Slave-Chip aktiviert . Nicht vom Prozessor ausgewählte Peripheriegeräte nehmen nicht an der SPI-Übertragung teil.
Schnittstelle
SPI verwendet vier digitale Signale:
- MOSI - Master-Ausgang, Slave-Eingang ( engl . Master Out Slave In ). Wird verwendet, um Daten vom Master zum Slave zu übertragen.
- MISO - Master-Eingang, Slave-Ausgang ( engl . Master In Slave Out ). Dient zur Datenübertragung vom Slave zum Master.
- SCLK oder SCK ist ein serielles Taktsignal ( Serial Clock ) . Dient zur Übertragung eines Taktsignals für Slave-Geräte.
- CS oder SS – Chipauswahl, Slaveauswahl ( engl . Chip Select, Slave Select ).
Die spezifischen Namen der SPI-Schnittstellenports können je nach Hardwarehersteller variieren, aber die folgenden Optionen sind möglich:
- MISO : SOMI, SDO (am Gerät), DO, DON, SO, MRSR;
- MOSI : SIMO, SDI (am Gerät), DI, DIN, SI, MTST;
- SCLK : SCK, CLK, SPC (SPI-Uhr des seriellen Anschlusses);
- SS : nCS, CS , CSB , CSN , NSS, nSS, STE , SYNC .
Synchronisation in SPI
Die Bitintervalle in den Datenleitungen werden durch das vom Master erzeugte SCK-Taktsignal bestimmt, die Slave-Geräte verwenden das Taktsignal, um zu bestimmen, wann sich die Bits auf der Datenleitung ändern, während die Slave-Geräte die Bitintervalle in keiner Weise beeinflussen können. Sowohl der Master als auch der Slave haben einen Zähler von Taktimpulsen (Bits). Durch den Zähler im Slave-Gerät kann letzteres feststellen, wann die Übertragung des Pakets beendet ist. Der Zähler wird zurückgesetzt, wenn das SPI-Subsystem ausgeschaltet wird, das im Master immer verfügbar ist. Im Slave wird der Zähler üblicherweise durch Deaktivieren des SS -Schnittstellensignals zurückgesetzt .
Da die Aktionen von Master und Slave durch das gleiche Signal getaktet werden, gibt es keine Anforderungen an die Stabilität dieses Signals, abgesehen von der Begrenzung der Dauer von Halbwellen, die durch die maximale Arbeitsfrequenz des langsameren Geräts bestimmt wird . Dies ermöglicht die Verwendung von SPI in Systemen mit niedrigen stabilen Taktraten und erleichtert auch die Software-Emulation des Masters.
Empfangen und Senden von Daten in SPI
Die Übertragung erfolgt stapelweise. Die Paketlänge beträgt typischerweise 1 Byte (8 Bit), während SPI-Implementierungen mit anderen Paketlängen, wie beispielsweise 4 Bit, bekannt sind. Das Master-Gerät initiiert einen Kommunikationszyklus, indem es den Slave-Auswahlstift ( SS ) des Geräts, mit dem es verbunden werden soll, auf Low zieht. Wenn das SS -Signal niedrig ist :
- die Slave-Schaltung befindet sich im aktiven Zustand;
- der MISO-Stift wird in den "Ausgangs"-Modus versetzt;
- Der SCLK-Takt vom Master wird vom Slave erfasst und veranlasst den MOSI-Eingang, die vom Master übertragenen Werte zu lesen und das Register des Slaves zu verschieben.
Die zu übertragenden Master- und Slave-Daten werden in Schieberegistern abgelegt. Danach beginnt das Master-Gerät, Taktimpulse auf der SCLK-Leitung zu erzeugen, was zu einem gegenseitigen Datenaustausch führt. Daten werden Bit für Bit vom Master auf der MOSI-Leitung und vom Slave auf der MISO-Leitung übertragen. Die Übertragung erfolgt in der Regel beginnend mit den höchstwertigen Bits, aber einige Hersteller erlauben es, die Reihenfolge der Bitübertragung durch Softwaremethoden zu ändern. Nach dem Senden jedes Datenpakets kann das Master-Gerät die SS-Leitung in einen hohen Zustand versetzen, um das Slave-Gerät zu synchronisieren.
SPI-Schnittstellenmodi
Es sind vier Synchronisationsmodi möglich. Der Modus wird durch die Kombination der CPHA- und CPOL-Bits bestimmt:
- CPOL = 0 - Anfangszustand des Synchronisationssignals - niedriger Pegel;
- CPOL = 1 – Anfangszustand des Synchronisationssignals – hoher Pegel;
- CPHA = 0 – Daten werden auf der ansteigenden Flanke (Umschalten) des Synchronisationssignals abgetastet. Das heißt, durch Umschalten von der Hauptrichtung auf das Gegenteil davon;
- CPHA = 1 – Daten werden auf der Hinterflanke (Schalten) des Synchronisationssignals abgetastet. Das heißt, indem Sie vom Gegenteil zum Hauptteil zurückschalten;
Zur Bezeichnung der Betriebsarten der SPI-Schnittstelle gilt folgende Konvention:
- Modus 0 (CPOL = 0, CPHA = 0);
- Modus 1 (CPOL = 0, CPHA = 1);
- Modus 2 (CPOL = 1, CPHA = 0);
- Modus 3 (CPOL = 1, CPHA = 1).
Topologie von Kommunikationssystemen basierend auf SPI
Im einfachsten Fall ist ein einzelnes Slave-Gerät mit dem Master-Gerät verbunden und es ist eine bidirektionale Kommunikation erforderlich. In diesem Fall wird ein dreiadriges Verbindungsschema verwendet. Die SPI-Schnittstelle ermöglicht es Ihnen, mehrere Slave-Geräte mit einem Master-Gerät zu verbinden, und die Verbindung kann auf verschiedene Arten hergestellt werden.
Mit der ersten Methode können Sie eine radiale Kommunikationsstruktur (Sterntopologie) implementieren, die als Hauptmethode zum Verbinden mehrerer Slave-Geräte angesehen wird. In diesem Fall muss der Master, um mit mehr als einem Slave zu kommunizieren, eine angemessene Anzahl von Slave-Select-Signalen ( SS ) erzeugen. Bei der Kommunikation mit einem Slave wird das entsprechende SS -Signal auf den aktiven (low) Zustand gesetzt, während alle anderen SS -Signale im inaktiven (high) Zustand sind. Die MISO-Datenpins der Slave-Geräte werden parallel geschaltet, während sie sich in einem inaktiven Zustand befinden, und bevor der Austausch beginnt, geht einer der Ausgänge (des ausgewählten Slave-Geräts) in den aktiven Modus.
Mit der zweiten Methode können Sie eine Verbindungsstruktur vom Typ "Ring" implementieren. In diesem Fall wird ein SS -Signal verwendet, um mehrere Slave-Geräte gleichzeitig zu aktivieren , und die Datenausgänge aller Geräte werden in Reihe geschaltet und bilden einen geschlossenen Stromkreis. Wenn ein Paket von einem Master gesendet wird, wird dieses Paket vom ersten Slave empfangen, der wiederum sein Paket an den nächsten Slave sendet und so weiter. Damit ein Paket vom Master einen bestimmten Slave erreicht, muss der Master ein paar Pakete mehr senden.
Vor- und Nachteile der SPI-Schnittstelle
Vorteile
- Standardmäßig Vollduplex-Übertragung.
- Höherer Durchsatz als I²C oder SMBus .
- Möglichkeit der willkürlichen Wahl der Paketlänge, die Paketlänge ist nicht auf acht Bit beschränkt.
- Einfache Hardwareimplementierung:
- geringerer Strombedarf im Vergleich zu I²C und SMBus ;
- Einsatz in Systemen mit niedriger stabiler Taktfrequenz möglich;
- Slave-Geräte benötigen im Gegensatz zu Schnittstellen wie I²C , GPIB oder SCSI keine eindeutige Adresse .
- Es werden nur vier Pins verwendet, was viel weniger ist als bei parallelen Schnittstellen.
- Die unidirektionale Natur der Signale ermöglicht bei Bedarf eine einfache galvanische Trennung zwischen Master- und Slave-Geräten.
- Die maximale Taktfrequenz wird nur durch die Geschwindigkeit der am Datenaustausch beteiligten Geräte begrenzt.
Nachteile
- Es werden mehr Pins benötigt als für die I²C -Schnittstelle .
- Das Slave-Gerät kann den Datenfluss nicht kontrollieren.
- Es gibt keine Bestätigung des Datenempfangs vom Slave-Gerät (das Master-Gerät kann Daten „ins Nirgendwo“ übertragen).
- Es gibt kein standardisiertes Fehlererkennungsprotokoll.
- Das Fehlen eines offiziellen Standards, der es unmöglich macht, Geräte zu zertifizieren.
- Hinsichtlich der Datenübertragungsreichweite ist die SPI-Schnittstelle Standards wie UART und CAN unterlegen .
- Das Vorhandensein vieler Optionen zur Implementierung der Schnittstelle.
- Fehlende Unterstützung für Hot-Plugging-Geräte.
Ein Beispiel für eine Softwareimplementierung
Unten ist ein Beispiel einer Softwareimplementierung des SPI-Masters in C -Sprache . Die CS -Leitung (Chipauswahl, Chipauswahl) muss aktiviert (in den meisten Fällen auf Low gezogen) werden, bevor der Datenaustausch beginnt, und deaktiviert werden, nachdem der Austausch abgeschlossen ist. Die meisten Geräte erfordern mehrere Übertragungssitzungen mit einer aktiven CS -Leitung . Diese Funktion kann mehrmals aufgerufen werden, während die Leitung aktiv ist.
unsigned char SPIBitBang8BitsMode0 ( unsigned char byte )
{ Zeichenbit ohne Vorzeichen ;
für ( Bit = 0 ; Bit < 8 ; Bit ++ ) {
/* MOSI auf fallender Flanke des vorherigen Taktes schreiben */
wenn ( Byte & 0x80 )
SETMOSI ();
anders
CLRMOSI ();
Byte <<= 1 ;
/* eine halbe Taktperiode warten, bevor eine steigende Flanke generiert wird */
SPIDELAY ( SPISPEED / 2 );
SETCLK ();
/* eine halbe Taktperiode warten, bevor ein Falloff erzeugt wird */
SPIDELAY ( SPISPEED / 2 );
/* MISO ablehnend lesen */
byte |= READMISO ();
CLRCLK ();
}
Rückgabebyte ; _
}
Siehe auch
Literatur
- Ball Stewart R. Analoge Schnittstellen von Mikrocontrollern. — M .: Dodeka-XXI, 2007. — 360 S. — (Programmierbare Systeme). - 2000 Exemplare. — ISBN 978-5-94120-142-6 .
- Lapin A.A. Schnittstellen. Auswahl und Umsetzung. - M .: Technosfera, 2005. - 168 p. — (Die Welt der Elektronik). - 5000 Exemplare. — ISBN 5-94836-058-X .