
SPI-Schnittstelle: Modi, Timing und Verdrahtung
Verstehen Sie CPOL, CPHA, MOSI, MISO, SCLK und CS und bauen Sie dann einen zuverlässigen SPI-Bus mit Timing, Logikebenen, Topologien und Debugging-Anleitung.
Geschrieben und technisch geprüft vonElectroDesignForge Engineering Team
Redaktionsprozess ansehenReferenzleitfaden
SPI (Serial Peripheral Interface) verbindet einen Controller mit nahe gelegenen ICs wie Flash-Speichern, ADCs/DACs, Displays, Sensoren und HF-Geräten. Diese synchrone serielle Verbindung ist schnell und vollduplex, aber es ist kein vollständiger Standard: Framing und elektrische Grenzen kommen aus jedem Datenblatt.
Schnellreferenz
| Signal | Richtung vom Controller | Funktion | Schlüsselpunkt |
|---|---|---|---|
| SCLK / SCK | Ausgangsleistung | Serienuhr | Seine Leerlaufhöhe wird durch CPOL. |
| MOSI | Controller → Peripherie | Übermittelte Daten | Auch COPI, SDI oder DIN genannt. |
| MISO | periphere Steuerung | Erhaltene Daten | Auch CIPO, SDO oder DOUT genannt; hohe Impedanz, wenn nicht ausgewählt. |
| CS / SS / nCS | Output, oft aktiv-niedrig | Auswahl und Rahmengrenze | Eine unabhängige CS wird normalerweise pro Peripherie benötigt. |
| GND | geteilt | Referenz- und Rückweg | Halten Sie es neben Signalen, vor allem off-board. |
MOSI und MISO gehen von der Regler Sichtweite. COPI (Controller Out, Peripheral In) und CIPO (Controller In, Peripheral Out) machen die Rollen klar, wenn Sie einen Link ohne Schaltplan diskutieren.
SPI definiert weder Adressierung, Bestätigung noch eine universelle Höchstrate. Das Anwendungsprotokoll definiert Befehle, Registeradressen, Dummybytes und Antworten. Ein Logikanalysator kann daher gültige Bits decodieren, während ein Gerät still bleibt, weil CS oder Command Framing falsch ist.
Vor der Verkabelung prüfen: Logikpegel, erlaubte SCLK-Rate, SPI-Modus, MSB/LSB-Ordnung, Wortlänge, CS-Aktivzustand und CS-Timing. 1.8 V, 2.5 V, 3.3 V und 5 V Domänen sind nicht automatisch kompatibel.
Die vier Modi: CPOL und CPHA
- CPOL (Uhr Polarität) setzt im Leerlauf SCLK: 0 = niedrig, 1 = hoch.
- CPHA (Taktphase) stellt die Abtastkante ein. Mit CPHA = 0 tastet die erste Flanke nach CS das erste Bit ab; mit CPHA = 1 ändert sie dieses Bit und die folgende Flanke tastet es ab.
| Modus | CPOL | CPHA | SCLK im Leerlauf | Probenkante | Datenänderungen am |
|---|---|---|---|---|---|
| 0 | 0 | 0 | niedrig | Steigend | Fallen |
| 1 | 0 | 1 | niedrig | Fallen | Steigend |
| 2 | 1 | 0 | hoch | Fallen | Steigend |
| 3 | 1 | 1 | hoch | Steigend | Fallen |
Die Vorderkante ist der erste Übergang weg vom Leerlauf und Hinterkante ist die zweite. CPHA = 0 Proben an der Vorderkante; CPHA = 1 Proben an der Hinterkante. Dies funktioniert für beide CPOL-Einstellungen.
Lesen eines Timing Diagramms
- Überprüfen Sie SCLK vor CS: das ist CPOL.
- Finden Sie den Rand, an dem stabile Daten gelesen werden: das ist CPHA.
- Bei CPHA = 0 muss das erste Bit vor der ersten Flanke gültig sein.
- Bestätigen Sie Ausgabeverzögerungen im Datenblatt; Daten ändern sich nicht immer genau am gegenüberliegenden Rand.
Falsches CPHA verschiebt oft Bits; falsches CPOL liest eine plausible Sequenz zu den falschen Zeitpunkten. 0x00, 0xFF oder eine ungültige ID sind mögliche Symptome, keine schlüssigen Diagnosen.
Zeitpunkt jenseits der Frequenz
| Parameter | Bedeutung | Risiko bei Verletzung |
|---|---|---|
fSCLK | maximale Taktrate | Intermittierende Fehler oder instabile Probenahme |
tSU(D) | MOSI/MISO-Einstellung vor Probenkante | Bit auf der falschen Ebene gelesen |
tH(D) | Daten halten nach Probenkante | Nächstes Bit beschädigt aktuelles Bit |
tCSS | Aktives CS zum ersten SCLK Rand | Erster Befehl ignoriert oder verschoben |
tCSH | letzte Flanke zu inaktivem CS | Last Bit nicht akzeptiert |
tCSHI | CS-Inaktivierungszeit zwischen Frames | Interner Zustand nicht zurückgesetzt |
tDO | MISO-Ausgabeverzögerung | Beprobung zu früh bei hoher Geschwindigkeit |
Das Timing-Budget umfasst Level-Translator-Verzögerung, Trace- oder Kabelflugzeit, reale Flankenrate und kapazitive Last. Eine Rate, die auf einem kurzen Board funktioniert, kann nach dem Hinzufügen eines Steckers oder einer Verzweigung fehlschlagen.
Für den üblichen Active-Low-CS: SCLK in seinem CPOL-Zustand halten, CS behaupten, warten tCSS, das erste Bit früh genug für CPHA = 0 präsentieren, Flanken erzeugen und dann warten tCSH vor Freigabe von CS. Einige Teile erfordern CS low über eine gesamte Befehls-Adressdatensequenz; andere führen eine Operation aus, wenn CS steigt.
Verdrahtung MOSI, MISO, SCLK und CS
Controller MOSI ─────────► Peripheral SDI / DIN
Controller MISO ◄───────── Peripheral SDO / DOUT
Controller SCLK ─────────► Peripheral SCK
Controller nCS ─────────► Peripheral nCS
GND ─────────► GND
MISO kann nur geteilt werden, wenn jedes nicht ausgewählte Peripheriegerät wirklich hochohmig wird. Ein Pull-Widerstand setzt einen Ruhezustand, löst jedoch niemals zwei aktive Ausgänge auf, die sich gegenseitig bekämpfen.
SCLK ist oft am kritischsten: Es schaltet jedes Bit, synchronisiert jeden Empfänger und kann klingeln. Halten Sie es kurz, über eine kontinuierliche Bodenebene und weg von empfindlichen analogen Eingängen. Ein Serienwiderstand von ein paar zehn Ohm beim Fahrer kann eine Punkt-zu-Punkt-Verbindung dämpfen; den Wert mit einem Oszilloskop validieren.
CS erlaubt nur eine Peripherie zu beantworten. Ein Pull-up in Richtung inaktiv ist während des Controller-Resets nützlich, nachdem interne Pulls, Stromverbrauch und Anstiegszeitanforderungen überprüft wurden.
SPI-Topologien
Star mit unabhängigem CS
SCLK und MOSI gehen zu jedem IC; jeder IC erhält seinen eigenen CS. Nur der ausgewählte Teil steuert MISO.
┌──────────► Peripheral A
Controller ─ SCLK ├──────────► Peripheral B
─ MOSI ├──────────► Peripheral C
─ MISO ◄────────── shared outputs, high impedance when unselected
─ CSA ───────────► A
─ CSB ───────────► B
─ CSC ───────────► C
Dies ist die empfohlene Topologie: Sie ist einfach zu debuggen und leitet keine Bytes durch andere Geräte. Wenn GPIOs knapp sind, kann ein Decoder oder Expander CS-Signale erzeugen; fügen Sie seine Verzögerung und Power-Up-Zustand in das Design.
Daisy-Kette
Einige Schieberegister und LED-Treiber sind für Daisy-Ketten konzipiert. Ihre serielle Ausgabe speist den nächsten Eingang; Sie teilen sich SCLK und CS.
Controller MOSI ─► Device 1 ─► Device 2 ─► Device 3
Controller SCLK ─► all devices
Controller CS ─► all devices
Controller MISO ◄─ final device output, if available
Die Frame-Länge ist die Summe aller Gerätewörter und die physische Ordnung bestimmt die Byte-Ordnung. Dies ist nicht für normale SPI-Peripheriegeräte geeignet, die sich einfach einen Bus teilen.
Shared Bus und Signalintegrität
Jeder Ast ist ein Stub, der Kanten verschlechtert, wenn SCLK zunimmt. Bevorzugt kompakte Verteilung und kurze Zweige. Für Kabel- oder Board-to-Board-Verbindungen, reduzieren fSCLK, eine nahe Bodenrückführung und Messung am Empfänger. SPI ist keine differenzielle Schnittstelle, die für große Entfernungen entwickelt wurde.
| Lage | Empfohlene Praxis |
|---|---|
| Ein IC, sehr kurze Spuren | Direktverbindung; Validierung von Modus- und Logikebenen |
| Mehrere ICs auf einem Board | Unabhängiges CS, MISO-Hochohmigkeit, wenn nicht ausgewählt |
| SCLK-Ring | Reihenwiderstand in der Nähe von Controller; Inspektion mit Oszilloskop |
| Kabel oder Verbindungsleitungen | Niedrigere Rate, Interleave GND, Limitlänge, bei Bedarf Transceiver verwenden |
| Viele CS-Linien | Decoder, Schieberegister oder Expander mit sicherem Einschaltzustand |
Logische Ebenen und Debugging
Vergleichen Sie VIH/VIL-Schwellenwerte und absolute Maximalwerte in beiden Richtungen. Ein 1,8 V MISO kann für einen 3,3 V-Eingang zu niedrig sein; ein 5 V-Ausgang kann einen nicht toleranten 3,3 V-Eingang beschädigen. Bidirektionale MOSFET-Übersetzer, die in I2C üblich sind, sind nicht automatisch für schnelles SCLK oder MOSI geeignet: Wählen Sie einen Puffer oder Übersetzer, der für die gewählten Pegel, Geschwindigkeit und Last ausgelegt ist.
- Beginnen Sie mit einem Peripheriegerät bei 100 kHz oder darunter.
- Überprüfen Sie Leistung, GND, Reset und CS-Zustand vor den Daten.
- Messen Sie SCLK, CS, MOSI und MISO zusammen, ausgelöst durch aktive CS.
- Überprüfen Sie CPOL/CPHA, Bitreihenfolge und genaue Edge Count pro Frame.
- Lesen Sie eine dokumentierte ID oder Statusregister, dann erhöhen Sie die Rate schrittweise.
Ein Logikanalysator überprüft das Protokoll; ein Oszilloskop ist für Kanten, Überschwingen, Rauschen und Reflexionen erforderlich. Sonde in der Nähe des peripheren Eingangs: Nur am Controller messen kann ein Leitungsproblem verbergen.
Checkliste
- CPOL, CPHA, Bitreihenfolge und Wortlänge explizit in Schaltplan und Firmware dokumentiert.
- Ein CS pro Peripheriegerät, es sei denn, es wird eine datenblattdefinierte Kette verwendet.
- MISO freigegeben, wenn nicht ausgewählt; keine Ausgabekonflikte.
- Logische Schwellenwerte, absolute Maxima und Timing in beiden Richtungen überprüft.
- Kurze SCLK über Dauererde; jeder Serienwiderstand validiert.
- Sicherer CS-Zustand beim Reset und Power-Up.
- Empfängerseitige Messung nach Hinzufügen von Kabel, Stecker, Übersetzer oder Zweig.
Referenzen
- NXP — SPI Block Guide, Rev. 3.0
- Mikrochip — serielle SPI-Schnittstelle
- Ausgewählte Controller und periphere Datenblätter: Ihre Modi, Timing, Level und Frame-Sequenzen haben Vorrang vor diesen allgemeinen Konventionen.