SPI vs. I2C: So wählen Sie das beste Protokoll für Ihre Speicherchips

Erstellt: Februar 9, 2018
Aktualisiert am: November 23, 2022
SPI vs. I2C

SPI und I2C sind wahrscheinlich die am häufigsten verwendeten digitalen Protokolle zur Verbindung von integrierten Schaltkreisen in einer Vielzahl von Produkten. SPI und I2C sind beide einfach zu bedienende, schwer zu knackende serielle digitale Protokolle, die aus Sicht der Signalintegrität recht einfach zu routen sind. Im Gegensatz zu widerstandsgesteuerten, seriellen Hochgeschwindigkeits-Differenzialprotokollen haben diese beiden Protokolle keine Widerstandswertspezifikation und werden häufig als elektrisch kurz betrachtet. Das bedeutet, dass die Anforderungen an die Konstruktion der Leiterplatte relativ einfach sind und der Standard einen gewissen Spielraum lässt, um die Leistung nach Ihren Wünschen zu gestalten.

Eine der gängigen Implementierungen von SPI und I2C in einem PCB-Layout ist als Protokoll zum Lesen und Schreiben in einen externen Flash-Speicher. Flash-Chips sind sehr verbreitete Bauteile in eingebetteten Systemen und können hohe Kapazitäten an nichtflüchtigem Speicher bis hin zu Gbit-Werten bieten. Bei der Auswahl eines Speicherchips sollten Sie die Anwendungsanforderungen und die Funktionalität mit der Busgeschwindigkeit abstimmen, die Sie für Lese- und Schreibvorgänge in Ihrem Speicherchip benötigen. Es stellt sich auch die Frage nach der Art des Flash-Speichers, auf den Sie zugreifen müssen (NOR vs. NAND).

SPI vs. I2C – Vergleich

Bei den Protokollen Serial Peripheral Interface (SPI) und Inter-Integrated Circuit (I2C) handelt es sich um einfache serielle digitale Protokolle, die mit geringer bis mittlerer Geschwindigkeit ausgeführt werden. Diese beiden Schnittstellen verfügen über einige gemeinsame Merkmale:

  • Sie verwenden mehr als einen Draht zum Senden/Empfangen von Daten
  • Der Takt ist quellensynchron, was bedeutet, dass es eine einzelne Spur gibt, die die Taktleitung trägt
  • Andere Chips auf dem Bus sind adressierbar oder umschaltbar
  • Die meisten Mikrocontroller haben eine oder beide dieser Schnittstellen integriert
  • Der Signalpegel kann durch die an den Chip übergebene Kernspannung eingestellt werden
  • Keine dieser Schnittstellen hat eine Widerstandswertanforderung.

Diese Schnittstellen sind sich eindeutig sehr ähnlich. Sie unterscheiden sich aber auch in einigen wichtigen Punkten, die in der folgenden Tabelle zusammengefasst sind.

 

I2C

SPI

Netz-Namen

- Serielle Daten (SDA)

- Serial Clock (SCL)

- Master-in, slave out (MISO)

- Master-out, slave in (MOSI)

- Serial Clock (SCK oder SCLK)

- Chip Select (CS, optional)

Topologie

- Rundfunk-Bus-Topologie

- Gemeinsam genutzte CIPO/COPI/SCK

- Stern für CS-Pins

Datenrate

- Standardmodus: bis zu 100 Kbit/s

- Schneller Modus: bis zu 400 Kbit/s

- Schneller Modus plus: bis zu 1 Mbit/s

- High-Speed-Modus: bis zu 3,4 Mbit/s

- Durch Taktzeitfenster fixiert, erreicht bis zu 60 Mbit/s

Anstiegs-/Abfallzeiten

- Abhängig von den Werten der Buskapazität und des Pull-up-Widerstands (RC-Zeitkonstante verwenden)

- Spezifiziert für einen gegebenen Lastwiderstand

