UART gegen SPI gegen I2C
UART, SPI und I2C sind die drei gängigsten seriellen Protokolle für eingebettete Systeme. Jedes wurde für einen anderen Anwendungsfall entwickelt: UART für asynchrone Punkt-zu-Punkt-Verbindungen, SPI für Hochgeschwindigkeits-Peripheriebusse und I2C für die Kommunikation mehrerer Geräte über zwei Leitungen. Die Wahl des richtigen Geräts hängt von der Geschwindigkeit, der Anzahl der Pins und der Topologie ab.
UART (Universeller asynchroner Empfänger/Sender)
UART ist ein asynchrones serielles Punkt-zu-Punkt-Protokoll, das separate TX- und RX-Leitungen verwendet. Keine gemeinsame Uhr — beide Seiten müssen sich auf die Baudrate einigen. Standardgeschwindigkeiten von 9600 bis 4 Mbit/s. Wird für Debug-Konsolen, GPS-Module und Bluetooth-Module verwendet.
Advantages
- Einfache Hardware — nur zwei Drähte (TX, RX)
- Kein Taktsignal erforderlich — asynchroner Betrieb
- Universell unterstützt — fast jede MCU hat einen UART
- Funktioniert über lange Kabel und ist einfach mit einem Terminal zu debuggen
Disadvantages
- Nur Punkt-zu-Punkt — kein nativer Bus für mehrere Geräte
- Beide Seiten müssen sich über die Baudrate einigen — Fehlkonfiguration führt zu verstümmelten Daten
- Niedrigere Geschwindigkeit als SPI für Massentransfers
- Erfordert Framing-Bytes und Start-/Stopp-Bits — ~ 20% Overhead
When to use
Verwenden Sie UART für Punkt-zu-Punkt-Verbindungen: GPS-Empfänger, Bluetooth-/WiFi-Module, Debug-Logging und Industriegeräte mit RS-232/RS-485. Ideal, wenn Einfachheit und Kommunikation über große Entfernungen wichtiger sind als Geschwindigkeit.
I2C (interintegrierter Schaltkreis)
I2C ist ein Zweidrahtbusprotokoll (SDA + SCL), das mehrere Master und bis zu 127 Geräte auf einem einzigen Bus unterstützt. Standardgeschwindigkeiten: 100 kbit/s, 400 kbps, 1 Mbit/s (Fast+), 3,4 Mbit/s (High Speed). Verwendet 7-Bit-Adressierung.
Advantages
- Nur zwei Drähte (SDA + SCL), unabhängig von der Anzahl der Geräte
- Bus für mehrere Geräte — bis zu 127 Geräte adressierbar
- Keine Chip-Select-Leitungen erforderlich — die Adressierung erfolgt im Band
- Gut geeignet für Sensoren, EEPROMs, RTCs und Display-Controller
Disadvantages
- Langsamer als SPI für Massendatenübertragungen
- Open-Drain-Bus erfordert Pull-Up-Widerstände — begrenzt die Geschwindigkeit auf langen Leitungen
- Adresskonflikte bei Geräten mit fester Adresse möglich
- Nicht für Hochgeschwindigkeitsdatenströme geeignet
When to use
Verwenden Sie I2C, wenn Sie mehrere Peripheriegeräte mit niedriger bis mittlerer Geschwindigkeit haben, die sich einen Bus teilen und die Anzahl der Pins minimieren möchten. Perfekt für Sensoren (IMUs, Temperatur, Luftfeuchtigkeit), EEPROMs, RTCs und Bildschirmtreiber.
Key Differences
- ▸Anzahl der Leitungen: UART = 2 (TX/RX); I2C = 2 (SDA/SCL, gemeinsam genutzter Bus); SPI = 4+ (MOSI/MISO/SCK + CS pro Gerät)
- ▸Geschwindigkeit: SPI > I2C > UART für Massenübertragungen; UART ist am schnellsten für einfaches Streaming
- ▸Topologie: UART = Punkt-zu-Punkt; I2C/SPI = Bus mit mehreren Geräten (I2C verwendet Adressierung, SPI verwendet Chip-Select-Leitungen)
- ▸UART ist asynchron; SPI und I2C sind synchron (gemeinsame Uhr)
- ▸SPI ist Vollduplex; I2C und UART können Vollduplex (UART) oder Halbduplex (I2C) sein
Summary
Verwenden Sie UART für serielle Punkt-zu-Punkt-Verbindungen und Debug-/Log-Ausgaben. Verwenden Sie I2C, wenn Sie mehrere Niedriggeschwindigkeitssensoren oder Peripheriegeräte an zwei Drähten anschließen müssen. Verwenden Sie SPI, wenn Sie Hochgeschwindigkeitsübertragungen an ein einzelnes Peripheriegerät (Displays, Flash-Speicher, ADCs) benötigen. Die Anzahl der Pins und die Geschwindigkeit sind in der Regel die ausschlaggebenden Faktoren.
Frequently Asked Questions
Was ist schneller: SPI, I2C oder UART?
SPI ist am schnellsten — typische Implementierungen laufen mit 10—50 MHz (10—50 Mbit/s), was hauptsächlich durch die Leiterbahnkapazität begrenzt ist. I2C erreicht seinen Höchstwert bei 3,4 Mbit/s (Hochgeschwindigkeitsmodus). UART liegt bei Standardimplementierungen in der Regel zwischen 115,2 Kbit/s und 4 Mbit/s.
Kann ich mehrere Geräte an einen UART-Bus anschließen?
Standard-UART ist Punkt-zu-Punkt. RS-485 (eine Multi-Drop-Erweiterung der UART-Signalisierung) ermöglicht bis zu 32 Knoten auf einem Differenzbus mit bis zu 10 Mbit/s. Jedes Gerät muss auf Anwendungsebene adressiert werden.
Warum benötigt I2C Pullup-Widerstände?
I2C verwendet Open-Drain-Signale — Geräte können den Bus nur tief ziehen, nicht hoch. Externe Pullup-Widerstände (typischerweise 4,7 kΩ für 100 kbit/s, 2,2 kΩ für 400 kbit/s) ziehen die Leitung hoch, wenn kein Gerät sie ansteuert. Die RC-Zeitkonstante der Pull-Up- und Buskapazität begrenzt die Höchstgeschwindigkeit.
Wofür wird SPI verwendet, was I2C nicht kann?
SPI wird für Hochgeschwindigkeits-Massendaten bevorzugt: SD-Karten (bis zu 25 MHz), SPI-Flash (bis zu 133 MHz), Farbdisplays (SPI-TFT) und Hochgeschwindigkeits-ADCs/DACs. I2C kann aufgrund von Open-Drain-Busbeschränkungen nicht zuverlässig über 3,4 Mbit/s betrieben werden.