I2C, SPI und UART sind Protokolle für die Kommunikation zwischen der MCU und anderen aktiven Komponenten. Für die Zusammenarbeit mit Computerperipheriegeräten sind zwar Standards wie USB und Ethernet in den meisten Steuerungen integriert. Dennoch werden Protokolle wie I2C, SPI, UART und andere zusätzlich verwendet, um mit nachgeschalteten MCUs oder programmierbaren ICs zu kommunizieren. Die Unterschiede zwischen I2C vs. SPI vs. UART-Bussen sind einfach, und jeder Designer, der mit einem MCU arbeitet, sollte wissen, wie man Routing und Layout für diese Protokolle einrichtet.
Bei diesen Protokollen handelt es sich um langsamere Signalisierungsstandards, so dass Sie sich kaum Gedanken über Dinge wie Impedanzkontrolle oder das Verhalten von Übertragungsleitungen machen müssen, wenn Sie mit diesen Protokollen arbeiten. Einige wichtige Design-Punkte müssen jedoch berücksichtigt werden, wenn sichergestellt wird, dass die Signale Ihrer Buslinien bei Ihren Empfängern korrekt gelesen werden. Es gibt auch die Frage der Adressierung, aber dieser Punkt kann im Rahmen des jeweiligen Produkts und Ihres Codes behandelt werden. Schauen wir uns nun an, wie diese drei gängigen Protokolle in Ihrem Leiterplattenlayout verwendet werden können und welche Punkte zur Wahrung der Signalintegrität wichtig sind.
Alles von 8-Bit- bis 32-Bit-MCUs verwendet neben GPIOs mindestens eines dieser Protokolle für die Programmierbarkeit und das Senden von Signalen an einfache Peripheriegeräte. Diese drei seriellen Protokolle sind Busprotokolle; I2C und UART verwenden Adressierungsschemata, während SPI adressfrei ist. Obwohl SPI adressfrei ist, handelt es sich um ein Busprotokoll, das weiterhin verwendet werden, um nachgelagerte Geräte für den Empfang von Daten auszuwählen.
I2C steht für Inter-Integrated Circuit und verwendet zwei Leitungen (Standard-, Fast- und Fast-Plus-Modus) zur Steuerung anderer Geräte. I2C wird ausgesprochen I-squared C, oder manchmal IIC. Eine der beiden Leitungen ist eine Taktleitung (SCL), die andere eine Datenleitung (SDA). Alle diese Informationen werden in der folgenden Tabelle zusammengefasst. I2C kommt häufig in Systemen mit Peripherie-Geräten (Peripherals) zum Einsatz, auf die intermittierend zugegriffen wird. Beachten Sie, dass die Werte für die Anstiegs-/Abfallzeit davon ausgehen, dass die typischen Serienwiderstände an den E/As installiert sind.
Modus |
Datenrate/ Taktgeschwindigkeit |
Max. Anstiegs-/ Abfallzeit |
Min. Anstiegs-/ Abfallzeit |
Direktionalität |
Standard |
100 kHz |
1000 ns |
- |
Bidirektional |
Fast |
400 kHz |
300 ns |
20 ns* |
Bidirektional |
Fast-plus |
1 MHz |
300 ns |
20 ns* |
Bidirektional |
Hohe Geschwindigkeit |
3,4 MHz (100 pF bus) 1,7 MHz (400 pF bus) |
120 ns** |
15 ns** |
Bidirektional |
Ultra-fast |
5 MHz |
50 ns |
25 ns |
Unidirektional |
*Ausgehend von VDD/VCC = 5,5 V. Skaliert linear nach unten, wenn VDD/VCC niedriger ist
**Diese Werte sind für die Taktleitung durch 2 zu dividieren
Beachten Sie, dass der ultraschnelle Modus der einzige Modus ist, in dem die Kommunikation nur für nachgeschaltete Schreibvorgänge verwendet wird. Dieser Modus ist auch wichtig, da wir über diesen Modus sehen, wann die Busimpedanz abgeglichen werden muss, was praktisch ist. Wenn wir einen sehr konservativen Grenzwert von 10% für die kritische Leitungslänge ansetzen, ergibt sich eine kritische Leitungslänge von 0,32 m, was viel länger ist als die Größe der meisten Platten, die für I2C verwenden werden. Wenn wir die Kniefrequenz für die minimale Anstiegs-/Abfallzeit mit einer 10%igen Begrenzung der kritischen Länge verwenden, kommen wir auf einen viel längeren Wert von 0,92 m. Wir sollten die konservativere Zahl von 0,32 m für den ultraschnellen Modus verwenden; jede I2C-Leitung, die kürzer als dieser Wert ist, verhält sich nicht wie eine Übertragungsleitung, und wir müssen uns nur um das Abschlussschema kümmern.
Beim Abschluss sind insbesondere die Auswahl der richtigen Pullup- und Serienwiderstände wichtig. Die Pullup-Widerstände und die Kapazität des VDD/VCC-Leitungsbusses bilden eine Entladungs- und Ladestromschaltung, die dem Empfänger beim Umschalten des Treibers ein Signal liefert. Die Werte der Pullup-Widerstände (Rp) für die Signal- und Taktleitungen müssen die folgende Ungleichung erfüllen:
Die Buskapazität wird anhand der Standardformeln für die VCC-Busimpedanz bestimmt, die mit denselben Gleichungen berechnet werden, die Sie für eine Übertragungsleitung verwenden würden (entweder Mikrostreifen oder Streifenleitung). Anschließend können Sie die Buskapazität für die Leitung mithilfe der Impedanz und der Ausbreitungsverzögerung ermitteln. Die Vorwiderstände sind nach dem I2C-Standard optional, können jedoch zum Schutz der Geräte vor Spannungsspitzen und zur Verlangsamung der Anstiegs-/Abfallzeiten eingebaut werden. Auf Seite 59 des I2C-Standards können Sie den richtigen Wert für den Vorwiderstand ermitteln, der mit dem Wert des Pullup-Widerstands zu kombinieren ist.
Das SPI-Protokoll ähnelt dem I2C-Protokoll. Bei SPI werden insgesamt 4 Leitungen verwendet, und die Komponenten können in zwei möglichen Modi angeordnet werden. Wenn ein einzelnes Steuergerät zum Auslösen eines einzelnen nachgeschalteten Geräts verwendet wird, ist die Topologie einfach Punkt-zu-Punkt. Die Auslösung mehrerer Geräte hängt von der Anzahl der vom Treiber bereitgestellten Chip-Select-Ausgänge ab (Standardmodus). Im zweiten Modus wird eine Verkettung verwendet, bei der ein einzelner Device-Select-Ausgang nacheinander jedes Gerät in der Verkettung auslöst.
Im Gegensatz zu I2C sind im SPI die verschiedenen Signalisierungsparameter in hohem Maße konfigurierbar. Sofern Sie keine extrem schnelle Schnittstelle verwenden, können Sie den Signalpegel über die Verbindung als Gleichstrom annähern, da Sie im Hinblick auf das Verhalten von Übertragungsleitungen unterhalb der kritischen Länge liegen. Anschließend können Sie einen Reihenwiderstand verwenden, um den niedrigen Impedanzausgang des Fahrers zu beenden und eine maximale Leistungsübertragung zu gewährleisten. Die RC-Entlademethode mit der oben dargestellten Leiterbahnkapazität kann den Ausgangsstrom und die Anstiegs-/Abfallzeiten von Ihrer Schnittstelle aus steuern.
UART steht für "Universal Asynchronous Receiver-Transmitter". Eine UART-Schnittstelle hat ebenfalls eine maximale Datenrate von ~5 Mbit/s. UART-Geräte lassen sich ebenfalls einfach bedienen, da kein Takt zwischen den Geräten gesendet wird; alles ist asynchron. Beachten Sie, dass der interne (System-)Takt jedes UART-Geräts mit einem Vielfachen der Baudrate laufen muss (d. h. jedes Bit wird N-mal abgetastet). Für die Kommunikation zwischen einem einzelnen Steuergerät und einem einzelnen nachgeschalteten Gerät werden nur zwei Drähte verwendet.
Beachten Sie außerdem, dass das Datenformat, die Signalpegel und die Baudrate eines UART-Geräts mit einem externen Treiberkreis konfigurierbar sind. Leider bedeutet dies auch, dass es für das Routing und Layout von UART-Geräten nur wenige feste Regeln gibt. Befolgen Sie die Standardrichtlinien für High-Speed-Designs, um festzustellen, wann ein Abschluss erforderlich ist. Schauen Sie sich hierzu das Verhalten am Übergang zur Übertragungsleitung an (siehe den oben verlinkten Artikel). Eine typische Abschlussmethode zur Verringerung des Überschwingens ist ein Serienabschluss. Beachten Sie, dass sich UART bei hohen oder niedrigen Werten im Leerlauf befinden kann, und dass möglicherweise Pullup-Widerstände erforderlich sind, um den erforderlichen Leerlaufpegel einzustellen. Vor dem Hinzufügen von Pullip-Widerständen sollten Sie unbedingt die Spezifikationen Ihrer Komponenten prüfen.
Wenn die I2C-, SPI- und UART-Regeln etwas vage erscheinen, liegt das daran, dass Sie auf Firmware-Ebene mehr Freiheiten bei der Gestaltung Ihrer Schnittstelle haben. Sobald einer dieser Standards mit schnellen Übertragungsraten ausgeführt wird, sind sie anfällig für Überlagerungen, ebenso wie High-Speed-Signalstandards. Da jedoch Ihre Spezifikation viel Flexibilität zulässt, können Sie in der Regel Leiterbahnen entwerfen, um eine geringere Induktivität zu erzielen und induktive Überlagerungen zu reduzieren. Sie haben eine gewisse Flexibilität beim Routen dieser Signale und können sie sehr einfach in Ihr nächstes digitales System einbinden.
Beim Entwerfen digitaler Systeme mit gängigen Signalstandards können Sie die Unterschiede zwischen I2C und SPI vs. UART mithilfe der Design-Regeln in Altium Designer® entwerfen. Der Layer Stack Manager und der integrierte 3D Field Solver von Simberian verwenden Ihre Leiterplatten- und Leiterbahngeometrie, um Ihre Buskapazitäten und Parasitics in Ihre Signalleitungen zu extrahieren.
Altium Designer auf Altium 365 bietet einen noch nie dagewesenen Umfang an Integration in der Elektronikindustrie, was bis dahin der Softwareentwicklungsbranche vorbehalten war. Designer können jetzt von zu Hause aus arbeiten und ein beispielloses Maß an Effizienz erreichen.
Wir haben nur ganz oberflächlich behandelt, was mit Altium Designer auf Altium 365 möglich ist. Wenn Sie mehr erfahren möchten, können Sie die Produktseite besuchen, wo Sie Zugang zu detaillierterem Beschreibungen der Funktionen und On-Demand Webinaren haben.