noll
I2C-kommunikationsgränssnitt

I2C-kommunikationsgränssnitt

20 oktober 2023

Inom området för inbyggda system och elektronik är effektiv kommunikation mellan komponenterna avgörande. Bland de många kommunikationsprotokoll som finns idag utmärker sig I2C (Inter-Integrated Circuit) som ett populärt val för många ingenjörer och utvecklare tack vare sin enkelhet, flexibilitet och låga strömförbrukning.



Vad är I2C?

Inter-Integrated Circuit, förkortat I²C (uttalas ”I-squared-C” eller ”I-two-C”), är ett allmänt använt seriellt kommunikationsprotokoll som kännetecknas av sin konstruktion med flera mästare, flera slavar och en enkelriktad seriell buss, vilket gör det lämpligt för kommunikation över korta avstånd. Det unika med I²C är att det endast använder två ledningar för kommunikation, SDA (Serial Data) och SCL (Serial Clock), vilket förenklar anslutningarna och sparar utrymme.

Även om den officiella beteckningen är ”I²C” – som uttalas ”eye-squared-see” – kommer vi för enkelhetens skull att kalla den ”I2C”. Symbolen ² är ett upphöjt 2, vilket innebär att I multipliceras med sig själv två gånger. Detta är en hänvisning till de två ledningarna som används för kommunikationen.

I2C-funktioner:

  • I2C är ett seriellt, synkront datakommunikationsprotokoll.
  • Använder endast två ledningar för kommunikation – seriell data och seriell klocka.
  • Stöder flera master- och slave-enheter på samma buss.
  • Halvduplexöverföring – Kommunikationen mellan master- och slaveenheten kan ske i båda riktningarna, men inte samtidigt.
  • Klockförlängning – En slavenhet kan hålla kvar klocksignalen för att ge mer tid för databehandling.
  • Skiljedom – Om två masterenheter påbörjar dataöverföring samtidigt har I2C en inbyggd metod för att avgöra vilken masterenhet som ska fortsätta och vilken som ska vänta, vilket säkerställer dataintegriteten.
  • 7-bitars adresseringssystem, men det kan även hantera 10-bitars adresser.
  • Stöder olika hastigheter – Standard I2C-specifikationen definierar fyra hastighetsklasser: standardläge (100 kbps), snabbläge (400 kbps), snabbläge Plus (1 Mbps) och höghastighetsläge (3,4 Mbps).

Läs mer:Seriell kontra parallell kommunikation


Hur fungerar I2C?

I2C är en tvåtrådig seriell buss som använder två dubbelriktade open-drain-ledningar, SDA och SCL, vilka båda är dragna till hög nivå.

  1. SDA (Serial Data Line): Denna ledning överför data.
  2. SCL (Serial Clock Line): Denna ledning används för synkronisering.
Schema över seriell I2C-kommunikation
Schema över seriell I2C-kommunikation. I2C använder två open-drain-ledningar, SDA och SCL. Dessa ledningar är uppdragna med motstånd, vilket innebär att de normalt sett har en hög spänning.

Enheter på I2C-bussen kan antingen fungera som master eller som slav:

  • Master (styrenhet): Initierar och styr dataöverföringen på bussen.
  • Slav (kringutrustning): Svarar på masteren.

Begreppen ”master” och ”slave” har historiskt sett använts för att beskriva enheternas roller på I2C-bussen, men de har i många sammanhang i huvudsak ersatts av ”kontroller” och ”kringutrustning”.

