I2C-bussprotokoll Handledning, gränssnitt med applikationer

Prova Vårt Instrument För Att Eliminera Problem





Numera spelar protokollen en viktig roll i inbäddad systemdesign . Utan att gå till protokollen, om du vill utöka de perifera funktionerna i mikrokontrollen kommer komplexiteten och strömförbrukningen att öka. Det finns olika typer av bussprotokoll som USART, SPI, CAN, I2C-bussprotokoll , etc., som används för att överföra data mellan två system.

I2C-protokollet

Vad är I2C-buss?




För att sända och ta emot informationen mellan två eller fler än två enheter krävs en kommunikationsväg som kallas ett bussystem. En I2C-buss är en dubbelriktad seriell buss med två ledningar som används för att transportera data mellan integrerade kretsar. I2C står för 'Inter Integrated Circuit'. Den introducerades först av Philips halvledare 1982. I2C-bussen består av tre dataöverföringshastigheter som standard, snabbläge och höghastighetsläge. I2C-bussen stöder 7-bitars och 10-bitars adressutrymmesenhet och dess funktion skiljer sig åt med låga spänningar.

I2c Bus Protocol

I2c Bus Protocol



I2C-signallinjer

I2C-signallinjer

I2C-signallinjer

I2C är ett seriellt bussprotokoll som består av två signallinjer som SCL- och SDL-linjer som används för att kommunicera med enheterna. SCL står för en 'seriell klocklinje' och denna signal drivs alltid av 'masterenheten'. SDL står för ”seriell datalinje”, och denna signal drivs av antingen master- eller I2C-kringutrustningen. Både dessa SCL- och SDL-linjer är i öppet dräneringsläge när det inte sker någon överföring mellan I2C-kringutrustning.

Open-Drain-utgångar


Den öppna avloppet är koncept för FET-transistor vari transistorns avloppsterminal är i öppet tillstånd. SDL- och SCL-stiften på masterenheten är utformade med transistorerna i öppet tillstånd, så dataöverföring är endast möjlig när dessa transistorer genomförs. Följaktligen är dessa ledningar eller avloppsterminaler anslutna grundliga uppdragningsmotstånd till VCC för ledningsläge.

I2C-gränssnitt

Många slavenheter är gränssnitt till mikrokontrollern med hjälp av I2C-bussen genom I2C-nivåväxlar-IC för att överföra informationen mellan dem. I2C-protokollet används för att ansluta högst 128 enheter som alla är anslutna för att kommunicera med SCL- och SDL-linjerna på masterenheten samt slavenheterna. Den stöder Multimaster-kommunikation, vilket innebär att två mastrar används för att kommunicera de externa enheterna.

I2C Dataöverföringshastigheter

I2C-protokollet använder tre lägen, såsom: snabbläge, höghastighetsläge och standardläge, där standardlägesdatahastigheten ligger mellan 0Hz och 100Hz, och snabblägesdata kan överföras med 0Hz till 400 KHz-hastighet och höghastighetsläget med 10 KHz till 100KHz. 9-bitarsdata sänds för varje överföring där 8-bitar sänds av sändaren MSB till LSB, och den 9: e biten är en bekräftelsebit som sänds av mottagaren.

I2C Dataöverföringshastigheter

I2C Dataöverföringshastigheter

I2C-kommunikation

I2C-bussprotokollet används oftast i master- och slavkommunikation där master kallas ”mikrokontroller” och slaven kallas andra enheter som ADC, EEPROM, DAC och liknande enheter i det inbäddade systemet. Antalet slavapparater är anslutna till masterenheten med hjälp av I2C-bussen, varvid varje slav består av en unik adress för att kommunicera den. Följande steg används för att kommunicera masterenheten till slaven:

Steg 1: Först utfärdar huvudenheten ett startvillkor för att informera alla slavenheter så att de lyssnar på den seriella datalinjen.

Steg 2: Huvudenheten skickar adressen till målslavsenheten som jämförs med alla slavenheternas adresser som är anslutna till SCL- och SDL-linjerna. Om någon adress matchar väljs den enheten och resterande alla enheter kopplas bort från SCL- och SDL-linjerna.

Steg 3: Slavanordningen med en matchad adress mottagen från mastern svarar med en bekräftelse till mastern därefter upprättas kommunikation mellan både master- och slavenheterna på databussen.

Steg 4: Både mastern och slaven tar emot och överför data beroende på om kommunikationen läses eller skrivs.

Steg 5: Därefter kan mastern överföra 8-bitars data till mottagaren som svarar med en 1-bitars bekräftelse.

I2C Handledning

