ElectroDesignForgeElectroDesignForge
Signale und SchnittstellenPCB-Design

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 ansehen

Referenzleitfaden

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

SignalRichtung vom ControllerFunktionSchlüsselpunkt
SCLK / SCKAusgangsleistungSerienuhrSeine Leerlaufhöhe wird durch CPOL.
MOSIController → PeripherieÜbermittelte DatenAuch COPI, SDI oder DIN genannt.
MISOperiphere SteuerungErhaltene DatenAuch CIPO, SDO oder DOUT genannt; hohe Impedanz, wenn nicht ausgewählt.
CS / SS / nCSOutput, oft aktiv-niedrigAuswahl und RahmengrenzeEine unabhängige CS wird normalerweise pro Peripherie benötigt.
GNDgeteiltReferenz- und RückwegHalten 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.
ModusCPOLCPHASCLK im LeerlaufProbenkanteDatenänderungen am
000niedrigSteigendFallen
101niedrigFallenSteigend
210hochFallenSteigend
311hochSteigendFallen

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

  1. Überprüfen Sie SCLK vor CS: das ist CPOL.
  2. Finden Sie den Rand, an dem stabile Daten gelesen werden: das ist CPHA.
  3. Bei CPHA = 0 muss das erste Bit vor der ersten Flanke gültig sein.
  4. 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

ParameterBedeutungRisiko bei Verletzung
fSCLKmaximale TaktrateIntermittierende Fehler oder instabile Probenahme
tSU(D)MOSI/MISO-Einstellung vor ProbenkanteBit auf der falschen Ebene gelesen
tH(D)Daten halten nach ProbenkanteNächstes Bit beschädigt aktuelles Bit
tCSSAktives CS zum ersten SCLK RandErster Befehl ignoriert oder verschoben
tCSHletzte Flanke zu inaktivem CSLast Bit nicht akzeptiert
tCSHICS-Inaktivierungszeit zwischen FramesInterner Zustand nicht zurückgesetzt
tDOMISO-AusgabeverzögerungBeprobung 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.

LageEmpfohlene Praxis
Ein IC, sehr kurze SpurenDirektverbindung; Validierung von Modus- und Logikebenen
Mehrere ICs auf einem BoardUnabhängiges CS, MISO-Hochohmigkeit, wenn nicht ausgewählt
SCLK-RingReihenwiderstand in der Nähe von Controller; Inspektion mit Oszilloskop
Kabel oder VerbindungsleitungenNiedrigere Rate, Interleave GND, Limitlänge, bei Bedarf Transceiver verwenden
Viele CS-LinienDecoder, 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.

  1. Beginnen Sie mit einem Peripheriegerät bei 100 kHz oder darunter.
  2. Überprüfen Sie Leistung, GND, Reset und CS-Zustand vor den Daten.
  3. Messen Sie SCLK, CS, MOSI und MISO zusammen, ausgelöst durch aktive CS.
  4. Überprüfen Sie CPOL/CPHA, Bitreihenfolge und genaue Edge Count pro Frame.
  5. 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