I2C-datakommunikationsprocessen

  1. Buss i viloläge (buss ledig):
    • Innan någon kommunikation inleds ligger både SDA (seriell datalinje) och SCL (seriell klocklinje) på hög nivå, vilket indikerar att bussen är inaktiv.
  2. Startvillkor:
    • På initiativ av mastern inträffar en startbetingelse när SDA-ledningen övergår från hög till låg medan SCL-ledningen är hög. Detta signalerar till alla slavenheter att kommunikationen är på väg att inledas.
  3. Skicka adressen:
    • Masterenheten skickar en 7-bitarsadress till den slaven som den vill kommunicera med. Därefter följer en åttonde bit, läs-/skrivbiten (R/W), som anger operationens riktning: 0 för skrivning och 1 för läsning.
    • Denna kombinerade 8-bitarssekvens kallas adressramen.
    • I det speciella fallet med 10-bitarsadresser sänder mastern 2 byte. Den första byten inleds med 11110, följt av bit 9 och 8 i 10-bitarsadressen, och därefter R/W-biten. Den andra byten innehåller bit 7–0 i 10-bitarsadressen.
  4. Bekräftelsebit (ACK):
    • När adress- och R/W-bitarna har skickats släpper mastern SDA-ledningen. Den adresserade slaven sänker spänningen på SDA-ledningen (bekräftelsebit) för att bekräfta att den har tagit emot sin adress och är redo för kommunikation.
  5. Dataöverföring:
    • Vid en skrivoperation skickar mastern en byte data till slaven. Slaven bekräftar mottagandet genom att sänka SDA-linjen under en klockpuls.
    • Vid en läsoperation skickar slaven en byte data till mastern. Mastern bekräftar mottagandet men släpper SDA-ledningen (ett NACK eller ingen bekräftelse) efter den sista byten under läsoperationen, vilket signalerar till slaven att sluta skicka data.
  6. Stoppvillkor:
    • För att avsluta en kommunikationssession genererar mastern ett stoppvillkor genom att växla SDA-ledningen från låg till hög nivå medan SCL-ledningen är på hög nivå. Efter stoppvillkoret återgår bussen till viloläge.
    • Masteren kan också generera ett upprepat startvillkor för att behålla kontrollen över bussen inför ytterligare en läs- eller skrivoperation. Detta används ofta vid mer komplexa operationer, till exempel när man vill ändra datariktningen utan att släppa bussen.
Processen för seriell datakommunikation via I2C
Processen för seriell datakommunikation via I2C.

Läs mer:Vad är baudhastighet?

Kommunikation med flera slavar

Om det finns flera slavenheter kommunicerar mastern med var och en av dem via deras unika adresser. Endast den slavenhet som har den matchande adressen svarar och kommunicerar, medan de övriga ignorerar meddelandena.

Tidsförlängning

En slav kan hålla SCL-linjen nedtryckt (en process som kallas klocksträckning) om den behöver mer tid för att bearbeta en instruktion eller hämta data. Mastern måste vänta med att fortsätta tills SCL-linjen släpps.

Bussarbitrering (för Multi-Master)

Arbitrering är den process som avgör vilken masterenhet som får kontroll över bussen när flera masternheter försöker inleda kommunikation samtidigt eller inom ett kort tidsintervall. I2C stöder flera masternheter, vilket innebär att mer än en masternhet kan försöka kontrollera bussen vid en given tidpunkt utan att meddelandet skadas.

I2C-förfarande för tvistlösning:
  • När en master inleder en överföring utgår den från att den har kontroll över bussen.
  • När den skickar adress- och databitarna kontrollerar den SDA-linjen efter att varje bit har skrivits. Om den skriver en 0 och läser tillbaka ett 1, den inser att en annan ledare har kontrollen och drar sig tillbaka, vilket innebär att den förlorar tvisten.
  • Den master som förlorade skiljedomsförfarandet avbryter omedelbart sändningen och väntar tills SCL-linjen (Serial Clock) går till HIGH-läge, vilket indikerar att den aktuella överföringen är avslutad, innan den gör ett nytt försök.

Tack vare effektiv dataöverföring med endast två ledare har I2C blivit ett populärt gränssnitt för seriell kommunikation i system där man eftersträvar tillförlitlig och kostnadseffektiv kommunikation.

Läs mer:Exempelkod för implementering av I2C på en 16x2 COG-LCD-skärm


Fördelar med I2C:

  • Enkelhet: Kräver endast två ledningar, oavsett hur många enheter som är anslutna.
  • Flexibilitet: Stöder flera master- och slaveenheter.
  • Energieffektivitet: I2C-kringutrustning kan stängas av när den inte används utan att det påverkar bussen.
  • Inbyggd adressering: Varje enhet på bussen har en unik adress.
  • Bredt stöd: Många mikrokontroller och kringutrustning har inbyggda I2C-hårdvarugränssnitt, vilket underlättar integrationen.
  • Flexibla hastighetslägen: I2C stöder flera hastighetslägen.

