Serielle Peripherieschnittstelle - Serial Peripheral Interface

SPI-Bus
Typ Serielle Kommunikation Bus
Designer Motorola
Entworfen 1979 ; Vor 42 Jahren ( 1979 )
Protokoll Seriell , Vollduplex

Das Serial Peripheral Interface ( SPI ) ist eine Spezifikation für eine synchrone serielle Kommunikationsschnittstelle , die für die Kommunikation über kurze Distanzen verwendet wird, hauptsächlich in eingebetteten Systemen . Die Schnittstelle wurde Mitte der 80er Jahre von Motorola entwickelt und hat sich zu einem De-facto- Standard entwickelt . Zu den typischen Anwendungen gehören Secure Digital- Karten und Flüssigkristallanzeigen .

SPI-Geräte kommunizieren im Vollduplex- Modus unter Verwendung einer Master-Slave- Architektur, normalerweise mit einem einzigen Master (obwohl einige Atmel-Geräte den Rollenwechsel in Abhängigkeit von einem externen (SS)-Pin unterstützen). Das Master-(Controller-)Gerät erzeugt den Frame zum Lesen und Schreiben. Mehrere Slave-Geräte können durch Auswahl mit einzelnen Chip-Select (CS) unterstützt werden, die manchmal als Slave-Select- (SS)-Leitungen bezeichnet werden.

Manchmal wird SPI genannt Vier-Draht seriellen Bus, mit kontrastier Drei- , Zwei- und Ein-Draht serielle Busse. Das SPI kann zwar genau als synchrone serielle Schnittstelle beschrieben werden, unterscheidet sich jedoch vom Synchronous Serial Interface (SSI)-Protokoll, das ebenfalls ein synchrones serielles Vierdraht-Kommunikationsprotokoll ist. Das SSI-Protokoll verwendet differentielle Signalisierung und bietet nur einen einzigen Simplex-Kommunikationskanal . Für jede gegebene Transaktion ist SPI eine Master- und Multi-Slave-Kommunikation.

Schnittstelle

Single Master zu Single Slave: einfaches SPI-Bus-Beispiel

Der SPI-Bus spezifiziert vier logische Signale:

  • SCLK: Serial Clock (Ausgabe vom Master)
  • MOSI: Master Out Slave In (Datenausgabe vom Master)
  • MISO: Master In Slave Out (Datenausgabe vom Slave)
  • CS/SS: Chip/Slave Select (oft aktiv niedrig , Ausgabe vom Master, um anzuzeigen, dass Daten gesendet werden)

MOSI auf einem Master verbindet sich mit MOSI auf einem Slave. MISO auf einem Master verbindet sich mit MISO auf einem Slave. Slave Select hat die gleiche Funktionalität wie Chip Select und wird anstelle eines Adressierungskonzepts verwendet.

Hinweis: Auf einem Nur-Slave-Gerät kann MOSI als SDI (Serial Data In) und MISO als SDO (Serial Data Out) gekennzeichnet sein.

Die obigen Signalnamen können verwendet werden, um sowohl die Master- und Slave-Gerätepins als auch die Signalleitungen zwischen ihnen eindeutig zu beschriften und sind in modernen Produkten am häufigsten. Pin-Namen werden immer groß geschrieben, zB "Chip Select", nicht "Chip Select".

Viele Produkte können nicht standardmäßige SPI-Pin-Namen haben:

Serielle Uhr:

  • SCK

Master-Ausgang → Slave-Eingang (MOSI):

  • SIMO, MTSR - entspricht MOSI sowohl auf Master- als auch auf Slave-Geräten, verbindet sich miteinander
  • SDI, DI, DIN, SI - auf Slave-Geräten; verbindet sich mit MOSI auf dem Master oder mit den darunter liegenden Verbindungen
  • SDO, DO, DOUT, SO - auf Master-Geräten; verbindet sich mit MOSI auf dem Slave oder mit den obigen Verbindungen

Master-Eingang ← Slave-Ausgang (MISO):

  • SOMI, MRST - entspricht MISO sowohl auf Master- als auch auf Slave-Geräten, verbindet sich miteinander
  • SDO, DO, DOUT, SO - auf Slave-Geräten; verbindet sich mit MISO auf dem Master oder mit den darunter liegenden Verbindungen
  • SDI, DI, DIN, SI - auf Master-Geräten; verbindet sich mit MISO auf dem Slave oder mit den obigen Verbindungen

Slave-Auswahl:

  • SS, SS , SSEL, nSS, /SS, SS# (Slave-Auswahl)
  • CS, CS (Chipauswahl)
  • CSN (Chipauswahl/Aktivierung)
  • CE (Chipfreigabe)

Betrieb

Der SPI-Bus kann mit einem einzelnen Master-Gerät und mit einem oder mehreren Slave-Geräten betrieben werden.

Wenn eine einzelne Slave - Gerät verwendet wird, das SS - Stift kann zu fixierenden logisch niedrig , wenn der Slave dies zulässt. Einige Slaves benötigen eine fallende Flanke des Chipauswahlsignals, um eine Aktion einzuleiten. Ein Beispiel ist der Maxim MAX1242 ADC , der die Umwandlung bei einem High→Low-Übergang startet. Bei mehreren Slave-Geräten wird für jedes Slave-Gerät ein unabhängiges SS-Signal vom Master benötigt.

Die meisten Slave-Geräte haben Tri-State-Ausgänge, sodass ihr MISO-Signal hochohmig wird ( elektrisch getrennt ), wenn das Gerät nicht ausgewählt ist. Geräte ohne Tri-State-Ausgänge können SPI-Bussegmente nicht mit anderen Geräten teilen, ohne einen externen Tri-State-Puffer zu verwenden.

