I2C, SPI en UART: bedrading, snelheid en keuzecriteria vergeleken
Dit zijn de drie seriële interfaces die je het eerst tegenkomt bij embedded ontwikkeling. UART is een eenvoudige punt-naar-punt-verbinding zonder gedeelde klok. SPI is een snelle bus met vier draden, waarbij de master de slave kiest met een chip-selectlijn. I2C laat veel devices twee draden delen en kiest ze via een adres. Bij de keuze draait het vooral om snelheid (SPI), aantal pinnen (I2C) en eenvoud (UART).
| Kenmerk | UART | SPI | I2C |
|---|---|---|---|
| Bedrading | Twee signaallijnen (TX en RX) plus massa | Vier signaallijnen (SCLK, MOSI, MISO) plus een chip-select (CS) per device | Twee gedeelde lijnen (SDA en SCL) plus massa. Pull-upweerstanden zijn nodig |
| Klok | Asynchroon. Er is geen kloklijn en beide zijden stellen dezelfde baudrate in | Synchroon. De master levert de klok | Synchroon. De master levert de klok |
| Topologie | Punt-naar-punt tussen twee devices | Eén master en meerdere slaves. Elke slave heeft een eigen CS-lijn nodig | Meerdere masters en slaves delen één bus |
| Adressering | Geen | De slave wordt gekozen met de chip-selectlijn | Aan het begin van elke overdracht wordt een 7-bits adres verzonden (10 bits is ook mogelijk) |
| Typische snelheid | Van 9.600 tot 115.200 bit/s, tot enkele Mbit/s | Vaak 1 tot 50 MHz, sommige onderdelen sneller | 100 kHz (standard), 400 kHz (fast), 1 MHz (fast-mode plus), 3,4 MHz (high-speed) |
| Richting | Full-duplex | Full-duplex | Half-duplex |
| Foutdetectie | Optioneel pariteitsbit en controle van de framing | Niet in het protocol opgenomen | ACK/NACK na elke byte |
| Aantal pinnen bij meer devices | Twee extra pinnen per extra communicatiepartner | Eén extra CS per extra device | Geen extra pinnen |
| Afstand | Kan lang zijn met RS-232- of RS-485-drivers | Kort. Op hetzelfde board | Kort. Op hetzelfde board |
| Belangrijkste toepassingen | Debugconsoles, GPS- en Bluetooth-modules, verbindingen tussen boards | Flashgeheugen, SD-kaarten, displays, snelle ADC's en sensoren | Langzame sensoren, EEPROM's, realtimeklokken, chipconfiguratie |
De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.