Nackdelar med I2C:

  • Hastighetsbegränsningar: Vanligtvis långsammare än andra protokoll, såsom SPI.
  • Avståndsbegränsningar: I2C är avsett för korta avstånd. Vid längre avstånd kan signalintegriteten och bruset bli ett problem.
  • Komplexitet i stora nätverk: Ju fler enheter som läggs till, desto mer komplicerad kan adresseringen bli.
  • Ingen felkontroll: Saknar en inbyggd mekanism för felkontroll.
  • Enkelansluten: Ingen differentiell signalöverföring, vilket kan förbättra störningsimmuniteten.

I2C jämfört med andra protokoll för seriell kommunikation

När du väljer ett protokoll för seriell kommunikation till ditt projekt är det viktigt att ta hänsyn till just din applikations specifika behov. Även om I2C är ett populärt val finns det andra protokoll att välja mellan, till exempel SPI, RS-232, CAN och UART. Varje protokoll har sina egna fördelar och nackdelar, så det är viktigt att väga för- och nackdelarna mot varandra innan du fattar ett beslut.

I2C jämfört med SPI (Serial Peripheral Interface):

  • Ledningar: SPI kräver fler ledningar: SCLK (seriell klocka), MOSI (Master Out Slave In), MISO (Master In Slave Out) samt en separat SS (Slave Select) för varje enhet. I2C kräver däremot endast SDA och SCL.
  • Hastighet: SPI kan vara snabbare än I2C eftersom det inte finns någon adressfas vid dataöverföringen.
  • Flexibilitet: Medan I2C har inbyggt stöd för konfiguration med flera master, har SPI inte det.

I2C jämfört med UART (Universal Asynchronous Receiver-Transmitter):

  • Protokollens komplexitet: UART är enklare eftersom det endast handlar om två enheter som kommunicerar med varandra via två ledningar (TX och RX). I2C kan ansluta flera enheter med hjälp av endast två ledningar.
  • Synkronisering: UART är asynkron (ingen klockledning), medan I2C är synkron (kräver en klockledning).

I2C jämfört med CAN (Controller Area Network):

  • Användningsfall: CAN är avsett för fordon och industriella system där tillförlitlighet under störningsrika förhållanden är avgörande. I2C är mer avsett för kortdistanskommunikation mellan integrerade kretsar i samma system.
  • Tillförlitlighet: CAN har inbyggda mekanismer för felkontroll och felkorrigering, vilket inte är fallet med I2C.

I2C jämfört med RS232:

  • RS232 använder tre ledningar och stöder endast två enheter (en sändare och en mottagare), medan I2C stöder flera enheter med endast två ledningar.
  • RS-232 lämpar sig för kommunikation över långa avstånd.
Protokoll Antal ledningar Hastighet Komplexitet Strömförbrukning Vanliga användningsområden
I2C 2 Långsamt Medium Låg Inbyggda system, sensorer, displayer, ställdon, kringutrustning.
SPI 4 Snabb Medium Medium Höghastighetskommunikation, minneschips.
UART 2 Långsamt Låg Låg Asynkron kommunikation, seriell kommunikation över långa avstånd.
CAN 2 Snabb Medium Medium Tillämpningar inom fordons- och industrisektorn.
RS-232 3 Långsamt Medium Medium Datorer, skrivare, modem.

Slutsats

I2C är ett oumbärligt kommunikationsprotokoll som under flera decennier har visat sig vara effektivt inom elektronikbranschen. Dess enkelhet, i kombination med möjligheten att ansluta flera enheter med endast två ledningar, gör det till ett populärt val för många tillämpningar. Liksom alla protokoll har det dock sina begränsningar och är inte idealiskt för alla situationer. När man utformar ett system bör man utvärdera tillämpningens specifika behov och välja det kommunikationsprotokoll som bäst motsvarar dessa behov.