Datenübertragung

Ein typisches Hardware-Setup mit zwei Schieberegistern , um einen Ringpuffer zwischen den Chips zu bilden

Um die Kommunikation zu beginnen, konfiguriert der Busmaster den Takt unter Verwendung einer Frequenz, die vom Slave-Gerät unterstützt wird, typischerweise bis zu einigen MHz. Der Master wählt dann das Slave-Gerät mit einem logischen Pegel 0 auf der Auswahlleitung aus. Wenn eine Wartezeit erforderlich ist, beispielsweise für eine Analog-Digital-Wandlung, muss der Master mindestens diese Zeit warten, bevor er Taktzyklen ausgibt.

Während jedes SPI-Taktzyklus erfolgt eine Vollduplex-Datenübertragung. Der Master sendet ein Bit auf der MOSI-Leitung und der Slave liest es, während der Slave ein Bit auf der MISO-Leitung sendet und der Master es liest. Diese Reihenfolge wird auch dann beibehalten, wenn nur eine unidirektionale Datenübertragung beabsichtigt ist.

Übertragungen beinhalten normalerweise zwei Schieberegister mit einer bestimmten Wortgröße, beispielsweise acht Bits, eines im Master und eines im Slave; sie sind in einer virtuellen Ringtopologie verbunden. Daten werden normalerweise mit dem höchstwertigen Bit zuerst herausgeschoben. An der Taktflanke schieben sowohl Master als auch Slave ein Bit heraus und geben es auf der Übertragungsleitung an das Gegenstück aus. Bei der nächsten Taktflanke wird bei jedem Empfänger das Bit von der Übertragungsleitung abgetastet und als neues niederwertigstes Bit des Schieberegisters gesetzt. Nach dem Aus- und Einschieben der Registerbits haben Master und Slave Registerwerte ausgetauscht. Wenn mehr Daten ausgetauscht werden müssen, werden die Schieberegister neu geladen und der Vorgang wiederholt. Die Übertragung kann für eine beliebige Anzahl von Taktzyklen fortgesetzt werden. Nach Abschluss stoppt der Master das Umschalten des Taktsignals und wählt normalerweise den Slave ab.

Übertragungen bestehen oft aus 8-Bit-Wörtern. Es sind jedoch auch andere Wortgrößen üblich, zum Beispiel 16-Bit-Wörter für Touchscreen-Controller oder Audio-Codecs, wie den TSC2101 von Texas Instruments , oder Zwölf-Bit-Wörter für viele Digital-Analog- oder Analog- To -Digitalwandler. Mehrere SPI-Geräte können auch in Reihe geschaltet werden, um Pins zu sparen.

Jeder Slave auf dem Bus, der nicht über seine Chip-Select-Leitung aktiviert wurde, muss die Eingangstakt- und MOSI-Signale ignorieren und sollte MISO nicht ansteuern (dh muss einen Tristate- Ausgang haben), obwohl einige Geräte externe Tristate-Puffer benötigen, um dies zu implementieren.

Taktpolarität und -phase

Ein Zeitdiagramm, das die Polarität und Phase des Takts zeigt. Rote Linien bezeichnen Taktvorderflanken; und blaue Linien, Hinterkanten.

Neben der Einstellung der Taktfrequenz muss der Master auch die Taktpolarität und -phase in Bezug auf die Daten konfigurieren. Motorola SPI - Block - Führer Namen dieser beiden Optionen als CPOL und CPHA (für c Schloss pol arity und pha se) jeweils eine Konvention die meisten Anbieter haben auch angenommen.

Das Zeitdiagramm ist rechts dargestellt. Das Timing wird weiter unten beschrieben und gilt sowohl für das Master- als auch für das Slave-Gerät.

  • CPOL bestimmt die Polarität der Uhr. Die Polaritäten können mit einem einfachen Inverter umgestellt werden .
    • CPOL = 0 ist ein Takt, der bei 0 leerläuft, und jeder Zyklus besteht aus einem Impuls von 1. Das heißt, die Vorderflanke ist eine ansteigende Flanke und die Rückflanke ist eine abfallende Flanke.
    • CPOL = 1 ist ein Takt, der bei 1 leerläuft, und jeder Zyklus besteht aus einem Impuls von 0. Das heißt, die Vorderflanke ist eine fallende Flanke und die Hinterflanke ist eine steigende Flanke.
  • CPHA bestimmt das Timing (dh die Phase) der Datenbits relativ zu den Taktimpulsen. Die Umrechnung zwischen diesen beiden Formen ist nicht trivial.
    • Für CPHA=0 ändert die "Out"-Seite die Daten an der Rückflanke des vorhergehenden Taktzyklus, während die "In"-Seite die Daten an (oder kurz nach) der Vorderflanke des Taktzyklus erfasst. Die Außenseite hält die Daten gültig bis zur abfallenden Flanke des aktuellen Taktzyklus. Für den ersten Zyklus muss das erste Bit vor der ansteigenden Taktflanke auf der MOSI-Leitung liegen.
    • Eine alternative Betrachtungsweise besteht darin, dass ein CPHA=0-Zyklus aus einem halben Zyklus mit freiem Takt besteht, gefolgt von einem halben Zyklus mit aktiviertem Takt.
    • Für CPHA = 1 ändert die "Out"-Seite die Daten an der Vorderflanke des aktuellen Taktzyklus, während die "In"-Seite die Daten an (oder kurz nach) der Hinterflanke des Taktzyklus erfasst. Die Außenseite hält die Daten gültig bis zur führenden Flanke des folgenden Taktzyklus. Für den letzten Zyklus hält der Slave die MISO-Leitung gültig, bis die Slave-Auswahl aufgehoben wird.
    • Eine alternative Betrachtungsweise besteht darin, dass ein CPHA = 1-Zyklus aus einem halben Zyklus mit aktiviertem Takt besteht, gefolgt von einem halben Zyklus mit freiem Takt.