Sändning och mottagning av information steg för steg seriellt med avseende på klockpulser kallas I2C-protokoll. Det är ett intersystem och kortdistansprotokoll, vilket betyder att det används i kretskortet för att kommunicera master- och slavenheterna.

Grunderna för I2C-protokollet

I allmänhet består I2C-bussystemet av två ledningar som enkelt används för att utöka periferifunktionerna för in- och utmatning som ADC, EEROM och RTC, och andra grundläggande komponenter att skapa ett system vars komplexitet är mycket mindre.

Exempel: Eftersom 8051 mikrokontroller inte har någon inbyggd ADC - så om vi vill ansluta några analoga sensorer till 8051 mikrokontroller - måste vi använda ADC-enheter som ADC0804-1-kanal ADC, ADC0808- 8-kanals ADC, etc. Genom att använda dessa ADC, vi kan ansluta de analoga sensorerna till mikrokontrollern.

Utan att använda protokollet för att utöka I / O-funktionerna hos någon mikrokontroller eller processor kan vi gå till 8255 ICit 8-stifts enhet. De 8051 mikrokontroller är en 40-stifts mikrokontroller med hjälp av 8255 IC kan vi utöka 3-I / O-portarna med 8-stift i varje port. Genom att använda alla enheter som RTC, ADC, EEPROM, Timers etc. - för att utöka periferikretsarna - ökas också komplexitet, kostnad, strömförbrukning och produktstorlek.

För att lösa detta problem kommer protokollkonceptet in i bilden för att minska hårdvarukomplexiteten och strömförbrukningen. Vi kan utöka fler antal funktioner, till exempel I / 0-kringutrustning, ADC, T / C och minnesenheter upp till 128 enheter med hjälp av detta I2C-protokoll.
Terminologi används i I2C-protokoll

Sändare: Enheten som skickar data till bussen kallas sändare.

Mottagare: Enheten som tar emot data från bussen kallas en mottagare.

Bemästra: Enheten som initierar överföringar för att generera klocksignaler och avsluta en överföring kallas en master.

Slav: Enheten adresserad av en mästare kallas en slav.

Multimaster: Mer än en mästare kan försöka styra bussen samtidigt utan att skada meddelandet kallas en Multimaster.

Skiljedom: Procedur för att se till att, om mer än en mästare samtidigt försöker styra bussen - endast en får göra så att det vinnande meddelandet inte skadas.

Synkronisering: Procedur för att synkronisera klocksinglarna för två eller flera enheter kallas synkronisering.

I2C grundläggande kommandosekvens

  1. Starta Bit-tillstånd
  2. Stop Bit Condition
  3. Bekräftelse villkor
  4. Master till slav Skriv-operation
  5. Läs Operation Slave to Master

Starta och stoppa bitvillkor

När mastern (mikrokontroller) vill prata med en slavenhet (till exempel ADC) börjar kommunikationen genom att utfärda ett startvillkor på I2C-bussen och sedan utfärda ett stoppvillkor. I2C-start- och stopplogiknivåerna visas i figuren.

I2C startvillkor definieras som en hög till låg övergång av SDA-linjen medan SCL-linjen är hög. Ett I2C-stopptillstånd inträffar när SDA-linjen växlar från låg till hög medan SCL-linjen är hög.

I2C-master genererar alltid S- och P-förhållandena. När I2C-mastern initierar ett START-tillstånd anses I2c-bussen vara i upptagen tillstånd.

Starta och stoppa bitvillkor

Starta och stoppa bitvillkor

Programmering:

START Condtion:

