I2C buss protokoll Opplæring, grensesnitt med applikasjoner

Prøv Instrumentet Vårt For Å Eliminere Problemer





I dag spiller protokollene en viktig rolle i innebygd systemdesign . Uten å gå til protokollene, vil du øke kompleksiteten og strømforbruket hvis du vil utvide de perifere funksjonene til mikrokontrolleren. Det finnes forskjellige typer bussprotokoller som USART, SPI, CAN, I2C bussprotokoll , etc., som brukes til å overføre data mellom to systemer.

I2C-protokoll

Hva er I2C-buss?




Overføring og mottak av informasjonen mellom to eller flere enn to enheter krever en kommunikasjonsbane som kalles et bussystem. En I2C-buss er en toveis seriell buss med to ledninger som brukes til å transportere dataene mellom integrerte kretser. I2C står for 'Inter Integrated Circuit'. Den ble først introdusert av Philips halvledere i 1982. I2C-bussen består av tre dataoverføringshastigheter, som standard, hurtigmodus og høyhastighetsmodus. I2C-bussen støtter 7-biters og 10-biters adresseplass, og dens drift er forskjellig med lave spenninger.

I2c bussprotokoll

I2c bussprotokoll



I2C signallinjer

I2C signallinjer

I2C signallinjer

I2C er en seriell bussprotokoll som består av to signallinjer som SCL og SDL linjer som brukes til å kommunisere med enhetene. SCL står for en 'seriell klokkelinje' og dette signalet drives alltid av 'master-enheten'. SDL står for 'seriell datalinje', og dette signalet drives av enten master- eller I2C-periferiutstyr. Både disse SCL- og SDL-linjene er i åpen dreneringstilstand når det ikke er noen overføring mellom I2C-periferiutstyr.

Open-Drain utganger


Den åpne avløpet er konsept for FET-transistor hvor avløpsterminalen til transistoren er åpen tilstand. SDL- og SCL-pinnene til masterenheten er designet med transistorene i åpen tilstand, så dataoverføring er bare mulig når disse transistorene blir utført. Derfor er disse ledningene eller avløpsterminalene koblet grundige trekkmotstander til VCC for ledningsmodus.

I2C-grensesnitt

Mange slaveenheter er grensesnittet til mikrokontrolleren ved hjelp av I2C-bussen gjennom I2C nivåskifter IC for å overføre informasjonen mellom dem. I2C-protokollen brukes til å koble til maksimalt 128 enheter som alle er koblet til for å kommunisere med SCL- og SDL-linjene til masterenheten, så vel som slaveenhetene. Den støtter Multimaster-kommunikasjon, noe som betyr at to mestere brukes til å kommunisere de eksterne enhetene.

I2C Dataoverføringshastigheter

I2C-protokollen bruker tre moduser som: hurtigmodus, høyhastighetsmodus og standardmodus der standardmodusdatahastigheten varierer fra 0Hz til 100Hz, og hurtigmodusdataene kan overføres med 0Hz til 400 KHz hastighet og høyhastighetsmodus med 10 KHz til 100KHz. 9-biters data sendes for hver overføring hvor 8-bits sendes av senderen MSB til LSB, og den 9. biten er en bekreftelsesbit sendt av mottakeren.

I2C Dataoverføringshastigheter

I2C Dataoverføringshastigheter

I2C Kommunikasjon

I2C-bussprotokollen brukes oftest i master- og slavekommunikasjon der master kalles “microcontroller”, og slave kalles andre enheter som ADC, EEPROM, DAC og lignende enheter i det innebygde systemet. Antall slaveenheter er koblet til masterenheten ved hjelp av I2C-bussen, hvor hver slave består av en unik adresse for å kommunisere den. Følgende trinn brukes til å kommunisere masterenheten til slaven:

Trinn 1: For det første utsteder hovedenheten en startbetingelse for å informere alle slaveenhetene slik at de lytter på den serielle datalinjen.

Steg 2: Hovedenheten sender adressen til målslaveenheten som sammenlignes med alle slaveenhetens adresser som er koblet til SCL- og SDL-linjene. Hvis noen adresser samsvarer, velges den enheten, og de resterende alle enhetene kobles fra SCL- og SDL-linjene.

Trinn 3: Slaveinnretningen med en matchet adresse mottatt fra masteren, svarer med en bekreftelse til masteren, deretter blir kommunikasjon opprettet mellom både master- og slaveinnretningen på databussen.

Trinn 4: Både master og slave mottar og overfører dataene avhengig av om kommunikasjonen blir lest eller skrevet.

Trinn 5: Deretter kan mesteren overføre 8-bits data til mottakeren som svarer med en 1-bit bekreftelse.

I2C Tutorial

