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).
| Aspekt | UART | SPI | I2C |
|---|---|---|---|
| Leitungen | Zwei Signalleitungen (TX und RX) plus Masse | Vier Signalleitungen (SCLK, MOSI, MISO) plus eine Chip-Select-Leitung (CS) pro Gerät | Zwei gemeinsame Leitungen (SDA und SCL) plus Masse, mit Pull-up-Widerständen |
| Takt | Asynchron: keine Taktleitung, daher müssen sich beide Seiten auf die Baudrate einigen | Synchron: Der Master liefert den Takt | Synchron: Der Master liefert den Takt |
| Topologie | Punkt-zu-Punkt zwischen zwei Geräten | Ein Master und mehrere Slaves, wobei jeder Slave eine eigene CS-Leitung benötigt | Mehrere Master und Slaves teilen sich einen Bus |
| Adressierung | Keine | Die Chip-Select-Leitung wählt das Gerät aus | 7-Bit-Adresse (optional 10 Bit), die zu Beginn jeder Übertragung gesendet wird |
| Typische Geschwindigkeit | Von 9.600 bis 115.200 Bit/s bis zu einigen Mbit/s | Oft 1 bis 50 MHz, bei manchen Bausteinen mehr | 100 kHz (Standard), 400 kHz (Fast), 1 MHz (Fast-Mode Plus), 3,4 MHz (High-Speed) |
| Richtung | Vollduplex | Vollduplex | Halbduplex |
| Fehlererkennung | Optionales Paritätsbit und Rahmenprüfung | Keine integriert | Acknowledge (ACK/NACK) nach jedem Byte |
| Pins bei steigender Geräteanzahl | Zwei weitere Pins für jede zusätzliche Verbindung | Ein weiterer CS-Pin für jedes zusätzliche Gerät | Keine zusätzlichen Pins |
| Entfernung | Mit RS-232- oder RS-485-Treibern auch über größere Strecken möglich | Kurz, auf derselben Platine | Kurz, auf derselben Platine |
| Typische Einsatzgebiete | Debug-Konsole, GPS- und Bluetooth-Module, Verbindungen zwischen Platinen | Flash-Speicher, SD-Karten, Displays, schnelle ADCs und Sensoren | Langsame Sensoren, EEPROM, Echtzeituhren, Chip-Konfiguration |
Die Zahlenangaben sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.