Die MOSI- und MISO-Signale sind normalerweise (an ihren Empfangspunkten) für den halben Zyklus bis zum nächsten Taktübergang stabil. SPI-Master- und -Slave-Geräte können durchaus Daten an unterschiedlichen Punkten in diesem Halbzyklus abtasten.

Dadurch wird der Kommunikationskanal zwischen Master und Slave flexibler.

Modusnummern

Die Kombinationen von Polarität und Phasen werden oft als Modi bezeichnet, die üblicherweise nach der folgenden Konvention nummeriert werden, wobei CPOL das höherwertige Bit und CPHA das niederwertige Bit ist:

Für " Microchip PIC " / "ARM-basierte" Mikrocontroller (beachten Sie, dass NCPHA die Inversion von CPHA ist):

SPI-Modus Clock Polarität
(CPOL / CKP)
Taktphase
(CPHA)
Taktflanke
(CKE / NCPHA)
0 0 0 1
1 0 1 0
2 1 0 1
3 1 1 0

Für PIC32MX: SPI-Modus konfigurieren Sie CKP-, CKE- und SMP-Bits. Setzen Sie SMP-Bit und CKP, CKE zwei Bits, die wie oben in der Tabelle konfiguriert sind.

Für andere Mikrocontroller:

Modus CPOL CPHA
0 0 0
1 0 1
2 1 0
3 1 1

Eine andere häufig verwendete Notation stellt den Modus als (CPOL, CPHA) Tupel dar; zB würde der Wert '(0, 1)' CPOL=0 und CPHA=1 anzeigen.

Beachten Sie, dass das Master-Gerät im Vollduplex-Betrieb mit unterschiedlichen Modi senden und empfangen kann. Zum Beispiel könnte es im Modus 0 senden und gleichzeitig im Modus 1 empfangen.

Unabhängige Slave-Konfiguration

Typischer SPI-Bus: Master und drei unabhängige Slaves

In der unabhängigen Slave-Konfiguration gibt es für jeden Slave eine unabhängige Chipauswahlleitung. Auf diese Weise wird SPI normalerweise verwendet. Der Master bestätigt jeweils nur eine Chipauswahl.

Pull-up-Widerstände zwischen Stromquelle und Chipauswahlleitungen werden für Systeme empfohlen, bei denen die Chipauswahlpins des Masters möglicherweise einen undefinierten Zustand annehmen. Wenn separate Softwareroutinen jede Chipauswahl initialisieren und mit ihrem Slave kommunizieren, verhindern Pullup -Widerstände, dass andere nicht initialisierte Slaves antworten.

Da die MISO-Pins der Slaves miteinander verbunden sind, müssen sie Tri-State-Pins (hoch, niedrig oder hochohmig) sein, an denen der hochohmige Ausgang angelegt werden muss, wenn der Slave nicht ausgewählt ist. Slave-Vorrichtungen, die Tri-State nicht unterstützen, können in einer unabhängigen Slave-Konfiguration verwendet werden, indem ein Tri-State-Pufferchip hinzugefügt wird, der durch das Chipauswahlsignal gesteuert wird. (Da pro Slave nur eine einzige Signalleitung tristatisiert werden muss, kann ein typischer Standard-Logikchip, der vier Tristate-Puffer mit unabhängigen Gate-Eingängen enthält, verwendet werden, um bis zu vier Slave-Geräte an einen SPI-Bus anzuschließen.)

Daisy-Chain-Konfiguration

Daisy-chained SPI-Bus: Master und kooperative Slaves

Einige Produkte, die SPI implementieren, können in einer Daisy-Chain- Konfiguration verbunden werden, wobei der erste Slave-Ausgang mit dem zweiten Slave-Eingang verbunden ist usw. Der SPI-Port jedes Slaves ist so ausgelegt, dass er während der zweiten Gruppe von Taktimpulsen eine exakte Kopie von die Daten, die es während der ersten Gruppe von Taktimpulsen empfangen hat. Die gesamte Kette fungiert als Kommunikationsschieberegister ; Daisy-Chaining wird oft mit Schieberegistern durchgeführt, um eine Bank von Ein- oder Ausgängen über SPI bereitzustellen. Jeder Slave kopiert im nächsten Taktzyklus den Eingang zum Ausgang, bis die aktive niedrige SS-Leitung hoch geht. Ein solches Merkmal erfordert nur eine einzelne SS-Leitung vom Master, anstatt für jeden Slave eine separate SS-Leitung.

Andere Anwendungen, die potenziell mit SPI zusammenarbeiten können und eine Daisy-Chain-Konfiguration erfordern , sind SGPIO , JTAG und Two Wire Interface .

Expander-Konfiguration

Eine andere Variante verwendet genau zwei Chip-Selects. Eine Chipauswahl steuert einen Auswahllogikblock, der andere wird von der Auswahllogik geroutet. Die Anwendung ist so verbreitet, dass es seriell gesteuerte Multiplexer gibt. Dadurch kann ein Stecker standardisiert und zukunftssicher gemacht werden, sodass ein Controller bei einem Softwarewechsel viele Geräte unterstützen kann. Eine ähnliche Anwendung kombiniert einen seriell gesteuerten Multiplexer mit einem handelsüblichen USB-zu-SPI-Controller, der von einem PC oder Smartphone gesteuert wird. Dies ermöglicht die Steuerung vieler Arten von "dummen" elektronischen Geräten durch billige, in Massenproduktion hergestellte Computer.

