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).
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:
Diese Schnittstellen sind sich eindeutig sehr ähnlich. Sie unterscheiden sich aber auch in einigen wichtigen Punkten, die in der folgenden Tabelle zusammengefasst sind.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
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:
Wenn Sie die Filterfunktionen auf Octopart verwenden, können Sie einige Speicher mit hoher Kapazität finden, die beide Schnittstellen verwenden.
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:
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.
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.
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.