SPI, I2C, UART: Kommunikationsprotokolle & ihre Anwendungen im Vergleich
Die Mikrocontroller-Entwicklung ist ein zentraler Prozess in der Elektronikmontage. Serielle Protokolle und Kommunikationsschnittstellen erleichtern diese Aufgabe erheblich. In diesem Artikel untersuchen wir die seriellen Kommunikationsprotokolle SPI, I2C und UART umfassend – ihre Eigenschaften, Vor- und Nachteile sowie typische Anwendungsbeispiele.
1. UART-Schnittstelle
Was ist UART?
Universal Asynchronous Receiver/Transmitter (UART) ist ein serielles Kommunikationsprotokoll, das die Kommunikation zwischen einem Host und Peripheriegeräten ermöglicht. Primär dient es der seriellen Datenübertragung. Es unterstützt asynchrone Kommunikation und bidirektionale Datenübertragung.
Das einfache Protokoll nutzt zwei Datenleitungen: eine für die Übertragung (Tx) und eine für den Empfang (Rx). Üblicherweise erfolgt die Signalübertragung über digitalen Pin 0, der Empfang über digitalen Pin 1.
Zudem unterstützt es die Synchronisation der Verwaltung zwischen Computer und externen seriellen Geräten.
Funktionsweise
UART verwaltet die Signalkommunikation zwischen zwei Geräten über drei Betriebsarten:
- Simplex: Unidirektionale Datenübertragung
- Halbduplex: Nicht-simultane Kommunikation in beide Richtungen
- Vollduplex: Simultane Datenübertragung in beide Richtungen
Nach der Verbindung erfolgt der Datentransfer von der sendenden UART-Datenleitung zur empfangenden UART nach folgendem Prinzip:
- Die sendende UART wandelt parallele Daten des Master-Geräts in serieller Form für die Übertragung zur empfangenden UART um. Die empfangende UART wandelt die seriellen Daten zurück in parallele Form für das empfangende Gerät.
- Da UART asynchron arbeitet, gibt es keine Taktsignale. Stattdessen erzeugt die UART Start- und Stopp-Bits, um Anfang und Ende einer Nachricht zu kennzeichnen.
- Beide UARTs müssen mit der gleichen Baudrate (Übertragungsgeschwindigkeit) arbeiten. Ein Unterschied von mehr als 10 % macht die Daten unbrauchbar.
UART-Arbeitsprotokoll
Datenübertragung und -empfang
- Zur Übertragung empfängt die sendende UART Daten von einem Datenbus (z. B. CPU).
- Sie fügt drei Bits hinzu: Startbit, Paritätsbit und Stoppbit. Diese bilden ein Datenpaket, das über den TX-Pin zur empfangenden UART gesendet wird.
- Die Übertragung endet, sobald die Daten in der sendenden UART erschöpft sind.
Interrupt-Steuerung
Daten-Interrupts ermöglichen automatisches Senden von Pufferinhalten. Ein Interrupt wird ausgelöst bei:
- FIFO-Overflow-Fehler, Leitungsbruch-Fehler, Frame-Fehler oder Paritätsfehler
- Während Datenempfang, -sendung oder Empfangs-Timeout
FIFO-Betrieb
Stellaris-Familie UART-Module verfügen über zwei 16-Byte-FIFOs – eines für Empfang, eines für Übertragung. Sie sind in verschiedenen Tiefen konfigurierbar (1/8, 1/4, 1/2 Tiefe etc.) für unterschiedliche Interrupts.
Funktionsweise des Sende-FIFO
- Datenübertragung beginnt nach Dateneingabe. Da dies zeitaufwendig ist, erfolgt die Dateneingabe kontinuierlich, bis das Sende-FIFO voll ist.
- Bei vollem FIFO muss die Dateneingabe gestoppt werden, um Datenverlust zu vermeiden.
- Das Sende-FIFO sendet die Daten bitweise, bis es leer ist, und schafft dann einen freien Slot.
Funktionsweise des Empfangs-FIFO
- Empfangene Daten werden im Empfangs-FIFO gespeichert. Empfang und Löschung durch das Empfangs-FIFO-Programm laufen automatisch ab, sodass stets ausreichend Platz vorhanden ist.
- Ein Transceiver-FIFO löst CPU-Ineffizienz-Probleme und reduziert häufige UART-Transceiver-Unterbrechungen.
- FIFO verhindert Datenverlust, indem alle potenziellen Verlustquellen im Voraus geschlossen werden.
Loopback
UART verfügt über einen internen Loopback für Debugging und Diagnose, bei dem der RX-Eingang die gesendeten Daten empfängt.
Serielles Infrarot-Protokoll
UART enthält ein IrDA Serial Infrared (SIR) Modul als Encoder/Decoder. Es übersetzt eine halbduplexe serielle SIR-Schnittstelle und einen asynchronen UART-Datenstrom. Zudem liefert es einen decodierten Eingang und einen digital kodierten Ausgang an die UART.
Vorteile von UART
- Einfaches, gut dokumentiertes und leicht zu nutzendes Kommunikationsprotokoll
- Keine serielle Taktleitung erforderlich
- Paritätsbit ermöglicht Fehlererkennung
Nachteile von UART
- Datenrahmen-Größe auf 9 Bit begrenzt, langsame Übertragungsgeschwindigkeiten
- Keine Unterstützung für Multi-Master- und Multi-Slave-Systeme
- Zwangsbaudrate innerhalb von 10 % Toleranz als Schutz vor Datenverlust
- Generell langsamere Datenübertragung zwischen Geräten
UART-Beispiele in Mikrocontrollern
- UART Seeeduino V4.2
- USB zu UART 5V
- Base Shield V2
- USB CP2102 Serial Converter
2. I2C-Schnittstelle
Was ist I2C?
Das Inter-Integrated-Circuit (I2C) Kommunikationsprotokoll ähnelt UART. Während UART jedoch für PC-Geräte-Kommunikation gedacht ist, findet I2C Anwendung bei Sensoren und Modulen.
Der bidirektionale Zwei-Draht-Synchrone-Serialbus kann mehrere Geräte verbinden, ohne den Kommunikationspfad zu beeinträchtigen – dank Shared-Bus und Adresssystem. Dies geht jedoch mit geringerer Geschwindigkeit im Vergleich zu SPI einher. Die Geschwindigkeit hängt von externem Rauschen, Leitungsqualität und Datengeschwindigkeit ab.
Die Zwei-Draht-Schnittstelle ermöglicht den Anschluss von Low-Speed-Geräten wie EEPROMs, Analog/Digital-Wandlern und Mikrocontrollern.
Funktionsweise
Ein I2C-Protokoll nutzt zwei Leitungen: die serielle Datenleitung (SDA) und die serielle Taktleitung (SCL). SCL synchronisiert die Übertragung, SDA ist die Datenleitung für Senden und Empfangen.
Während der Übertragung initiiert das Master-Gerät die Bus-Datenübertragung und erzeugt gleichzeitig ein Taktsignal, das das sendende Gerät aktiviert. Das adressierte Gerät ist ein Slave-Gerät.
Wichtig: Master und Slave haben keine konstante Datenübertragungsrate. Ihre Beziehung basiert auf der Datenübertragungsrichtung zum Übertragungszeitpunkt.
Der einzelne Master muss den Slave vor Datenübertragung und vor Datenempfang informieren.
Für optimale Funktion muss ein Pull-Up-Widerstand an die I2C-Stromversorgung angeschlossen werden.
I2C-Arbeitsprotokoll
Datenübertragungsmethode
Der Verbindungsablauf:
- Der Master sendet ein Startsignal an die angeschlossenen Slaves, indem er die SDA-Leitung von High auf Low zieht, dann die SCL-Leitung von High auf Low.
- Der Master sendet 7-Bit- oder 10-Bit-Adressen und Read/Write-Bits an jeden Slave.
- Die Slaves vergleichen die Adresse mit ihrer eigenen. Bei Übereinstimmung senden sie ein ACK-Bit (SDA auf Low). Andernfalls lassen sie SDA auf High.
- Der Master sendet den Datenrahmen oder empfängt ihn (je nach Adressübereinstimmung). Nach vollständiger Übertragung bestätigt der Empfänger mit einem ACK-Bit.
- Zum Abschluss schaltet der Master SCL auf High, dann SDA auf High – Kommunikationsende.
Taktsynchronisation
Jeder Master muss sein eigenes Taktsignal in der SCL-Leitung erzeugen. In I2C-Übertragung sind Daten nur während der High-Phase des Takts gültig.
Übertragungsmodi
I2C überträgt primär über zwei Modi:
Schnellmodus (Fast Mode)
Geräte im Schnellmodus senden und empfangen mit 400 kbit/s. Ein Fast-Mode-I2C-Bus unterdrückt Glitches effektiv und verfügt über eine Flankensteuerung.
High-Speed-Modus
Ein I2C-Bus im High-Speed-Modus überträgt mit 3,4 Mbit/s – deutlich schneller als der Schnellmodus.
Vorteile von I2C
- Deutlich begrenzte Pin-Anzahl/Signale auch bei vielen angeschlossenen Geräten
- Flexibilität durch Multi-Master- und Multi-Slave-Fähigkeit
- Einfache Nutzung: nur zwei bidirektionale Drähte für viele Geräte
- Hohe Anpassungsfähigkeit, Unterstützung mehrerer Master
Nachteile von I2C
- Relativ langsam, Pull-Up-Widerstände erforderlich (SPI nutzt Push-Pull), Open-Drain-Design begrenzt Geschwindigkeit
- Widerstände beanspruchen wertvollen PCB-Platz
- Bei vielen Geräten erschwerte Handhabung
I2C-Beispiele in Mikrocontrollern
- Raspberry Pi 4-Kanal 16-Bit ADC
- I2C Hub (6 Port) – Grove
- I2C Driver/Adapter
- I2C Arduino
3. SPI-Schnittstelle
Was ist SPI?
Die Serial Peripheral Interface (SPI) ist für Mikrocontroller konzipiert. Da sie im Vollduplex arbeitet, ermöglicht sie simultanes Senden und Empfangen.
SPI ist schneller als I2C, mit einer Datenrate von mindestens 8 Bit. Das einfache Protokoll erlaubt höhere Datenraten – wichtig für Anwendungen, die Geschwindigkeit erfordern, wie Display-Module und SD-Karten.
Auch bei Anwendungen mit plötzlichen Informationsänderungen (z. B. Thermometer) ist SPI essenziell.
Funktionsweise
Ein SPI-Gerät arbeitet auf zwei Arten:
- Chip Select: Jedes Gerät erhält eine eigene Chip-Select-Leitung.
- Daisy Chaining: Geräte werden in Reihe geschaltet.
Theoretisch können beliebig viele Geräte angeschlossen werden; praktisch limitieren die verfügbaren Hardware-Select-Leitungen. Bei Punkt-zu-Punkt-Kommunikation entfällt Adressierung.
SPI-Arbeitsprotokoll
SPI nutzt vier Leitungen:
- MOSI (Master Out Slave In)
- MISO (Master In Slave Out)
- SCLK (Takt signal)
- NSS/CS (Slave Select)
Bei Multi-Slave-Systemen benötigt jeder Slave ein eigenes Enable-Signal – dies verkompliziert die Hardware im Vergleich zu I2C.
SPI verfügt über zwei Schieberegister für synchrone serielle Datenübertragung zwischen einem Master (z. B. CPU) und Peripheriegeräten.
Vorteile von SPI
- Einfach zu nutzen – kein komplexes Slave-Adressierungssystem wie bei I2C
- Schnellstes der drei seriellen Protokolle (schneller als UART und I2C)
- Keine Start-/Stopp-Bits wie bei UART – kontinuierliche Datenübertragung ohne Unterbrechung
- Separate MISO/MOSI-Leitungen ermöglichen simultanes Senden und Empfangen
Nachteile von SPI
- Viele Pin-Ports belegt – limitiert Anzahl anschliessbarer Geräte
- Keine definierte Flusskontrolle, kein Acknowledge-Mechanismus wie bei I2C
- Benötigt 4 Leitungen (vs. 2 bei UART/I2C), kein Fehlerprüfmechanismus
- Nur Single-Master
SPI-Beispiele in Mikrocontrollern
- SPI Seeeduino V4.2
- SPI Driver/Adapter – Easily Driver SPI Devices
Vergleich: UART, I2C und SPI
Welches Protokoll ist das „beste“? UART, SPI oder I2C?
Es gibt kein überlegenes Protokoll – jedes hat spezifische Stärken und Schwächen. Wählen Sie passend zum Projekt: Für Geschwindigkeit ist SPI optimal. Für viele Geräte ohne komplexe Verdrahtung eignet sich I2C.
Fazit
Wir haben alle wesentlichen Aspekte zu UART, I2C und SPI sowie deren Übertragungsraten beleuchtet. Bei Fragen zu den Kommunikationsprotokollen stehen wir gerne zur Verfügung.
Industrietechnik
- MQTT vs. DDS: Das richtige M2M-Protokoll für IoT wählen
- Netzwerkprotokolle verstehen: Von der Physikalischen Schicht bis zu fortgeschrittener Arbitration
- Digitaler Speicher Grundlagen: Adressierung, Zugriff und Volatilität
- Wichtige Breakout-Boards für Raspberry Pi: I2C, UART, GPIO & Mehr – Kits, Header & Schutz
- 14 innovative Nanotechnologie-Anwendungen: Von Medizin bis Materialwissenschaft
- Hartlöten mit Silber erklärt: Prozess, Materialien und Anwendungen
- Produktionseffizienz freisetzen: Bewährte datengesteuerte Fertigungsstrategien
- Datenerfassung optimieren für intelligentere Entscheidungsfindung
- Holzarten und ihre praktischen Verwendungen: Vom Bauwesen bis zur Papierproduktion
- Wolfram: Historische Anwendungen und moderne Innovationen