Modifikationen mit hoher Zuverlässigkeit

In elektrisch verrauschten Umgebungen hat der SPI-Standard nur wenige Signale, und es kann wirtschaftlich sein, die Auswirkungen von Gleichtaktrauschen zu reduzieren, indem SPI angepasst wird, um differenzielle Niederspannungssignalisierung zu verwenden . Ein weiterer Vorteil besteht darin, dass die gesteuerten Geräte so ausgelegt werden können, dass sie zurückschleifen, um die Signalintegrität zu testen.

Gültige Mitteilungen

Einige Slave-Geräte ignorieren jegliche SPI-Kommunikation, bei der die Anzahl der Taktimpulse größer als angegeben ist. Anderen ist es egal, ignorieren zusätzliche Eingaben und verschieben weiterhin dasselbe Ausgabebit. Es ist üblich, dass verschiedene Geräte SPI-Kommunikation mit unterschiedlichen Längen verwenden, beispielsweise wenn SPI verwendet wird, um auf die Scan-Kette eines digitalen ICs zuzugreifen, indem ein Befehlswort einer Größe (vielleicht 32 Bit) ausgegeben und dann eine Antwort erhalten wird einer anderen Größe (vielleicht 153 Bit, eines für jeden Pin in dieser Scan-Kette).

Unterbrechungen

SPI-Geräte verwenden manchmal eine andere Signalleitung, um ein Interrupt-Signal an eine Host-CPU zu senden. Beispiele sind Pen-Down-Interrupts von Touchscreen-Sensoren, Temperaturgrenzwarnungen von Temperatursensoren, Alarme, die von Echtzeituhrchips ausgegeben werden, SDIO und Headsetbuchsen-Einfügungen vom Sound-Codec in einem Mobiltelefon. Interrupts werden vom SPI-Standard nicht abgedeckt; ihre Verwendung ist weder verboten noch von der Norm vorgeschrieben. Mit anderen Worten liegen Interrupts außerhalb des Anwendungsbereichs des SPI-Standards und werden optional unabhängig davon implementiert.

Beispiel für Bit-Banging des Master-Protokolls

Unten ist ein Beispiel für das Bit-Banging des SPI-Protokolls als SPI-Master mit CPOL=0, CPHA=0 und acht Bits pro Übertragung. Das Beispiel ist in der Programmiersprache C geschrieben. Da dies CPOL=0 ist, muss der Takt niedrig gezogen werden, bevor die Chipauswahl aktiviert wird. Die Chip-Select-Leitung muss für das Peripheriegerät vor Beginn der Übertragung aktiviert, also in der Regel auf Low getoggelt werden, und danach wieder deaktiviert werden. Die meisten Peripheriegeräte erlauben oder erfordern mehrere Übertragungen, während die Auswahlleitung niedrig ist; diese Routine kann mehrere Male aufgerufen werden, bevor der Chip deselektiert wird.

/*
 * Simultaneously transmit and receive a byte on the SPI.
 *
 * Polarity and phase are assumed to be both 0, i.e.:
 *   - input data is captured on rising edge of SCLK.
 *   - output data is propagated on falling edge of SCLK.
 *
 * Returns the received byte.
 */
uint8_t SPI_transfer_byte(uint8_t byte_out)
{
    uint8_t byte_in = 0;
    uint8_t bit;

    for (bit = 0x80; bit; bit >>= 1) {
        /* Shift-out a bit to the MOSI line */
        write_MOSI((byte_out & bit) ? HIGH : LOW);

        /* Delay for at least the peer's setup time */
        delay(SPI_SCLK_LOW_TIME);

        /* Pull the clock line high */
        write_SCLK(HIGH);

        /* Shift-in a bit from the MISO line */
        if (read_MISO() == HIGH)
            byte_in |= bit;

        /* Delay for at least the peer's hold time */
        delay(SPI_SCLK_HIGH_TIME);

        /* Pull the clock line low */
        write_SCLK(LOW);
    }

    return byte_in;
}

Vor-und Nachteile

Vorteile

  • Vollduplex-Kommunikation in der Standardversion dieses Protokolls
  • Push-Pull-Treiber (im Gegensatz zu Open Drain) bieten eine gute Signalintegrität und hohe Geschwindigkeit
  • Höherer Durchsatz als I²C oder SMBus . Keine Beschränkung auf eine maximale Taktfrequenz, wodurch potenziell hohe Geschwindigkeiten möglich sind
  • Vollständige Protokollflexibilität für die übertragenen Bits
    • Nicht auf 8-Bit-Wörter beschränkt
    • Beliebige Wahl von Nachrichtengröße, Inhalt und Zweck
  • Extrem einfache Hardware-Anbindung
    • Typischerweise geringerer Leistungsbedarf als I²C oder SMBus aufgrund weniger Schaltungen (einschließlich Pull-Up-Widerstände)
    • Keine Arbitrierung oder zugehörige Fehlermodi - im Gegensatz zu CAN-Bus
    • Slaves verwenden die Uhr des Masters und benötigen keine Präzisionsoszillatoren
    • Slaves benötigen keine eindeutige Adresse  – im Gegensatz zu I²C oder GPIB oder SCSI
    • Transceiver werden nicht benötigt - im Gegensatz zu CAN-Bus
  • Verwendet nur vier Pins auf IC-Gehäusen und Drähte in Platinenlayouts oder Steckverbindern, viel weniger als parallele Schnittstellen
  • Höchstens ein eindeutiges Bussignal pro Gerät (Chip Select); alle anderen werden geteilt
  • Die Signale sind unidirektional und ermöglichen eine einfache galvanische Trennung
  • Einfache Softwareimplementierung

