I2C busprotokol Vejledning, grænseflade med applikationer

I2C busprotokol Vejledning, grænseflade med applikationer

I dag spiller protokollerne en vigtig rolle i indlejret systemdesign . Uden at gå til protokollerne øges kompleksiteten og strømforbruget, hvis du vil udvide de perifere funktioner i mikrokontrolleren. Der findes forskellige typer busprotokoller, såsom USART, SPI, CAN, I2C-busprotokol osv., som bruges til at overføre data mellem to systemer.



I2C-protokol

Hvad er I2C Bus?


Overførsel og modtagelse af informationen mellem to eller flere end to enheder kræver en kommunikationssti kaldet et bussystem. En I2C-bus er en tovejs seriel bus med to ledninger, der bruges til at transportere dataene mellem integrerede kredsløb. I2C står for 'Inter Integrated Circuit'. Den blev først introduceret af Philips halvledere i 1982. I2C-bussen består af tre dataoverførselshastigheder såsom standard, hurtig-tilstand og høj hastighed-tilstand. I2C-bussen understøtter 7-bit og 10-bit adresseafstandsenhed, og dens funktion varierer med lave spændinger.





I2c busprotokol

I2c busprotokol

I2C signallinjer



I2C signallinjer

I2C signallinjer

I2C er en seriel busprotokol, der består af to signallinjer såsom SCL- og SDL-linjer, der bruges til at kommunikere med enhederne. SCL står for en 'seriel urlinje', og dette signal drives altid af 'master-enheden'. SDL står for den 'serielle datalinje', og dette signal drives af enten master- eller I2C-periferiudstyret. Både disse SCL- og SDL-linjer er i åben dræningstilstand, når der ikke er nogen overførsel mellem I2C-periferiudstyr.

Open-Drain udgange


Det åbne afløb er koncept til FET transistor hvor transistorens afløbsterminal er åben tilstand. SDL- og SCL-stifterne på masterenheden er designet med transistorer i åben tilstand, så dataoverførsel er kun mulig, når disse transistorer udføres. Derfor er disse linjer eller afløbsterminaler forbundet grundige trækmodstande til VCC for ledningstilstand.

I2C-grænseflader

Mange slaveenheder er grænseflade til mikrokontrolleren ved hjælp af I2C-bussen gennem I2C niveauskifter IC til at overføre informationen mellem dem. I2C-protokollen bruges til at forbinde maksimalt 128 enheder, der alle er tilsluttet for at kommunikere med SCL- og SDL-linjerne på masterenheden samt slaveenhederne. Det understøtter Multimaster-kommunikation, hvilket betyder, at to mastere bruges til at kommunikere de eksterne enheder.

I2C Dataoverførselshastigheder

I2C-protokollen fungerer med tre tilstande, såsom: hurtig tilstand, høj hastighedstilstand og standardtilstand, hvor standardtilstandens datahastighed ligger i området 0Hz til 100Hz, og dataene i hurtigtilstand kan overføres med 0Hz til 400 KHz hastighed og højhastighedstilstand med 10 KHz til 100KHz. 9-bit-dataene sendes for hver overførsel, hvor 8-bit sendes af senderen MSB til LSB, og den 9. bit er en bekræftelsesbit, der sendes af modtageren.

I2C Dataoverførselshastigheder

I2C Dataoverførselshastigheder

I2C Kommunikation

I2C-busprotokollen bruges mest i master- og slavekommunikation, hvor master kaldes “microcontroller”, og slave kaldes andre enheder såsom ADC, EEPROM, DAC og lignende enheder i det integrerede system. Antallet af slaveenheder er forbundet til masterenheden ved hjælp af I2C-bussen, hvor hver slave består af en unik adresse til at kommunikere den. Følgende trin bruges til at kommunikere masterenheden til slaven:

Trin 1: For det første udsteder masterenheden en startbetingelse for at informere alle slaveenhederne, så de lytter på den serielle datalinje.

Trin 2: Master-enheden sender adressen på mål-slave-enheden, der sammenlignes med alle slave-enhedernes adresser som forbundet med SCL- og SDL-linjerne. Hvis nogen adresse stemmer overens, vælges den enhed, og de resterende alle enheder er afbrudt fra SCL- og SDL-linjerne.

Trin 3: Slaveindretningen med en matchet adresse modtaget fra masteren, svarer med en bekræftelse til masteren, hvorefter der etableres kommunikation mellem både master- og slaveindretningen på databussen.

Trin 4: Både master og slave modtager og transmitterer data afhængigt af om kommunikationen læses eller skrives.

Trin 5: Derefter kan masteren sende 8-bit data til modtageren, som svarer med en 1-bit-kvittering.

I2C vejledning