sbit SDA = P1 ^ 7 // initialisera SDA- och SCL-stiften på mikrokontrollern //
sbit SCL = P1 ^ 6
ogiltig fördröjning (osignerad int)
ogiltigt huvud ()
{
SDA = 1 // bearbetning av data //
SCL = 1 // klockan är hög //
dröjsmål()
SDA = 0 // skickade data //
dröjsmål()
SCL = 0 // klocksignalen är låg //
}
Ofördröjning (int p)
{
unsignedinta, f
För (a = 0a<255a++) //delay function//
För (b = 0b}

STOP-tillstånd:

ogiltigt huvud ()
{
SDA = 0 // Sluta bearbeta data //
SCL = 1 // klockan är hög //
dröjsmål()
SDA = 1 // Stoppad //
dröjsmål()
SCL = 0 // klocksignalen är låg //
}
Ofördröjning (int p)
{
unsignedinta, f
För (a = 0a<255a++) //delay function//
För (b = 0b}

Bekräftelse (ACK) och Ingen bekräftelse (NCK)

Varje byte som sänds över I2C-bussen följs av ett bekräftelsestillstånd från mottagaren, vilket innebär att, efter att mastern drar SCL lågt för att slutföra överföringen av 8-bit, kommer SDA att dras ned av mottagaren till mastern. Om SDA-linjen LOW efter sändningen av mottagaren inte dras anses vara ett NCK-tillstånd.

Acknowledgement (ACK)

Acknowledgement (ACK)

Programmering

Bekräftelse
ogiltigt huvud ()
{
SDA = 0 // SDA-linjen går till låg //
SCL = 1 // klockan är hög till låg //
fördröjning (100)
SCL = 0
}
Ingen bekräftelse:
ogiltigt huvud ()
{
SDA = 1 // SDA-linjen går till hög //
SCL = 1 // klockan är hög till låg //
fördröjning (100)
SCL = 0
}

Master to Slave Writer Operation

I2C-protokollet överför data i form av paket eller byte. Varje byte följs av en bekräftelsebit.

Dataöverföringsformat

Dataöverföringsformat

Dataöverföringsformat

Start: Primärt dataöverföringssekvensen initierad av mastern som genererar startvillkoret.

7-bitars adress: Därefter skickar mastern slavadressen i två 8-bitarsformat istället för en enda 16-bitarsadress.

R / W: Om läs- och skrivbiten är hög utförs skrivoperationen.

ACK: Om skrivoperationen utförs i slavenheten skickar mottagaren 1-bitars ACK till mikrokontrollern.

Sluta: Efter avslutad skrivoperation i slavenheten skickar mikrokontrollern stopptillståndet till slavenheten.

Programmering

Skriv operation

voidwrite (osignerad char d)
{
Osignerad char k, j = 0x80
För (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
fördröjning (4)
SCL = 0
}
SDA = 1
SCL = 1
fördröjning (2)
c = SDA
fördröjning (2)
SCL = 0
}

Master to Slave Read Operation

Data läses tillbaka från slavenheten i form av bit eller byte - läs den viktigaste biten först och läs den minst signifikanta biten sist.

Dataläsningsformatet

Dataavläsningsformat

Dataavläsningsformat

Start: I första hand initieras dataöverföringssekvensen genom att mastern genererar startvillkoret.

7-bitars adress: Därefter skickar mastern slavadressen i två 8-bitarsformat istället för en enda 16-bitarsadress.

R / W: Om läs- och skrivbiten är låg utförs läsoperationen.

ACK: Om skrivoperationen utförs i slavenheten skickar mottagaren 1-bitars ACK till mikrokontrollern.

Sluta: Efter avslutad skrivoperation i slavenheten skickar mikrokontrollern stopptillståndet till slavenheten.

Programmering

Ogiltig läsning ()
{
Osignerad röd j, z = 0x00, q = 0x80
SDA = 1
för (j = 0j<8j++)
{
SCL = 1
fördröjning (100)
flagga = SDA
if (flagga == 1)
q)
q = q >> 1
fördröjning (100)
SCL = 0

Praktiskt exempel på gränssnitt mellan ADC och 8051 Microcontroller

ADC är en enhet som används för att konvertera analoga data till digitala och digitala till analoga. 8051-mikrokontrollern har ingen inbyggd ADC så vi måste lägga till externt via I2C-protokollet. PCF8591 är den I2C-baserade analog till digital och digital till analog omvandlare. Den här enheten kan stödja maximalt 4-analoga ingångskanaler tillsammans med 2,5 till 6 v spänningar.

Analoga utgångar

De analoga utgångarna kommer i form av spänningar. Till exempel ger 5v analog sensor utgångslogik på 0,01v till 5v.
Det maximala digitala värdet på 5v är = 256.
Värdet på 2,5v är = 123 enligt det maximala spänningsvärdet.

Formeln för analog utgång är:

Formeln för digitala utgångar:

Gränssnitt ADC till 8051 Microcontroller

Gränssnitt ADC till 8051 Microcontroller

Ovanstående figur visar dataöverföringen med hjälp av I2C-protokoll från ADC-enhet till 8051 mikrokontroller. ADC-stiften på SCL och SDA är anslutna till stift 1.7 och 1.6 på mikrokontrollern för att upprätta kommunikation mellan dem. När sensorn ger ADC analoga värden konverterar den till digital och överför data till mikrokontrollern via I2C-protokollet.

Det här handlar om I2C-bussprotokollhandledningen med lämpliga program. Vi hoppas att det givna innehållet ger dig ett praktiskt koncept för gränssnitt mellan flera enheter och mikrokontroller som använder I2C-kommunikationen. Om du är osäker på gränssnittsförfarandet för detta protokoll kan du nå oss genom att kommentera nedan.