Nachteile

  • Benötigt mehr Pins auf IC-Gehäusen als I²C , auch in der Dreileiter- Variante
  • Keine In-Band-Adressierung; Auf gemeinsam genutzten Bussen sind Out-of-Band-Chip-Select-Signale erforderlich
  • Erweiterbarkeit stark reduziert, wenn mehrere Slaves mit unterschiedlichen SPI-Modi erforderlich sind. Der Zugriff wird verlangsamt, wenn der Master häufig in verschiedenen Modi neu initialisieren muss.
  • Keine Hardware- Flusskontrolle durch den Slave (der Master kann jedoch die nächste Taktflanke verzögern, um die Übertragungsrate zu verlangsamen)
  • Keine Hardware-Slave-Quittung (der Master könnte ins Nirgendwo senden und es nicht wissen)
  • Unterstützt normalerweise nur ein Master-Gerät (abhängig von der Hardware-Implementierung des Geräts)
  • Es ist kein Fehlerprüfprotokoll definiert
  • Ohne einen formalen Standard ist eine Validierung der Konformität nicht möglich
  • Bewältigt nur kurze Distanzen im Vergleich zu RS-232 , RS-485 oder CAN-Bus . (Seine Reichweite kann durch die Verwendung von Transceivern wie RS-422 erweitert werden .)
  • Opto-Isolatoren im Signalpfad begrenzen die Taktgeschwindigkeit für die MISO-Übertragung aufgrund der zusätzlichen Verzögerungen zwischen Takt und Daten
  • Viele vorhandene Variationen, was es schwierig macht, Entwicklungstools wie Hostadapter zu finden, die diese Variationen unterstützen
  • SPI unterstützt kein Hot-Swapping (dynamisches Hinzufügen von Knoten).
  • Interrupts müssen entweder mit Out-of-Band-Signalen implementiert oder durch periodisches Polling ähnlich wie bei USB 1.1 und 2.0 gefälscht werden.
  • Einige der unten definierten Varianten wie Dual SPI , Quad SPI und dreiadrige serielle Busse sind Halbduplex.

Anwendungen

Serieller SPI-Speicher von Atmel

Die Einsparungen an Platinenplatz im Vergleich zu einem parallelen I/O-Bus sind beträchtlich und haben SPI zu einer soliden Rolle bei eingebetteten Systemen verholfen. Dies gilt für die meisten System-on-a-Chip- Prozessoren, sowohl für höherwertige 32-Bit-Prozessoren wie diejenigen, die ARM , MIPS oder PowerPC verwenden, als auch für andere Mikrocontroller wie AVR , PIC und MSP430 . Diese Chips enthalten normalerweise SPI-Controller, die entweder im Master- oder Slave-Modus ausgeführt werden können. Systeminterne programmierbare AVR-Controller (einschließlich leerer Controller) können über eine SPI-Schnittstelle programmiert werden.

Chip- oder FPGA- basierte Designs verwenden manchmal SPI, um zwischen internen Komponenten zu kommunizieren; On-Chip-Immobilien können so teuer sein wie ihre On-Board-Vetter.

Die Vollduplex-Fähigkeit macht SPI für Single-Master/Single-Slave-Anwendungen sehr einfach und effizient. Einige Geräte verwenden den Vollduplex-Modus, um einen effizienten, schnellen Datenstrom für Anwendungen wie digitales Audio , digitale Signalverarbeitung oder Telekommunikationskanäle zu implementieren , aber die meisten handelsüblichen Chips bleiben bei Halbduplex-Anforderungs-/Antwortprotokollen.

SPI wird verwendet, um mit einer Vielzahl von Peripheriegeräten zu kommunizieren, wie z

Bei Hochleistungssystemen verwenden FPGAs manchmal SPI als Slave zu einem Host, als Master zu Sensoren oder als Flash-Speicher zum Bootstrap, wenn sie SRAM-basiert sind.

Obwohl es einige Ähnlichkeiten zwischen dem SPI-Bus und dem JTAG- Protokoll (IEEE 1149.1-2013) gibt, sind sie nicht austauschbar. Der SPI-Bus ist für eine schnelle On-Board-Initialisierung von Geräteperipherie gedacht, während das JTAG-Protokoll einen zuverlässigen Testzugriff auf die I/O-Pins von einem externen Controller mit weniger präzisen Signalverzögerungs- und Skew-Parametern bieten soll. Obwohl es sich nicht unbedingt um eine pegelempfindliche Schnittstelle handelt, unterstützt das JTAG-Protokoll die Wiederherstellung von Setup- und Hold-Verletzungen zwischen JTAG-Geräten, indem die Taktrate reduziert oder die Arbeitszyklen des Taktgebers geändert werden. Folglich soll die JTAG-Schnittstelle keine extrem hohen Datenraten unterstützen.

SGPIO ist im Wesentlichen ein weiterer (inkompatibler) Anwendungs-Stack für SPI, der für bestimmte Backplane-Management-Aktivitäten entwickelt wurde. SGPIO verwendet 3-Bit-Nachrichten.

Normen

Der SPI-Bus ist ein De-facto- Standard . Das Fehlen eines formalen Standards spiegelt sich jedoch in einer Vielzahl von Protokolloptionen wider. Unterschiedliche Wortgrößen sind üblich. Jedes Gerät definiert sein eigenes Protokoll, auch ob es Befehle überhaupt unterstützt. Einige Geräte können nur übertragen werden; andere sind nur empfangen. Chip-Selects sind manchmal eher aktiv-hoch als aktiv-niedrig. Einige Protokolle senden das niedrigstwertige Bit zuerst.