Transmission og modtagelse af informationen trin for trin serielt med hensyn til urimpulserne kaldes I2C-protokol. Det er en inter-system og kortdistance-protokol, hvilket betyder, at den bruges inden i printkortet til at kommunikere master- og slaveenhederne.

Grundlæggende om I2C-protokol

Generelt består I2C-bussystemet af to ledninger, der nemt bruges til at udvide input- og output-perifere funktioner såsom ADC, EEROM og RTC, og andre grundlæggende komponenter at skabe et system, hvis kompleksitet er meget mindre.

Eksempel: Da 8051 mikrokontroller ikke har nogen indbygget ADC - så hvis vi ønsker at interface nogen analoge sensorer til 8051 mikrokontrolleren - er vi nødt til at bruge ADC-enheder såsom ADC0804-1 kanal ADC, ADC0808- 8 kanal ADC osv. Ved at bruge disse ADC'er, vi kan interface de analoge sensorer til mikrocontrolleren.

Uden at bruge protokollen til at udvide I / O-funktionerne på en hvilken som helst mikrokontroller eller processor kan vi gå til 8255 ICit 8-pin-enhed. Det 8051 microcontroller er en 40-pin mikrocontroller ved hjælp af 8255 IC kan vi udvide 3-I / O-porte med 8-ben i hver port. Ved at bruge alle enheder såsom RTC, ADC, EEPROM, Timere osv. - til at udvide det perifere kredsløb - øges også kompleksitet, omkostninger, strømforbrug og produktstørrelse.

For at løse dette problem kommer protokolkonceptet ind i billedet for at reducere hardwarekompleksiteten og strømforbruget. Vi kan udvide flere antal funktioner, såsom I / 0-periferiudstyr, ADC'er, T / C og hukommelsesenheder op til 128 enheder ved hjælp af denne I2C-protokol.
Terminologi, der anvendes i I2C-protokoller

Sender: Enheden, der sender data til bussen, kaldes sender.

Modtager: Enheden, der modtager data fra bussen, kaldes en modtager.

Mestre: Enheden, der initierer overførsler for at generere et ur signal og afslutte en overførsel kaldes en master.

Slave: Enheden adresseret af en mester kaldes en slave.

Multimaster: Mere end en master kan forsøge at kontrollere bussen på samme tid uden at ødelægge meddelelsen kaldes en Multimaster.

Voldgift: Fremgangsmåde for at sikre, at hvis mere end en master samtidigt prøver at kontrollere bussen - kun en har lov til at gøre det, er den vindende besked ikke beskadiget.

Synkronisering: Fremgangsmåde til at synkronisere ursinglerne på to eller flere enheder kaldes synkronisering.

I2C Grundlæggende kommandosekvens

  1. Start Bit-tilstand
  2. Stop Bit-tilstand
  3. Bekræftelsesbetingelse
  4. Master til slave-skrivning
  5. Læs Operation Slave to Master

Start og stop bit-tilstand

Når masteren (mikrokontroller) ønsker at tale med en slaveenhed (for eksempel ADC), begynder den kommunikation ved at udstede en startbetingelse på I2C-bussen og udsender derefter en stoptilstand. I2C start- og stoplogikniveauer vises i figuren.

I2C-startbetingelsen definerer som en høj til lav overgang af SDA-linjen, mens SCL-linjen er høj. EN I2C-stoptilstand opstår, når SDA-linjen skifter fra lav til høj, mens SCL-linjen er høj.

I2C-master genererer altid S- og P-forholdene. Når I2C-masteren initierer en START-tilstand, betragtes I2c-bussen som optaget.

Start og stop bit-tilstand

Start og stop bit-tilstand

Programmering:

START kondition:

sbit SDA = P1 ^ 7 // initialiser microcontrollerens SDA- og SCL-ben //
sbit SCL = P1 ^ 6
ugyldig forsinkelse (usigneret int)
ugyldig hoved ()
{
SDA = 1 // behandling af data //
SCL = 1 // uret er højt //
forsinke()
SDA = 0 // sendte data //
forsinke()
SCL = 0 // urets signal er lavt //
}
Annulleret forsinkelse (int p)
{
unsignedinta, b
For (a = 0a<255a++) //delay function//
For (b = 0b}

STOP-tilstand:

ugyldig hoved ()
{
SDA = 0 // Stop behandling af data //
SCL = 1 // uret er højt //
forsinke()
SDA = 1 // stoppet //
forsinke()
SCL = 0 // urets signal er lavt //
}
Annulleret forsinkelse (int p)
{
unsignedinta, b
For (a = 0a<255a++) //delay function//
For (b = 0b}

Bekræftelse (ACK) og Ingen bekræftelse (NCK)

Hver byte, der transmitteres over I2C-bussen, efterfølges af en kvitteringsbetingelse fra modtageren, hvilket betyder, at når masteren trækker SCL lavt for at afslutte transmissionen af ​​8-bit, trækkes SDA lavt af modtageren til masteren. Hvis SDA-linjen LOW efter transmission af modtageren ikke trækkes betragtes som en NCK-tilstand.

Bekræftelse (ACK)

Bekræftelse (ACK)

Programmering

Anerkendelse
ugyldig hoved ()
{
SDA = 0 // SDA-linjen går til lav //
SCL = 1 // uret er højt til lavt //
forsinkelse (100)
SCL = 0
}
Ingen anerkendelse:
ugyldig hoved ()
{
SDA = 1 // SDA linje går til høj //
SCL = 1 // uret er højt til lavt //
forsinkelse (100)
SCL = 0
}

Master to Slave skriver operation

I2C-protokollen overfører dataene i form af pakker eller bytes. Hver byte efterfølges af en kvitteringsbit.

Dataoverførselsformat

Dataoverførselsformat

Dataoverførselsformat

Start: Primært dataoverførselssekvensen initieret af masteren, der genererer starttilstanden.

7-bit adresse: Derefter sender masteren slaveadressen i to 8-bit formater i stedet for en enkelt 16-bit adresse.

R / W: Hvis læse- og skrivebiten er høj, udføres skrivningen.

ALAS: Hvis skrivehandlingen udføres i slaveenheden, sender modtageren 1-bit ACK til mikrocontrolleren.

Hold op: Efter afslutningen af ​​skriveoperationen i slaveenheden sender mikrokontrolleren stoptilstanden til slaveenheden.

Programmering

Skriv operation

voidwrite (usigneret char d)
{
Usigneret char k, j = 0x80
For (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
forsinkelse (4)
SCL = 0
}
SDA = 1
SCL = 1
forsinkelse (2)
c = SDA
forsinkelse (2)
SCL = 0
}

Master til slave-læsning

Dataene læses tilbage fra slaveenheden i form af bit eller bytes - læs først den mest betydningsfulde bit og læs den mindst betydningsfulde bit sidst.

Datalæsningsformatet

Datalæsningsformat

Datalæsningsformat

Start: Dataoverførselssekvensen initieres primært af masteren, der genererer starttilstanden.

7-bit adresse: Derefter sender masteren slaveadressen i to 8-bit formater i stedet for en enkelt 16-bit adresse.

R / W: Hvis læse- og skrivebiten er lav, udføres læseoperationen.

ALAS: Hvis skrivehandlingen udføres i slaveenheden, sender modtageren 1-bit ACK til mikrocontrolleren.

Hold op: Efter afslutningen af ​​skriveoperationen i slaveenheden sender mikrokontrolleren stoptilstanden til slaveenheden.

Programmering

Annulleret læsning ()
{
Usigneret kultegn j, z = 0x00, q = 0x80
SDA = 1
for (j = 0j<8j++)
{
SCL = 1
forsinkelse (100)
flag = SDA
hvis (flag == 1)
q)
q = q >> 1
forsinkelse (100)
SCL = 0

Praktisk eksempel på interfacering af ADC til 8051 mikrokontroller

ADC er en enhed, der bruges til at konvertere de analoge data til form af digital og digital til analog. 8051-mikrocontrolleren har ikke en indbygget ADC, så vi skal tilføje eksternt gennem I2C-protokollen. PCF8591 er den I2C-baserede analog til digital og digital til analog konverter. Denne enhed kan understøtte maksimalt 4 analoge indgangskanaler sammen med 2,5 til 6 v spændinger.

Analoge udgange

De analoge udgange kommer i form af spændinger. For eksempel giver 5v analog sensor outputlogik på 0,01v til 5v.
Den maksimale digitale værdi på 5v er = 256.
Værdien af ​​2,5 v er = 123 i henhold til den maksimale spændingsværdi.

Formlen for analog udgang er:

Formlen for digitale udgange:

Interfacing ADC til 8051 Microcontroller

Interfacing ADC til 8051 Microcontroller

Ovenstående figur viser dataoverførslen ved hjælp af I2C-protokol fra ADC-enhed til 8051-mikrocontrolleren. ADC-stifterne på SCL og SDA er forbundet til stift 1.7 og 1.6 på mikrocontrolleren for at etablere kommunikation mellem dem. Når sensoren giver analoge værdier til ADC'en, konverteres den til digital og overfører data til mikrocontrolleren gennem I2C-protokollen.

Dette handler om I2C-busprotokolvejledningen med passende programmer. Vi håber, at det givne indhold giver dig et praktisk koncept for at grænseflade mellem flere enheder og mikrocontrollere ved hjælp af I2C-kommunikationen. Hvis du er i tvivl om grænsefladeproceduren i denne protokol, kan du kontakte os ved at kommentere nedenfor.