I2C er en to-lednings seriebus, der bruges til at forbinde en mikrokontroller med flere perifere chips eller moduler. Den er især nyttig, når du vil spare pins på en Arduino og stadig kommunikere med sensorer, displays eller andre tilsluttede moduler.
Den simple forbindelse
Selve I2C-kommunikationen bruger to signalledninger mellem enhederne:
SDA – seriel data
SCL – seriel clock
Der er 2 I2C-signalledninger: SDA og SCL. I en praktisk forbindelse kommer normalt også forsyning og GND med, altså typisk 4 ledninger i alt.
SDA og SCL er busledninger, ikke en separat direkte forbindelse for hver enhed. Flere enheder kan derfor dele de samme to signalledninger, hvis de har forskellige adresser.
Hvordan I2C fungerer
I2C bruger to linjer: SDA (data) og SCL (clock).
Der kan være flere enheder på samme bus, hver med en unik adresse.
Masteren styrer timingen, og de tilsluttede enheder svarer på busserne.
Hastighed i byte
Et I²C-data-byte kræver normalt 9 clockslag: 8 til data og ét til kvittering. Derfor er byte-raten lavere end antallet af clockslag pr. sekund:
Standard-mode: ca. 11 kB/s
Fast-mode: ca. 44 kB/s
Fast-mode Plus: ca. 111 kB/s
High-speed mode: op til ca. 378 kB/s
Tallene er regneeksempler før adresser, START/STOP, gentagne START, ventetid og clock stretching. Mange sensorer understøtter kun standard- eller fast-mode, så brug den laveste grænse, som alle enheder på bussen understøtter.
Typiske egenskaber
God til sensorer og små moduler
Begrænset antal pins
Fungerer godt med flere enheder på én bus
Typisk enkel at implementere i Arduino-programmering
På Arduino Uno
Arduino Uno har typisk standard I2C-pins, som ofte er A4 og A5.
Disse pins kan bruges til at tilslutte moduler som LCD-display, sensorer og andre I2C-enheder.
Du skal ofte bruge pulldown- eller pull-up-modstande, afhængigt af den konkrete bus-opsætning.
Eksempler på brug
LCD1602A med I2C-modul
Tryksensorer og klimatsensorer
Real-time clocks og flere små perifere moduler
Vigtige begreber
Master – den enhed, der styrer kommunikationen
Slave – den enhed, der svarer på masterens kommandoer
Adresse – unik identifikation for hver I2C-enhed på bussen
Flere slaver på samme bus
En master kan kommunikere med flere slaver på de samme SDA- og SCL-ledninger. Hver slave skal normalt have en adresse, så masteren kan vælge, hvem der skal svare.
Alle enheder deler SDA og SCL. Forsyning og GND føres også til hver enhed, mens pull-up-modstande løfter SDA og SCL mod forsyningen.
2 fælles signalledninger: SDA og SCL
Forsyning og GND til hver enhed efter modulets krav
Unik I2C-adresse for hver slave på samme bus
Pull-up-modstande på SDA og SCL, normalt én samlet busløsning
Avanceret: tidslinje for SDA og SCL
På tidslinjen nedenfor starter masteren kommunikationen med START. Derefter sendes typisk en 7-bit adresse, en bit for læs/skriv og en ACK-bit. Kommunikation afsluttes med STOP.
Officiel Arduino-figur af I2C-meddelelsens felter. Figuren viser protokolrækkefølgen; SDA og SCL er de to fysiske signalledninger, der bærer og synkroniserer denne meddelelse.
START – SDA går fra høj til lav, mens SCL er høj.
Data – SDA skal være stabil, mens SCL er høj; bitværdien aflæses typisk dér.
ACK – modtageren trækker SDA lav på den niende clock.
STOP – SDA går fra lav til høj, mens SCL er høj.
Tidslinjen er et forenklet eksempel. Den præcise sekvens afhænger af, om masteren læser eller skriver, og om enheden bruger gentaget START, flere databytes eller clock stretching.
Den lokale figur er hentet fra Arduino-dokumentationens offentlige kildearkiv: I2C.png. Arduino-dokumentationen angiver CC BY-SA 4.0; krediteringen skal bevares ved viderebrug.