SPI Bus wurde ursprünglich von Motorola definiert . Das ursprüngliche definierende Dokument war Motorola Application Node AN991. Als Freescale aus Motorola ausgegliedert wurde, lag die Verantwortung für AN991 bei Freescale. Als NXP Freescale erwarb, übernahm NXP auch die Verantwortung für AN991, das zuletzt im Januar 2002 als AN991/D überarbeitet wurde und immer noch als "offizielles" definierendes Dokument für SPI Bus dient.

Variationen

Einige Geräte weisen geringfügige Abweichungen von den oben beschriebenen CPOL/CPHA-Modi auf. Das Senden von Daten vom Slave zum Master kann die gegenüberliegende Taktflanke als Master zum Slave verwenden. Geräte benötigen oft eine zusätzliche Taktzeit vor dem ersten oder nach dem letzten Takt oder zwischen einem Befehl und seiner Antwort. Einige Geräte haben zwei Uhren, eine zum Lesen von Daten und eine andere zum Übertragen in das Gerät. Viele der Lesetakte laufen von der Chipauswahlleitung.

Einige Geräte benötigen ein zusätzliches Flusskontrollsignal vom Slave zum Master, das anzeigt, wann die Daten bereit sind. Dies führt zu einem 5-Draht-Protokoll anstelle des üblichen 4. Ein solches Bereit- oder Freigabesignal ist oft aktiv-niedrig und muss an wichtigen Stellen wie nach Befehlen oder zwischen Wörtern aktiviert werden. Ohne ein solches Signal müssen die Datenübertragungsraten möglicherweise erheblich verlangsamt werden oder Protokolle müssen möglicherweise Dummy-Bytes eingefügt haben, um den ungünstigsten Fall für die Slave-Antwortzeit zu berücksichtigen. Beispiele hierfür sind das Initiieren einer ADC-Umwandlung, das Adressieren der richtigen Seite des Flash-Speichers und die Verarbeitung eines ausreichenden Befehls, damit die Gerätefirmware das erste Wort der Antwort laden kann. (Viele SPI-Master unterstützen dieses Signal nicht direkt und verlassen sich stattdessen auf feste Verzögerungen.)

Viele SPI-Chips unterstützen nur Nachrichten, die ein Vielfaches von 8 Bit sind. Solche Chips können mit dem nicht interoperabel JTAG oder SGPIO Protokolle oder jedes andere Protokoll , das Nachrichten , die nicht ein Vielfaches von 8 Bits erfordert.

Es gibt auch Unterschiede auf Hardwareebene. Einige Chips kombinieren MOSI und MISO zu einer einzigen Datenleitung (SI/SO); dies wird manchmal als „Dreidraht“-Signalisierung bezeichnet (im Gegensatz zu normalem „Vierdraht“-SPI). Eine andere Variante von SPI entfernt die Chipauswahlleitung und verwaltet den Eintritt/Austritt der Protokollzustandsmaschine mit anderen Methoden. Jeder, der einen externen Anschluss für SPI benötigt, definiert seine eigenen: UEXT , JTAG-Anschluss , Secure Digital- Kartensteckplatz usw. Die Signalpegel hängen ganz von den beteiligten Chips ab.

SafeSPI ist ein Industriestandard für SPI in Automobilanwendungen. Sein Hauptaugenmerk liegt auf der Übertragung von Sensordaten zwischen verschiedenen Geräten.

Entwicklungswerkzeuge

Bei der Entwicklung oder Fehlerbehebung von Systemen, die SPI verwenden, kann die Sichtbarkeit auf der Ebene der Hardwaresignale wichtig sein.

Hostadapter

Es gibt eine Reihe von USB- Hardwarelösungen, um Computer mit Linux- , Mac- oder Windows- , SPI-Master- oder -Slave-Funktionen bereitzustellen . Viele von ihnen bieten auch Skript- oder Programmierfunktionen (Visual Basic, C/C++, VHDL usw.).

Ein SPI-Host-Adapter ermöglicht es dem Benutzer, die Rolle eines Masters auf einem SPI-Bus direkt von einem PC aus zu spielen. Sie werden für eingebettete Systeme, Chips (FPGA, ASIC und SoC) und Peripherietests, Programmierung und Debugging verwendet.

Die wichtigsten Parameter von SPI sind: die maximal unterstützte Frequenz für die serielle Schnittstelle, die Befehls-zu-Befehl-Latenz und die maximale Länge für SPI-Befehle. Auf dem Markt sind heute SPI-Adapter zu finden, die bis zu 100 MHz serielle Schnittstellen mit praktisch unbegrenzter Zugriffslänge unterstützen.

Da das SPI-Protokoll ein De-facto-Standard ist, können einige SPI-Hostadapter auch andere Protokolle als das herkömmliche 4-Draht-SPI unterstützen (z. B. die Unterstützung des Quad-SPI-Protokolls oder eines anderen benutzerdefinierten seriellen Protokolls, das von SPI abgeleitet ist).

Protokollanalysatoren

SPI-Protokollanalysatoren sind Werkzeuge, die einen SPI-Bus abtasten und die elektrischen Signale decodieren, um eine übergeordnete Ansicht der auf einem bestimmten Bus übertragenen Daten zu erhalten.

Oszilloskope

Die meisten Oszilloskophersteller bieten oszilloskopbasierte Triggerung und Protokolldecodierung für SPI an. Die meisten unterstützen 2-, 3- und 4-Draht-SPI. Die Trigger- und Dekodierungsfunktion wird normalerweise als optionales Extra angeboten. Auf SPI-Signale kann über analoge Oszilloskopkanäle oder über digitale MSO-Kanäle zugegriffen werden.

Logikanalysatoren

