I2C vs. SPI vs. UART: Unterschiede und Einsatzgebiete

Dies sind die drei seriellen Schnittstellen, denen man in eingebetteten Systemen zuerst begegnet. UART ist eine einfache Punkt-zu-Punkt-Verbindung ohne gemeinsamen Takt. SPI ist ein schneller Vierdraht-Bus, bei dem ein Master jedes Gerät über eine Chip-Select-Leitung auswählt. I2C ist ein Zweidraht-Bus, bei dem sich viele Geräte dieselben Leitungen teilen und über ihre Adresse angesprochen werden. Der Kompromiss besteht vor allem zwischen Geschwindigkeit (SPI), Pinanzahl (I2C) und Einfachheit (UART).

AspektUARTSPII2C
LeitungenZwei Signalleitungen (TX und RX) plus MasseVier Signalleitungen (SCLK, MOSI, MISO) plus eine Chip-Select-Leitung (CS) pro GerätZwei gemeinsame Leitungen (SDA und SCL) plus Masse, mit Pull-up-Widerständen
TaktAsynchron: keine Taktleitung, daher müssen sich beide Seiten auf die Baudrate einigenSynchron: Der Master liefert den TaktSynchron: Der Master liefert den Takt
TopologiePunkt-zu-Punkt zwischen zwei GerätenEin Master und mehrere Slaves, wobei jeder Slave eine eigene CS-Leitung benötigtMehrere Master und Slaves teilen sich einen Bus
AdressierungKeineDie Chip-Select-Leitung wählt das Gerät aus7-Bit-Adresse (optional 10 Bit), die zu Beginn jeder Übertragung gesendet wird
Typische GeschwindigkeitVon 9.600 bis 115.200 Bit/s bis zu einigen Mbit/sOft 1 bis 50 MHz, bei manchen Bausteinen mehr100 kHz (Standard), 400 kHz (Fast), 1 MHz (Fast-Mode Plus), 3,4 MHz (High-Speed)
RichtungVollduplexVollduplexHalbduplex
FehlererkennungOptionales Paritätsbit und RahmenprüfungKeine integriertAcknowledge (ACK/NACK) nach jedem Byte
Pins bei steigender GeräteanzahlZwei weitere Pins für jede zusätzliche VerbindungEin weiterer CS-Pin für jedes zusätzliche GerätKeine zusätzlichen Pins
EntfernungMit RS-232- oder RS-485-Treibern auch über größere Strecken möglichKurz, auf derselben PlatineKurz, auf derselben Platine
Typische EinsatzgebieteDebug-Konsole, GPS- und Bluetooth-Module, Verbindungen zwischen PlatinenFlash-Speicher, SD-Karten, Displays, schnelle ADCs und SensorenLangsame Sensoren, EEPROM, Echtzeituhren, Chip-Konfiguration

Die Zahlenangaben sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.

Wann welches einsetzen

UART
Wenn Sie die denkbar einfachste Verbindung zwischen zwei Geräten, eine Debug-Konsole oder ein Modul mit serieller Schnittstelle brauchen.
SPI
Wenn Geschwindigkeit gefragt ist: Speicher, Displays, schnelle Wandler. Der Preis sind mehr Pins, je mehr Geräte Sie hinzufügen.
I2C
Wenn Sie viele langsame Geräte und wenige Pins haben: Sensoren, kleine Speicher, Konfigurationsregister. Die Geschwindigkeit ist begrenzt und Pull-up-Widerstände sind erforderlich.

FAQ

Was ist schneller, I2C oder SPI?

SPI. Es läuft oft mit 1 bis 50 MHz oder mehr, während I2C in gängigen Modi mit 100 kHz bis 1 MHz und im High-Speed-Modus mit 3,4 MHz arbeitet.

Warum braucht I2C Pull-up-Widerstände?

I2C-Geräte ziehen die Leitungen nur auf Low und geben sie zum Erreichen von High wieder frei, daher ziehen Widerstände die Leitungen nach oben. So können sich viele Geräte sicher zwei Leitungen teilen.

Brauchen UART-Geräte eine Taktleitung?

Nein. UART ist asynchron, daher müssen beide Seiten auf dieselbe Baudrate eingestellt sein. Eine geringe Abweichung der Baudrate kann Zeichen verfälschen.

Wie viele Pins braucht SPI bei vielen Geräten?

SPI braucht gemeinsame SCLK-, MOSI- und MISO-Leitungen plus einen Chip-Select-Pin pro Gerät, sodass die Pinanzahl mit der Zahl der Geräte wächst. I2C braucht unabhängig von der Geräteanzahl nur zwei Pins.

Wichtige Begriffe erklärt

UART
Eine Schaltung für asynchrone serielle Kommunikation ohne Taktleitung, bei der beide Seiten eine Baudrate vereinbaren und Zeichen durch Start- und Stoppbits gerahmt werden.
SPI
Serial Peripheral Interface: synchrone serielle Kommunikation, bei der Daten mit einem vom Master getriebenen Takt in beide Richtungen ausgetauscht werden und Geräte über Chip-Select-Leitungen ausgewählt werden. Wird für schnelle Bausteine genutzt.
I2C
Ein synchroner serieller Bus, der mehrere Geräte über zwei Leitungen, Takt (SCL) und Daten (SDA), verbindet und den Partner per Adresse auswählt. Die Leitungen sind Open-Drain mit Pull-ups.
GPIO
General-Purpose Input/Output: Mikrocontroller-Pins, die per Software als Ein- oder Ausgänge konfiguriert werden können, etwa zum Einlesen von Schaltern oder zum Ansteuern von LEDs.

Weitere Vergleiche