I2C-buss — tilordning, enhet, dataoverføring, adressering

Når du oppretter en elektronisk krets, står mange utviklere overfor behovet for å bruke et stort antall mellombrikker for å matche, prøve og adressere individuelle blokker. For å minimere antallet hjelpebrikker, foreslo Philips et to-leder toveis I2C seriell nettverksgrensesnitt tilbake på 1980-tallet, designet spesielt for å administrere flere brikker innenfor en enkelt enhet.

I2C Bus - Tilordning, enhet, dataoverføring, adressering

I dag produserer Philips alene mer enn hundre I2C-kompatible enheter for elektronisk utstyr med en lang rekke formål: minne, videoprosessorsystemer, analog-til-digital og digital-til-analog-omformere, skjermdrivere, etc.

I2C buss

I2C-bussen er en modifikasjon av den serielle datautvekslingsprotokollen som er i stand til å overføre serielle 8-biters data i vanlig "rask" modus med hastigheter på 100 til 400 kbps. Prosessen med datautveksling implementeres her på kun to ledninger (uten å telle den felles ledningen): SDA-linje for data og SCL-linje for synkronisering.

Bussen blir toveis på grunn av det faktum at kaskadene av utganger til enheter koblet til bussen har åpne samlere eller kanaler, og replikerer dermed OG-kablingen. Som et resultat minimerer bussen antall forbindelser mellom brikker, og etterlater færre nødvendige pinner og spor på brettet. Som et resultat viser selve brettet seg å være enklere, mer kompakt og teknologisk mer avansert i produksjon.

Denne protokollen lar deg deaktivere adressedekodere og annen ekstern forhandlingslogikk. Antallet brikker som kan operere samtidig på I2C-bussen er begrenset av kapasiteten - maksimalt 400 pF.

I2C-protokoll

I2C-kompatible IC-er har en maskinvarestøydempingsalgoritme for å sikre dataintegritet selv i nærvær av sterk interferens. Slike enheter har et grensesnitt som gjør at mikrokretsene kan kommunisere med hverandre selv når forsyningsspenningene deres er forskjellige. I figuren nedenfor kan du gjøre deg kjent med prinsippet om å koble flere mikrokretser gjennom en felles buss.

Hver av enhetene som er koblet til bussen har sin egen unike adresse, den bestemmes av den, og i samsvar med formålet med enheten kan den fungere som en mottaker eller som en sender. Ved overføring av data kan disse enhetene være master (master) eller slave (slave). Masteren er enheten som initierer dataoverføringen og genererer klokkesignaler på SCL-linjen. Slaven, i forhold til masteren, er destinasjonsenheten.

Enhetskoblingsskjema

På et hvilket som helst tidspunkt av drift på I2C-bussen kan bare én enhet fungere som en master; den genererer et signal på SCL-linjen.En master kan enten være en mastermottaker eller en mastersender.

I prinsippet tillater bussen flere forskjellige mastere, men pålegger begrensninger på egenskapene til å danne styresignaler og overvåke statusen til bussen; dette betyr at flere mastere kan begynne å sende samtidig, men konflikter av denne typen elimineres takket være voldgift, det vil si måten masteren oppfører seg når den oppdager at bussen er okkupert av en annen master.

Synkronisering av et par enheter er sikret ved at alle enheter er koblet til bussen, og danner en "AND" ledning. Til å begynne med er SDA- og SCL-signalene høye.

START og STOPP

Utvekslingen starter med at masteren genererer «START»-tilstanden: på SDA-linjen går signalet fra høy til lav tilstand, mens SCL-linjen har et stabilt høyt nivå. Alle enheter koblet til bussen oppfatter denne situasjonen som en kommando for å starte sentralen.


Start og stopp - synkroniseringssignal

Hver master genererer et individuelt klokkesignal på SCL-linjen ved overføring av data på bussen.

Utvekslingen avsluttes med dannelsen av STOP-tilstanden av masteren: på SDA-linjen endres signalet fra lavt til høyt, mens SCL-linjen har et stabilt høyt nivå.

Føreren fungerer alltid som kilden til START- og STOPP-signalene. Så snart «START»-signalet er fast, betyr det at linjen er opptatt. Linjen er ledig når et STOPP-signal oppdages.

Data overføring

Umiddelbart etter å ha erklært START-tilstanden, bytter masteren SCL-linjen lavt og sender den mest signifikante biten av den første meldingsbyten til SDA-linjen. Antall byte i en melding er ikke begrenset.Endringer på SDA-linjen er kun aktivert når signalnivået på SCL-linjen er lavt. Dataene er gyldige og bør ikke endres bare når synkroniseringspulsen er høy.

Bekreftelse av at byten fra mastersenderen er mottatt av slavemottakeren gjøres ved å sette en spesiell bekreftelsesbit på SDA-linjen etter at den åttende databiten er mottatt.

BEKREFTELSEN

Så, å sende 8 biter med data fra senderen til mottakeren ender opp med en ekstra puls på SCL-linjen når mottaksenheten går lavt på SDA-linjen, noe som indikerer at den har mottatt hele byten.

Bekreftelsessynkroniseringspuls

Bekreftelse er en integrert del av dataoverføringsprosessen. Masteren genererer en synkroniseringspuls. Senderen sender en lav tilstand til SDA mens bekreftelsesklokken er aktiv. Mens synkroniseringspulsen er høy, må mottakeren holde SDA lav.