Bei der Entwicklung oder Fehlerbehebung des SPI-Busses kann die Untersuchung von Hardwaresignalen sehr wichtig sein. Logikanalysatoren sind Werkzeuge, die Signale sammeln, analysieren, decodieren und speichern, damit Benutzer die Hochgeschwindigkeitswellenformen in Ruhe anzeigen können. Logikanalysatoren zeigen Zeitstempel jeder Signalpegeländerung an, was beim Auffinden von Protokollproblemen helfen kann. Die meisten Logikanalysatoren können Bussignale in High-Level-Protokolldaten decodieren und ASCII-Daten anzeigen.

Verwandte Begriffe

Intelligente SPI-Controller

Eine serielle Queued Peripheral Interface ( QSPI ; siehe auch Quad SPI) ist eine Art von SPI - Controller, der eine verwendete Datenwarteschlange zur Übertragung von Daten über den SPI - Bus. Es verfügt über einen Wrap-Around- Modus, der kontinuierliche Übertragungen zur und von der Warteschlange mit nur zeitweiliger Aufmerksamkeit der CPU ermöglicht. Folglich erscheinen die Peripheriegeräte der CPU als speicherabgebildete parallele Geräte. Diese Funktion ist bei Anwendungen wie der Steuerung eines A/D-Wandlers nützlich . Andere programmierbare Funktionen in QSPI sind Chip-Selects und Übertragungslänge/-verzögerung.

SPI-Controller von verschiedenen Anbietern unterstützen unterschiedliche Feature-Sets; solche DMA-Warteschlangen sind nicht ungewöhnlich, obwohl sie eher mit separaten DMA-Maschinen als dem SPI-Controller selbst verbunden sein können, wie er beispielsweise vom Multichannel Buffered Serial Port ( MCBSP ) verwendet wird. Die meisten SPI-Master-Controller unterstützen bis zu vier Chip-Selects, obwohl einige Chip-Selects separat über GPIO-Leitungen verwalten müssen.

Mikrodraht

Serielles Fairchild EEPROM mit Microwire-Bus

Microwire, oft auch μWire geschrieben , ist im Wesentlichen ein Vorläufer von SPI und ein Warenzeichen von National Semiconductor . Es ist eine strikte Teilmenge von SPI: Halbduplex und verwendet den SPI-Modus 0. Microwire-Chips benötigen tendenziell langsamere Taktraten als neuere SPI-Versionen; vielleicht 2 MHz gegenüber 20 MHz. Einige Microwire-Chips unterstützen auch einen Drei-Draht-Modus .

Mikrodraht/Plus

Microwire/Plus ist eine Weiterentwicklung von Microwire und bietet Vollduplex-Kommunikation und Unterstützung für die SPI-Modi 0 und 1. Es gab keine spezifizierte Verbesserung der seriellen Taktgeschwindigkeit.

Serielle 3-Draht-Busse

Wie bereits erwähnt, verwendet eine Variante von SPI eine einzige bidirektionale Datenleitung (Slave-Out/Slave-In, genannt SISO oder Master-Out/Master-In, genannt MOMI) anstelle von zwei unidirektionalen (MOSI und MISO). Diese Variante ist auf einen Halbduplex-Modus beschränkt. Es wird tendenziell für Teile mit geringerer Leistung verwendet, wie z. B. kleine EEPROMs, die nur während des Systemstarts und bestimmter Sensoren verwendet werden, und Microwire. Nur wenige SPI-Master-Controller unterstützen diesen Modus; obwohl es in Software oft leicht gebändigt werden kann.

Dual-SPI

In Fällen, in denen die Vollduplex-Natur von SPI nicht verwendet wird, verwendet eine Erweiterung beide Datenpins in einer Halbduplex-Konfiguration, um zwei Bits pro Taktzyklus zu senden. Typischerweise wird ein Befehlsbyte gesendet, um eine Antwort im Dualmodus anzufordern, wonach die MOSI-Leitung zu SIO0 (serielle E/A 0) wird und gerade Bits trägt, während die MISO-Leitung zu SIO1 wird und ungerade Bits trägt. Die Daten werden weiterhin msbit zuerst übertragen, aber SIO1 trägt die Bits 7, 5, 3 und 1 jedes Bytes, während SIO0 die Bits 6, 4, 2 und 0 trägt.

Dies ist besonders bei SPI-ROMs beliebt, die große Datenmengen senden müssen, und gibt es in zwei Varianten:

  • Duale Lesebefehle akzeptieren das Senden und die Adresse vom Master im Single-Modus und geben die Daten im Dual-Modus zurück.
  • Dual-I/O-Befehle senden den Befehl im Single-Modus und senden dann die Adresse und geben Daten im Dual-Modus zurück.

Quad-SPI

Quad SPI ( QSPI ; siehe auch Queued SPI) geht über Dual SPI hinaus, fügt zwei weitere I/O-Leitungen (SIO2 und SIO3) hinzu und sendet 4 Datenbits pro Taktzyklus. Auch hier wird es durch spezielle Befehle angefordert, die den Quad-Modus aktivieren, nachdem der Befehl selbst im Single-Modus gesendet wurde.

SQI Typ 1: Befehle werden auf einer einzigen Leitung gesendet, aber Adressen und Daten werden auf vier Leitungen gesendet

SQI Typ 2: Befehle und Adressen werden auf einer einzigen Leitung gesendet, aber Daten werden auf vier Leitungen gesendet/empfangen

QPI/SQI

Zur weiteren Erweiterung von Quad SPI unterstützen einige Geräte einen "Quad Everything"-Modus, bei dem die gesamte Kommunikation über 4 Datenleitungen erfolgt, einschließlich der Befehle. Dies wird unterschiedlich als "QPI" (nicht zu verwechseln mit Intel QuickPath Interconnect ) oder "serial quad I/O" (SQI) bezeichnet.