Adressierung

- Mit jedem Bauteil verbundene Adresspins

- CS-Pins, die im Hauptcontroller zum Umschalten von Chips verwendet werden (können mit GPIO oder dedizierten CS-Pins umgeschaltet werden)

Direktionalität - Halbduplex - Vollduplex
Signalleitung - Open-Drain - Push-Pull (mit CMOS-Puffer)

 

Der SPI-Standard bietet höhere Datenraten und kann im Vergleich zu I2C mit viel schnelleren Edge-Raten laufen. Aufgrund der Verwendung von Pull-ups auf I2C, der typischerweise hohen Buskapazität und der Tatsache, dass die Leitmethode Open-Drain ist, können I2C-Busse Anstiegszeiten von bis zu 100 Nanosekunden erreichen. SPI-Busse können Anstiegszeiten von nur 1 ns für komplizierte Komponenten mit niedrigen Lastkapazitäten haben, was bedeutet, dass sie während des Schaltens ein vorübergehendes Klingeln aufweisen können. SPI-Leitungen erzeugen aufgrund ihrer hohen Schaltgeschwindigkeit auch viel eher Crosstalk. Weitere Informationen zu diesen beiden Protokollen und der Signalintegrität in SPI-Bussen finden Sie in den folgenden Ressourcen.

Wichtige Überlegungen bei der Wahl zwischen SPI oder I2C für Speicherchips

Zugriff auf NAND vs. NOR Flash-Speicher

In diesem Abschnitt möchte ich nicht auf die Einzelheiten von NAND- im Vergleich zu NOR-Flash-Speicher eingehen, sondern mich darauf konzentrieren, wie auf jeden mit einem seriellen Protokoll zugegriffen wird. Beide Flash-Chips können mit einem SPI- oder I2C-Bus abgerufen werden, wenn Sie die richtige Speicherkomponente beschaffen können:

  • NOR Flash – Wird überwiegend über SPI aufgerufen, selbst bei kleineren und langsameren Flash-Chips. Es sind langsamere Chips verfügbar, auf die mit I2C zugegriffen werden kann.
  • NAND-Flash – Wird überwiegend über einen parallelen Bus aufgerufen, aber Chips mit I2C- und SPI-Bussen sind in ungefähr gleicher Anzahl vorhanden.

Wenn Sie die Filterfunktionen auf Octopart verwenden, können Sie einige Speicher mit hoher Kapazität finden, die beide Schnittstellen verwenden.

I2C-zu-SPI-Schnittstellenüberbrückung für Speicher

Wenn Sie zwischen einer I2C- und SPI-Schnittstelle umwandeln müssen, können Sie eine Schnittstellen-Bridge verwenden. Diese Komponenten konvertieren das Datenformat zwischen diesen Schnittstellen, sodass eine Komponente, die möglicherweise nur über einen SPI-Bus verfügt, dann auf Peripheriekomponenten zugreifen kann, die nur einen I2C-Bus haben. Dies schließt Speicherchips ein, doch wenn der Controller nur I2C und der Speicher SPI verwendet, ist die Geschwindigkeit möglicherweise begrenzt und die empfangende Komponente funktioniert aufgrund langer Anstiegszeiten möglicherweise nicht.

Um diese Einschränkung bei I2C zu überwinden, ist es am besten, einen Controller mit SPI zu verwenden und dann über die Schnittstellen-Bridge auf ein Peripheriegerät zuzugreifen, das nur über I2C verfügt. Beachten Sie, dass die SPI-Seite niedriger getaktet werden muss, damit sie bei I2C-Geschwindigkeiten verwendet werden kann. Dies würde in der folgenden Topologie erfolgen:

Controller ist mit SPI mit einer Schnittstellen-Bridge verbunden, welche wiederum über I2C mit einem Peripheral verbunden ist
Bevorzugte Konfiguration, bei der eine Schnittstellen-Bridge von SPI auf I2C benötigt wird.