Overføring og mottak av informasjon trinnvis serielt med hensyn til klokkepulsene kalles I2C-protokoll. Det er en intersystem- og kortdistanseprotokoll, som betyr at den brukes i kretskortet for å kommunisere master- og slaveenhetene.

Grunnleggende om I2C-protokoll

Generelt består I2C-bussystemet av to ledninger som enkelt brukes til å utvide inngangs- og utgangsutstyr som ADC, EEROM og RTC, og andre grunnleggende komponenter å lage et system der kompleksiteten er veldig mindre.

Eksempel: Siden 8051 mikrokontroller ikke har noen innebygd ADC - så hvis vi vil koble noen analoge sensorer til 8051 mikrokontrolleren - må vi bruke ADC-enheter som ADC0804-1 kanal ADC, ADC0808- 8 kanals ADC, etc. Ved å bruke disse ADCene, vi kan koble de analoge sensorene til mikrokontrolleren.

Uten å bruke protokollen for å utvide I / O-funksjonene til en hvilken som helst mikrokontroller eller prosessor, kan vi gå til 8255 ICit 8-pinners enhet. De 8051 mikrokontroller er en 40-pinners mikrokontroller ved å bruke 8255 IC, kan vi utvide 3-I / O-portene med 8-pinner i hver port. Ved å bruke alle enhetene som RTC, ADC, EEPROM, Timers osv. - for å utvide periferikretsene - økes også kompleksitet, kostnad, strømforbruk og produktstørrelse.

For å overvinne dette problemet kommer protokollkonseptet inn i bildet for å redusere maskinvarekompleksiteten og strømforbruket. Vi kan utvide flere funksjoner, for eksempel I / 0-periferiutstyr, ADC, T / C og minneenheter opptil 128 enheter ved å bruke denne I2C-protokollen.
Terminologi brukt i I2C-protokoller

Sender: Enheten som sender data til bussen kalles sender.

Mottaker: Enheten som mottar data fra bussen kalles en mottaker.

Herre: Enheten som initierer overføringer for å generere klokkesignaler og avslutte en overføring kalles en master.

Slave: Enheten adressert av en mester kalles en slave.

Multimaster: Mer enn en mester kan prøve å kontrollere bussen samtidig uten å ødelegge meldingen kalles en Multimaster.

Megling: Fremgangsmåte for å sikre at, hvis mer enn en mester samtidig prøver å kontrollere bussen, er det bare en som har lov til å gjøre det, så vinnermeldingen er ikke ødelagt.

Synkronisering: Fremgangsmåte for å synkronisere klokkesinglene til to eller flere enheter kalles synkronisering.

I2C grunnleggende kommandosekvens

  1. Start bitbetingelse
  2. Stopp bittilstand
  3. Bekreftelsesbetingelse
  4. Master to slave Write-operasjon
  5. Les Operation Slave to Master

Start og stopp bitbetingelse

Når masteren (mikrokontroller) ønsker å snakke med en slaveenhet (for eksempel ADC), begynner den kommunikasjonen ved å utstede en starttilstand på I2C-bussen, og deretter utstede en stopptilstand. I2C start- og stopplogikknivåene er vist i figuren.

I2C-startbetingelsen definerer som en høy til lav overgang av SDA-linjen mens SCL-linjen er høy. EN I2C-stopptilstand oppstår når SDA-linjen bytter fra lav til høy mens SCL-linjen er høy.

I2C-masteren genererer alltid S- og P-forholdene. Når I2C-masteren initierer en START-tilstand, anses I2c-bussen å være i opptatt tilstand.

Start og stopp bitbetingelse

Start og stopp bitbetingelse

Programmering:

START kondisjon:

sbit SDA = P1 ^ 7 // initialiser SDA- og SCL-pinnene til mikrokontrolleren //
sbit SCL = P1 ^ 6
ugyldig forsinkelse (usignert int)
ugyldig hoved ()
{
SDA = 1 // behandler dataene //
SCL = 1 // klokken er høy //
forsinkelse()
SDA = 0 // sendte dataene //
forsinkelse()
SCL = 0 // klokkesignalet er lavt //
}
Tidsforsinkelse (int p)
{
unsignedinta, f
For (a = 0a<255a++) //delay function//
For (b = 0b}

STOP-tilstand:

ugyldig hoved ()
{
SDA = 0 // Stopp behandlingen av dataene //
SCL = 1 // klokken er høy //
forsinkelse()
SDA = 1 // Stoppet //
forsinkelse()
SCL = 0 // klokkesignalet er lavt //
}
Tidsforsinkelse (int p)
{
unsignedinta, f
For (a = 0a<255a++) //delay function//
For (b = 0b}

Bekreftelse (ACK) og Ingen bekreftelse (NCK)

Hver byte som overføres over I2C-bussen blir fulgt av en bekreftelsestilstand fra mottakeren, som betyr at etter at master trekker SCL lavt for å fullføre overføringen av 8-bit, vil SDA bli trukket lavt av mottakeren til masteren. Hvis SDA-linjen LOW etter overføring av mottakeren ikke trekkes, anses å være en NCK-tilstand.

Bekreftelse (ACK)

Bekreftelse (ACK)

Programmering

Bekreftelse
ugyldig hoved ()
{
SDA = 0 // SDA-linjen går til lav //
SCL = 1 // klokken er høy til lav //
forsinkelse (100)
SCL = 0
}
Ingen bekreftelse:
ugyldig hoved ()
{
SDA = 1 // SDA-linjen går til høy //
SCL = 1 // klokken er høy til lav //
forsinkelse (100)
SCL = 0
}

Master to Slave Wrates Operation

I2C-protokollen overfører dataene i form av pakker eller byte. Hver byte blir etterfulgt av en bekreftelsesbit.

Dataoverføringsformat

Dataoverføringsformat

Dataoverføringsformat

Start: Primært dataoverføringssekvensen initiert av mesteren som genererer starttilstanden.

7-biters adresse: Etter det sender mesteren slaveadressen i to 8-biters formater i stedet for en enkelt 16-biters adresse.

R / W: Hvis lese- og skrivebiten er høy, utføres skriveoperasjonen.

ALAS: Hvis skriveoperasjonen utføres i slaveenheten, sender mottakeren 1-biters ACK til mikrokontrolleren.

Stoppe: Etter fullføring av skriveoperasjonen i slaveenheten, sender mikrokontrolleren stopptilstanden til slaveenheten.

Programmering

Skriv operasjon

voidwrite (usignert tegn d)
{
Usignert røye 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 to Slave Read Operation

Dataene leses tilbake fra slaveenheten i form av bit eller byte - les den viktigste biten først og les den minst signifikante biten sist.

Dataavlesningsformatet

Data Read Format

Data Read Format

Start: Dataoverføringssekvensen initieres primært av at masteren genererer starttilstanden.

7-biters adresse: Etter det sender mesteren slaveadressen i to 8-biters formater i stedet for en enkelt 16-biters adresse.

R / W: Hvis lese- og skrivebiten er lav, utføres leseoperasjonen.

ALAS: Hvis skriveoperasjonen utføres i slaveenheten, sender mottakeren 1-biters ACK til mikrokontrolleren.

Stoppe: Etter fullføring av skriveoperasjonen i slaveenheten, sender mikrokontrolleren stopptilstanden til slaveenheten.

Programmering

Annullert lese ()
{
Usignert røye j, z = 0x00, q = 0x80
SDA = 1
for (j = 0j<8j++)
{
SCL = 1
forsinkelse (100)
flagg = SDA
hvis (flagg == 1)
q)
q = q >> 1
forsinkelse (100)
SCL = 0

Praktisk eksempel på grensesnitt ADC til 8051 mikrokontroller

ADC er en enhet som brukes til å konvertere analoge data til form av digital og digital til analog. 8051-mikrokontrolleren har ikke innebygd ADC, så vi må legge til eksternt gjennom I2C-protokollen. PCF8591 er den I2C-baserte analog til digital og digital til analog omformer. Denne enheten kan støtte maksimalt 4-analoge inngangskanaler sammen med 2,5 til 6 v spenninger.

Analoge utganger

De analoge utgangene kommer i form av spenninger. For eksempel gir 5v analog sensor utgangslogikk på 0,01v til 5v.
Den maksimale digitale verdien på 5v er = 256.
Verdien på 2,5v er = 123 i henhold til den maksimale spenningsverdien.

Formelen for analog utgang er:

Formelen for digitale utganger:

Grensesnitt ADC til 8051 Microcontroller

Grensesnitt ADC til 8051 Microcontroller

Figuren ovenfor viser dataoverføringen ved hjelp av I2C-protokollen fra ADC-enheten til 8051-mikrokontrolleren. ADC-pinnene til SCL og SDA er koblet til pinnen 1.7 og 1.6 på mikrokontrolleren for å etablere kommunikasjon mellom dem. Når sensoren gir analoge verdier til ADC, konverterer den til digital og overfører data til mikrokontrolleren gjennom I2C-protokollen.

Dette handler om I2C-bussprotokollopplæringen med passende programmer. Vi håper at det gitte innholdet gir deg et praktisk konsept med å koble flere enheter til mikrokontrollere ved hjelp av I2C-kommunikasjonen. Hvis du er i tvil om grensesnittprosedyren til denne protokollen, kan du nå oss ved å kommentere nedenfor.