Dies erfordert die Programmierung eines Konfigurationsbits im Gerät und erfordert nach dem Zurücksetzen Sorgfalt, um die Kommunikation aufzubauen.

Doppelte Datenrate

Zusätzlich zur Verwendung mehrerer Leitungen für I/O erhöhen einige Geräte die Übertragungsrate, indem sie die Übertragung mit doppelter Datenrate verwenden.

Intel Enhanced Serial Peripheral Interface Bus

Intel hat einen Nachfolger seines Low Pin Count (LPC)-Busses entwickelt, der als Enhanced Serial Peripheral Interface Bus, kurz eSPI, bezeichnet wird. Intel zielt darauf ab, die Anzahl der erforderlichen Pins auf Motherboards im Vergleich zu Systemen mit LPC zu reduzieren, einen höheren verfügbaren Durchsatz als LPC zu haben, die Arbeitsspannung auf 1,8 Volt zu reduzieren, um kleinere Chip-Herstellungsprozesse zu ermöglichen, es eSPI-Peripheriegeräten zu ermöglichen, SPI-Flash-Geräte mit zu teilen des Hosts (der LPC-Bus erlaubte keine Verwendung von Firmware-Hubs durch LPC-Peripheriegeräte), tunneln frühere Out-of-Band-Pins durch den eSPI-Bus und ermöglichen Systemdesignern, Kosten und Leistung abzuwägen.

Der eSPI-Bus kann entweder mit SPI-Geräten geteilt werden, um Pins zu sparen, oder vom SPI-Bus getrennt sein, um mehr Leistung zu ermöglichen, insbesondere wenn eSPI-Geräte SPI-Flash-Geräte verwenden müssen.

Dieser Standard definiert ein Alert#-Signal, das von einem eSPI-Slave verwendet wird, um Dienste vom Master anzufordern. In einem leistungsorientierten Design oder einem Design mit nur einem eSPI-Slave ist der Alert#-Pin jedes eSPI-Slaves mit einem Alert#-Pin des eSPI-Masters verbunden, der jedem Slave zugeordnet ist, sodass der eSPI-Master eine niedrige Latenzzeit gewähren kann Service, da der eSPI-Master weiß, welcher eSPI-Slave einen Service benötigt und nicht alle Slaves abfragen muss, um festzustellen, welches Gerät einen Service benötigt. In einem Budget-Design mit mehr als einem eSPI-Slave sind alle Alert#-Pins der Slaves mit einem Alert#-Pin am eSPI-Master in einer verdrahteten ODER- Verbindung verbunden, was erfordert, dass der Master alle Slaves abfragt , um dies zu bestimmen welche benötigen einen Service, wenn das Alert#-Signal von einem oder mehreren Peripheriegeräten, die einen Service benötigen, auf Low gezogen wird. Erst nachdem alle Geräte gewartet wurden, wird das Alert#-Signal auf High gezogen, da keiner der eSPI-Slaves einen Service benötigt und daher das Alert#-Signal auf Low zieht.

Dieser Standard ermöglicht es Designern, 1-Bit-, 2-Bit- oder 4-Bit-Kommunikation mit Geschwindigkeiten von 20 bis 66 MHz zu verwenden, um es Designern zu ermöglichen, Leistung und Kosten abzuwägen.

Alle Kommunikationen außerhalb des Bandes des LPC-Busses, wie Universal Input/Output (GPIO) und System Management Bus (SMBus), werden über virtuelle Wire Cycles bzw. Out-of-Band Message Cycles durch den eSPI-Bus getunnelt um diese Pins mit eSPI aus Motherboard-Designs zu entfernen.

Dieser Standard unterstützt Standardspeicherzyklen mit Längen von 1 Byte bis 4 Kilobyte Daten, kurze Speicherzyklen mit Längen von 1, 2 oder 4 Byte, die im Vergleich zu Standardspeicherzyklen deutlich weniger Overhead haben, und I/O-Zyklen mit Längen von 1 , 2 oder 4 Byte Daten, die ebenfalls einen geringen Overhead haben. Dies reduziert den Overhead im Vergleich zum LPC-Bus, bei dem alle Zyklen mit Ausnahme des 128-Byte-Firmware-Hub-Lesezyklus mehr als die Hälfte des gesamten Durchsatzes und der gesamten Zeit im Overhead aufwenden, erheblich. Der Standardspeicherzyklus lässt eine Länge von 1 Byte bis 4 Kilobyte zu, damit sein größerer Overhead über eine große Transaktion amortisiert werden kann. eSPI-Slaves dürfen Busmasterversionen aller Speicherzyklen initiieren. Busmaster-I/O-Zyklen, die durch die LPC-Busspezifikation eingeführt wurden, und DMA im ISA-Stil einschließlich der 32-Bit-Variante, die durch die LPC-Busspezifikation eingeführt wurden, sind in eSPI nicht vorhanden. Daher sind Busmaster-Speicherzyklen die einzigen erlaubten DMA in diesem Standard.

eSPI-Slaves dürfen den eSPI-Master als Proxy verwenden, um im Auftrag des anfordernden eSPI-Slaves Flash-Operationen auf einem Standard-SPI-Flash-Speicher-Slave durchzuführen.

Die 64-Bit-Speicheradressierung wird ebenfalls hinzugefügt, ist jedoch nur zulässig, wenn keine entsprechende 32-Bit-Adresse vorhanden ist.

Der Intel Z170-Chipsatz kann so konfiguriert werden, dass er entweder diesen Bus oder eine Variante des LPC-Busses implementiert, der seine DMA-Fähigkeit im ISA-Stil fehlt und die auf 24 MHz statt der üblichen 33 MHz untertaktet ist.

Siehe auch

Verweise

Externe Links