Pegelverschiebung

Eine weitere häufige Anforderung bei seriellen Open-Drain- und Push-Pull-Protokollen (bei denen der Signalpegel durch die Kernspannung festgelegt wird) ist die Pegelverschiebung. Die einfachste Art, eine Leiterplatte zu bauen, ist mit einer einzigen Stromquelle, die auf die gewünschte Kernspannung heruntergeregelt wird, wie z. B. mit einem LDO. In Wirklichkeit haben Sie möglicherweise einige Peripheriegeräte, die mit einer höheren Spannung (z. B. 3,3 V) betrieben werden, während der Hauptcontroller mit einer niedrigeren Spannung auf mehreren Schienen (2,5 V, 1,8 V usw.) läuft. Wenn Ihre MCU mit 3V3, Ihr Speicher aber mit 1V8 betrieben wird (was häufig vorkommt), müssen Sie Ihre SPI- oder I2C-Signale durch einen Pegelwandler leiten. Beachten Sie, dass einige Schnittstellen-Bridges einen Pegelwandler enthalten, der an zwei Stromschienen angeschlossen wird; Topologie siehe unten.

Controller ist mit SPI oder I2C mit Pegelwandler verbunden, welcher mit SPI oder I2C mit dem Peripheral verbunden ist
Topologie, die bei der Pegelverschiebung verwendet wird.

Wenn Sie die Komponenten für Ihr Design ausfindig gemacht haben, wie entscheiden Sie dann zwischen einer SPI- und einer I2C-Schnittstelle? Hier sind einige Punkte, die Ihre Entscheidung beeinflussen werden:

Geschwindigkeit: Wenn Sie Daten in großen Mengen übertragen oder ein enges Zeitfenster haben, um Benutzereingaben anhand der auf einem Speicherchip gespeicherten Daten zu überprüfen, zählt jede einzelne Mikrosekunde. Wenn wiederholtes Lesen und Schreiben in Echtzeit mit dem Rest Ihres Systems erforderlich ist, verwenden Sie SPI. Wenn das Steuergerät nur gelegentlich aus dem Speicher lesen oder schreiben muss, verwenden Sie I2C.

Controller: Wenn Sie eine sehr kleine MCU oder ein Peripheriegerät verwenden und nur sehr wenige Pins zur Verfügung haben, sollten Sie sich für I2C entscheiden. Tatsächlich haben Sie bei einigen Mikrocontrollern wahrscheinlich keine Wahl. Beispielsweise verfügen die klassischen ATTiny MCUs nur über I2C. Wenn sie also Daten aus einem externen Speicher benötigen, müssen Sie einen Speicher-Chip finden, der I2C unterstützt.

Leistung: Wenn Sie ein batteriebetriebenes Gerät entwerfen, das wiederholt auf Daten zugreifen muss, können Sie sich für SPI als Schnittstelle entscheiden, da sie durchschnittlich weniger Strom verbraucht als eine I2C-Schnittstelle.

Schnell fahrendes Auto
Wenn es auf die Geschwindigkeit ankommt, wählen Sie SPI.

Das Routing von SPI und I2C ist viel einfacher, wenn Sie das vollständige Set von PCB-Design- und Routing-Funktionen in Altium Designer® verwenden. Wenn Sie Ihr Design fertiggestellt haben und die Dateien für Ihren Hersteller freigeben möchten, können Sie auf der Altium-365-Plattform ganz einfach zusammenarbeiten und Ihre Projekte teilen.

Wir haben nur an der Oberfläche dessen gekratzt, was mit Altium Designer auf Altium 365 möglich ist. Starten Sie noch heute Ihre kostenlose Testversion von Altium Designer und Altium 365.

Ähnliche Resourcen

Verwandte technische Dokumentation

Zur Startseite
Thank you, you are now subscribed to updates.