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).

KenmerkUARTSPII2C
BedradingTwee signaallijnen (TX en RX) plus massaVier signaallijnen (SCLK, MOSI, MISO) plus een chip-select (CS) per deviceTwee gedeelde lijnen (SDA en SCL) plus massa. Pull-upweerstanden zijn nodig
KlokAsynchroon. Er is geen kloklijn en beide zijden stellen dezelfde baudrate inSynchroon. De master levert de klokSynchroon. De master levert de klok
TopologiePunt-naar-punt tussen twee devicesEén master en meerdere slaves. Elke slave heeft een eigen CS-lijn nodigMeerdere masters en slaves delen één bus
AdresseringGeenDe slave wordt gekozen met de chip-selectlijnAan het begin van elke overdracht wordt een 7-bits adres verzonden (10 bits is ook mogelijk)
Typische snelheidVan 9.600 tot 115.200 bit/s, tot enkele Mbit/sVaak 1 tot 50 MHz, sommige onderdelen sneller100 kHz (standard), 400 kHz (fast), 1 MHz (fast-mode plus), 3,4 MHz (high-speed)
RichtingFull-duplexFull-duplexHalf-duplex
FoutdetectieOptioneel pariteitsbit en controle van de framingNiet in het protocol opgenomenACK/NACK na elke byte
Aantal pinnen bij meer devicesTwee extra pinnen per extra communicatiepartnerEén extra CS per extra deviceGeen extra pinnen
AfstandKan lang zijn met RS-232- of RS-485-driversKort. Op hetzelfde boardKort. Op hetzelfde board
Belangrijkste toepassingenDebugconsoles, GPS- en Bluetooth-modules, verbindingen tussen boardsFlashgeheugen, SD-kaarten, displays, snelle ADC's en sensorenLangzame sensoren, EEPROM's, realtimeklokken, chipconfiguratie

De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.

Wanneer welke variant?

UART
Wanneer twee devices zo eenvoudig mogelijk moeten worden verbonden, voor een debugconsole of voor modules met een seriële interface.
SPI
Wanneer snelheid nodig is. Geheugens, displays, snelle converters. Nadeel is dat het aantal pinnen toeneemt met het aantal devices.
I2C
Wanneer er veel langzame devices zijn en weinig pinnen beschikbaar zijn. Sensoren, kleine geheugens, configuratieregisters. De snelheid is beperkt en pull-upweerstanden zijn nodig.

Veelgestelde vragen

Wat is sneller, I2C of SPI?

SPI. Het draait vaak op 1 tot 50 MHz of meer, terwijl I2C in de gangbare modi op 100 kHz tot 1 MHz draait en in de high-speed-modus op 3,4 MHz.

Waarom heeft I2C pull-upweerstanden nodig?

I2C-devices trekken een lijn alleen naar laag of laten hem los, zodat hij hoog wordt, en een weerstand trekt de lijn omhoog. Zo kunnen veel devices de twee lijnen veilig delen.

Heeft UART een kloklijn nodig?

Nee. UART is asynchroon, dus beide zijden moeten op dezelfde baudrate worden ingesteld. Bij een kleine afwijking in de baudrate kunnen er onleesbare tekens ontstaan.

Hoeveel pinnen heeft SPI nodig voor veel devices?

SPI heeft de gedeelde SCLK, MOSI en MISO nodig plus één chip-select per device, dus het aantal pinnen groeit met het aantal devices. I2C heeft altijd twee lijnen nodig, ongeacht het aantal devices.

Test uw begrip

Welke eigenschap van seriële communicatie via UART is juist?

  1. ADe zender levert een kloklijn en de ontvanger leest de gegevens met die klok
  2. BEr wordt geen kloklijn gebruikt; zender en ontvanger stellen dezelfde communicatiesnelheid (baudrate) in en het startbit markeert het begin
  3. COp één lijn worden veel apparaten aangesloten en de ontvanger wordt via een adres gekozen
Antwoord en toelichting tonen

Antwoord: B. Er wordt geen kloklijn gebruikt; zender en ontvanger stellen dezelfde communicatiesnelheid (baudrate) in en het startbit markeert het begin