Hvis destinasjonsslaven ikke bekrefter adressen sin, for eksempel fordi den er opptatt, må datalinjen holdes høyt. Masteren kan da gi et STOPP-signal for å avbryte utsendelsen.

Hvis mottaket utføres av mastermottakeren, er den forpliktet til å informere slavesenderen etter at overføringen er fullført - ikke ved å bekrefte siste byte. Slavesenderen slipper datalinjen slik at masteren kan gi et STOPP-signal eller et repeterende START-signal.

Synkroniseringen av enhetene er sikret ved at tilkoblingene til SCL-linjen er laget i henhold til "AND"-prinsippet.

Masteren har ikke enerett til å kontrollere overgangen til SCL-linjen fra lav til høy.Hvis slaven trenger mer tid til å behandle en mottatt bit, kan den uavhengig holde SCL lav til den er klar til å motta neste bit med data. SCL-linjen i en slik situasjon vil være lav under varigheten av den lengste lavnivåsynkroniseringspulsen.

Enheter med laveste vedvarende lav vil forbli inaktive til den lange perioden er over. Når alle enheter har fullført lavsynkroniseringsperioden, vil SCL gå høy.

Alle enheter vil begynne å klokke høyt og den første enheten som fullfører perioden vil være den første som setter SCL-linjen lav. Som et resultat vil varigheten av den lave tilstanden til SCL bli bestemt av den lengste lave tilstanden til synkroniseringspulsen til en av enhetene, og varigheten av den høye tilstanden vil bli bestemt av den korteste perioden med synkronisering av en av enhetene. enheter.

Synkroniseringssignaler kan brukes av mottakere som et middel til å kontrollere dataoverføring på bit- og bytenivå.

Hvis enheten er i stand til å motta byte med høy hastighet, men det tar en viss tid å lagre den mottatte byten eller forberede seg på å motta neste byte, kan den fortsette å holde SCL lav etter å ha mottatt og bekreftet en byte , noe som tvinger senderen i standby-tilstand.

En mikrokontroller uten innebygde maskinvarekretser, for eksempel på bitnivå, kan redusere klokkehastigheten ved å øke varigheten av deres lave tilstand. Som et resultat vil baudhastigheten til masterenheten bli bestemt av hastigheten til tregere enhet.


I2C buss

ADRESSER

Hver enhet koblet til I2C-bussen har en unik programadresse som masteren adresserer den ved å sende en spesifikk kommando. Mikrokretser av samme type er preget av en adressevelger, implementert enten i form av digitale innganger til velgeren, eller i analog form. Adresser er delt inn i adresseområdet til enhetene som er koblet til bussen.

Normal modus forutsetter syv-bits adressering. Adressering fungerer som følger: etter «START»-kommandoen sender masteren den første byten, som bestemmer hvilken slaveenhet som trengs for å kommunisere med masteren. Det er også en felles anropsadresse som definerer alle enheter på bussen, alle enheter (teoretisk sett) svarer på den med en kvittering, men i praksis er dette sjelden.

Så de første syv bitene av den første byten er slaveadressen. Den minst signifikante biten, den åttende, indikerer retningen for å sende data. Hvis det er en «0», vil informasjonen bli skrevet fra masteren til denne slaven. Hvis «1», vil informasjonen leses av masteren fra denne slaven.

Etter at masteren er ferdig med å sende adressebyten, sammenligner hver slave sin adresse med den. Alle med samme adresse er en slave og er definert som en slavesender eller slavemottaker, avhengig av verdien av den minst signifikante biten av adressebyten.

En slaveadresse kan inkludere faste og programmerbare deler. Ganske ofte fungerer et stort antall enheter av samme type i ett system, da tillater den programmerbare delen av adressen bruk av maksimalt samme type enheter på bussen. Hvor mange biter i adressebyten som er programmerbare avhenger av antall ledige pinner på brikken.

Noen ganger er en pinne med en analog innstilling av det programmerbare adresseområdet tilstrekkelig, for eksempel SAA1064 - en LED-indikatordriver som har akkurat en slik implementering. Potensialet til en bestemt pinne bestemmer forskyvningen av adresserommet til brikken slik at brikker av samme type ikke kommer i konflikt som opererer på samme buss. Alle brikker som støtter I2C-bussen inneholder et sett med adresser som produsenten spesifiserer i dokumentasjonen.

Kombinasjonen «11110XX» er reservert for 10-bits adressering. Hvis vi forestiller oss utveksling av data fra «START»-kommandoen til «STOPP»-kommandoen, vil det se slik ut:


Adressering

Enkle og kombinerte datautvekslingsformater er tillatt her. Det kombinerte formatet gjør at mellom «START» og «STOPP» kan master og slave fungere som mottakere og sendere, dette er nyttig for eksempel ved seriell minnehåndtering.

La den første byten med data overføre en minneadresse. Deretter, ved å gjenta «START»-kommandoen og lese slaveadressen, vil minnedataene fungere. Beslutninger om å automatisk øke eller redusere den tidligere tilgangsadressen tas av enhetsutvikleren etter å ha studert brikkedokumentasjonen tidligere. På en eller annen måte, etter å ha mottatt START-kommandoen, må alle enheter gjenopprette sin logikk og forberede seg på at adressen nå vil bli navngitt.

Vi anbefaler deg å lese:

Hvorfor er elektrisk strøm farlig?