I2C
Denne side er en kort sammenfatning af noget af indholdet fra I2C.info[1] og [2] specielt undersiden med selve specifikationen[3]. Hvis man vil yderligere i dybden med protokollen, så kan man læse en af specifikationerne fra I2C[4]
I2C protokollen er oprindeligt defineret af Philips, men bruges vidt udbredt af mange i elektronik-industrien.
Den typiske anvendelse er en Master (typisk en computer eller microcontroller) det kan kommunikere med en eller flere slave-enheder (specifikke IC'er eller andre microcontrollere), der har hver sin adresse. Man kan både sende og modtage data fra de enkelte slave-enheder, og der specificeres for den enkelte enhed, hvordan man kommunikerer med den.
Man kan finde produkter der sælges som "2 wire interface". Typisk overholder de I2C standarden, men ønsker ikke at betale for rettighederne for at anvende navnet I2C.
Elektrisk
I2C består af to signal-ledninger SDA og SCL, der kommunikerer det hele i forhold til en stel-ledning. Signalerne har en pull-up der typisk går til 5V, således at der er 5V på begge ledninger når der ikke kommunikeres.
Typisk kan systemet bestå af en Master og et antal slaver som skitseret her. De to modstande sørger for at linjen er høj, når der ikke kommunikeres på den.
Skitse af I2C system med en Master og 3 slaver (ADC, DAC og RTC)
Kommunikations-hastighed
Den typiske kommunikations-hastighed for I2C er 100kBit/sekund.
Der har tidligere været standard også for 10kBit/sekund, men den nye 100kBit standard er defineret ned til 0, så den er overflødig.
Der findes også hurtigere standarder op til 3,4 MBit/sekund, men de fleste mindre enheder understøtter kun 100kBit/sekund.
Vente-tilstand
Hvis en enhed skal bruge tid på at behandle den modtagne byte, så har slaven den mulighed at den kan trække SCL lav efter den 9. clock-puls. Så længe en slave holder SCL lav, så må masteren ikke begynde at sende den næste byte før SCL bliver høj igen - det giver slaven mulighed for at kunne f.x. gemme data før den er klar til at behandle næste byte.
Master og Slave
Den typiske anvendelse af af I2C er at der er en Master, der kan kommunikere med en eller flere Slaver.
Denne dokumentation går på denne type anvendelse.
Multi Master
I2C standarden beskriver også anvendelse af flere mastere, hvor de forskellige mastere skal "slås" om bussen, så det er en noget mere kompliceret måde at kommunikere på.
Denne type kommunikation er ikke dokumenteret her, og der henvises til referencerne[4] for nærmere detaljer.
Start og stop
I den typiske konfiguration vil Masteren starte kommunikationen med en start-condition, kommunikere der masteren ønsker og afslutte med en stop-condition.
En del af I2C definitionen siger at SDA ikke må skifte niveau, når SCL er høj - der er dog to undtagelser, nemlig når Masteren skal angive start- og stop-condition.
Start-condition sker ved at SDA trækkes lav af Masteren, mens SCL er høj, som det er vist i den grønne indramning.
I2C start-condition vist i den grønne indramning
Stop-condition sker ved at SDA trækkes høj af masteren, mens SCL er høj, som vist i den grønne indramning herunder.
I2C stop-condition vist i den grønne indramning
Kommunikation af en Byte
Hele denne beskrivelse er baseret på 7-bits addressering, men dele af den vil sikkert også være gældende for 10-bits addressering - der er bare ikke specificeret hvilket.
Der kommunikeres altid hele bytes af 8 bit - også ved 7-bits adressen, der i slutningen indeholder en bit der angiver læs/skriv.
De 8 bit kommunikeres ved at mest betydende bit lægges på SDA, hvorefter SCL slippes høj og trækkes lav igen fra masteren, og på samme måde kommunikeres de næste 7 bit. Dette kan ses herunder, hvor mest betydende bit skal læses ved SCL nr. 1, den næste ved SCL nr. 2 og så videre hen til SCL nr. 8, så der kommer en hel byte over. På den 9. SCL bekræftes som beskrevet nedenfor.
Den overførte byte er binært 1101_0001 = hexadecimalt 0xD1 = decimalt 209.
Acknowledge
Som 9. bit sender masteren en clock igen på SCL og her er det slavens opgave at trække SDA lav som Acknowledge, altså en kvittering for at byten er blevet læst. Hvis SDA ikke trækkes lav, så tolkes det som Not Acknowledge.
I den 9. bit har slaven mulighed for at trække SCL lav for at indikere at den endnu ikke er klar til at modtage næste byte. Den melder klar ved at slippe SCL igen, så masteren kan se det og begynde på den næste byte.
I2C Acknowledge af en byte vist ved at slaven trækker SDA lav i den grønne indramning
Læsning og skrivning
Som med alt andet er det Masteren der styrer om der skal læses eller skrives Det gøres i forbindelse med addreseringen, hvor sidste bit af adresse-byten angiver om resten er en skrivning til slaven eller om det er slaven der skal svare med et antal bytes. Det er i begge tilfælde masteren der bestemmer hvornår kommunikationen er slut, ved at sætte en stop-condition.
I det viste tilfælde herunder sendes en adresse med en skrive-kommando som sidste bit.
I2C adresse fra Masteren med 7 bits adresse og en lav bit som bit 8 vist i den grønne indramning - betyder at den/de næste byte skrives fra masteren til slaven
I det viste tilfælde herunder sendes en adresse med en læse-kommando som sidste bit.
I2C adresse fra Masteren med 7 bits adresse og en høj bit som bit 8 vist i den grønne indramning - betyder at den/de næste læses ind fra slaven til masteren
I de tilfælde hvor man skal sende en kommando til slaven (altså skrive til den) og hente et svar tilbage, så kan det gøres ved at man første sender med skrive-kommando, og i stedet for en stop, så sender man en ny adresse til slaven med en læse-kommando.
I det viste tilfælde herunder sendes først en adresse med en skrive-kommando som sidste bit, og derefter skrives en byte. I stedet for at afslutte, så sendes en ny start-condition, som markeret i den grønne indramning.
I2C adresse fra Masteren med 7 bits adresse og en skrive-kommando efterfulgt af en byte til slaven. Herefter sættes en ny start-condition i den grønne indramning (vis i en anden tids-scala)
Efter den viste kommunikation med en ekstra start-condition sendes samme adresse igen, men denne gang med en læse-kommando, så der kan læses fra slaven. I dette tilfælde (ikke vist) læses der 7 bytes fra slaven. Det er afhængigt af slaven hvad man kan skrive til den og læse fra den.
Adresse
Adressefeltet kan indeholde noget information om hvordan bussen skal fungere og hvordan slaverne skal forholde sig som det er angivet i tabellen herunder. Dette er faktisk mest undtagelser, hvor den normale kommunikation foregår med adresser fra 8-119 i 7 bit adresserings-mode.
Adr. binært | Adr. Hex | Adr. Decimalt | R/W | Forklaring |
---|---|---|---|---|
0000 000 | 0x00 | 0 | 0 | General Bus call address |
0000 000 | 0x00 | 0 | 1 | START byte - for langsomme microcontrollere uden I2C h/w |
0000 001 | 0x01 | 1 | X | CBUS address - en anden bus protokol |
0000 010 | 0x02 | 2 | X | Reserveret til et andet bus format |
0000 011 | 0x03 | 3 | X | Reserveret til fremtidig brug |
0000 1XX | 0x04-0x07 | 4-7 | X | High speed mode master code |
0x08-0x77 | 8-119 | X | 7 bits addresserings mode | |
1111 0XX | 0x78-0x7B | 120-123 | X | 10-bit slave addressering |
1111 1XX | 0x7C-0x7F | 124-127 | X | Reserveret til fremtidig brug |
Adressen sendes som de første 7 bit af første byte. Den sidste bit angiver om det er læsning (høj) eller skrivning (lav) der skal ske.
7 bits adressering
Ved normal I2C kommunikation starter Masteren med at sende adressen på Slaven, så slaverne ved hvem der skal modtage noget.
Som det kunne ses under læse og skrive-kommandoeerne, så ligger adressen placeret som de første 7 bit der sendes, som vist herunder.
I2C adresse fra Masteren med 7 bits adresse med hexadecimalværdien 0x68 og den lave bit 8 vist i den grønne indramning - betyder at der skrives til slaven
Den viste adresse er binært 110_1000 efterfulgt af en lav bit som skrivekommando.
Dette kan udtrykkes hexadecimalt som 0x68, eller som decimaltallet 104.
Slaverne kan have adresser i følgende områder:
Binært: 000_1000 - 111_0111
Hexadecimalt: 0x08 - 0x77
Decimalt: 8 - 119
Adresserne 0-7 har en speciel betydning, som angivet i følgende tabel og adresserne 120-127 har ligeledes en speciel betydning som angivet i tabellen.
10 bits adressering
Ikke dokumenteret, men går på at adresser-området 120 til 123 anvendes og at de to bit herfra sammen med en ekstra byte angiver adressen.
Referencer