UART is asynchrone seriële communicatie via twee lijnen (plus aarde), één voor zenden en één voor ontvangen. Zonder verkeer staat de lijn op 1; een startbit van 0 geeft het begin van een teken aan, gevolgd door de databits en een stopbit van 1. Omdat geen klok wordt verzonden, moeten beide zijden op dezelfde snelheid, zoals 115200 bps, zijn ingesteld. Het wordt veel gebruikt voor foutopsporingsuitvoer en voor de aansluiting van GPS- en draadloze modules.

Welke eigenschap van SPI-communicatie is juist?

  1. AHet is asynchroon zonder klok en wordt met slechts twee lijnen aangesloten
  2. BHet is synchroon met een door de master geleverde klok, kan tegelijk zenden en ontvangen en kiest de tegenpartij via een chip-selectlijn
  3. COmdat de tegenpartij via een adres wordt gekozen, zijn ook bij veel apparaten maar twee lijnen nodig
Antwoord en toelichting tonen

Antwoord: B. Het is synchroon met een door de master geleverde klok, kan tegelijk zenden en ontvangen en kiest de tegenpartij via een chip-selectlijn

SPI is synchrone communicatie waarbij, gelijk met de door de master geleverde klok, via een lijn van master naar slave en een lijn van slave naar master tegelijk gegevens worden uitgewisseld. Voor elke tegenpartij is een chip-selectlijn (CS) aanwezig en alleen met de tegenpartij waarvan die op 0 is gezet, wordt gecommuniceerd. Omdat het eenvoudig is en de klok tot enkele tientallen MHz kan oplopen, wordt het veel gebruikt voor de aansluiting van snelle onderdelen zoals flashgeheugen, displays en ADC's.

Welke eigenschap van I2C-communicatie is juist?

  1. AVoor elk apparaat is een eigen chip-selectlijn nodig
  2. BZenden en ontvangen hebben aparte lijnen en kunnen in beide richtingen tegelijk plaatsvinden
  3. CMeerdere apparaten worden aangesloten op twee lijnen, klok (SCL) en data (SDA), en de tegenpartij wordt via een adres gekozen
Antwoord en toelichting tonen

Antwoord: C. Meerdere apparaten worden aangesloten op twee lijnen, klok (SCL) en data (SDA), en de tegenpartij wordt via een adres gekozen

I2C is synchrone seriële communicatie waarmee meerdere apparaten met slechts twee lijnen, SCL en SDA, worden verbonden. De master stuurt eerst het 7-bits adres van de tegenpartij en alleen het apparaat met dat adres antwoordt. De lijnen zijn open-drain, worden met pull-upweerstanden naar 1 getrokken en elk apparaat kan ze naar 0 trekken. Het is geschikt voor onderdelen waarbij weinig bedrading belangrijker is dan snelheid, zoals temperatuursensoren, versnellingssensoren en EEPROM's.

  1. Bij een UART van 115200 bps en het formaat met 8 databits, geen pariteit en 1 stopbit (8N1), hoeveel bytes per seconde kunnen er ongeveer worden verzonden?
  2. Welke combinatie van de vier signalen die gewoonlijk bij SPI worden gebruikt, is juist?
  3. Hoe geeft bij I2C de ontvangende partij aan dat een byte aan gegevens is ontvangen?

Oefenvragen over Embedded systemen en firmware

Belangrijke termen uitgelegd

UART
Asynchrone seriële communicatieschakeling zonder kloklijn, waarbij zender en ontvanger op dezelfde baudrate zijn ingesteld. Tekens worden met een startbit en stopbit begrensd.
SPI
Synchrone seriële communicatie waarbij zenden en ontvangen gelijktijdig plaatsvinden op de klok van de master. Een chip-selectlijn kiest de tegenpartij; gebruikt voor het verbinden van snelle componenten.
I2C
Synchrone seriële communicatie waarbij meerdere apparaten op twee lijnen, klok (SCL) en data (SDA), zijn aangesloten en de tegenpartij met een adres wordt gekozen. De lijnen zijn open-drain met pull-up.
GPIO
Aansluiting voor general purpose input/output. Kan met software als ingang of uitgang worden ingesteld en wordt gebruikt voor onder meer het uitlezen van schakelaars en het laten branden van leds.

Verwante vergelijkingen