I2C-bus — tildeling, enhed, dataoverførsel, adressering

Når man opretter et elektronisk kredsløb, står mange udviklere over for behovet for at bruge et stort antal mellemchips til at matche, prøve og adressere dets individuelle blokke. For at minimere antallet af hjælpechips foreslog Philips en to-leder tovejs I2C seriel netværksinterface tilbage i 1980'erne, designet specifikt til at håndtere flere chips inden for en enkelt enhed.

I2C Bus - Tildeling, Enhed, Dataoverførsel, Adressering

I dag producerer Philips alene mere end hundrede I2C-kompatible enheder til elektronisk udstyr med en lang række forskellige formål: hukommelse, videoprocessorsystemer, analog-til-digital og digital-til-analog-konvertere, skærmdrivere osv.

I2C bus

I2C-bussen er en modifikation af den serielle dataudvekslingsprotokol, der er i stand til at transmittere serielle 8-bit data i den sædvanlige "hurtige" tilstand med hastigheder på 100 til 400 kbps. Processen med dataudveksling implementeres her på kun to ledninger (den fælles ledning ikke medregnet): SDA-linje til data og SCL-linje til synkronisering.

Bussen bliver tovejs på grund af det faktum, at kaskaderne af udgange fra enheder, der er forbundet til bussen, har åbne samlere eller kanaler, hvilket replikerer OG-ledningerne. Som et resultat minimerer bussen antallet af forbindelser mellem chips og efterlader færre nødvendige ben og spor på kortet. Som et resultat heraf viser selve brættet sig at være enklere, mere kompakt og teknologisk mere avanceret i produktionen.

Denne protokol giver dig mulighed for at deaktivere adressedekodere og anden ekstern forhandlingslogik. Antallet af chips, der kan fungere samtidigt på I2C-bussen, er begrænset af dens kapacitet - maksimalt 400 pF.

I2C protokol

I2C-kompatible IC'er har en hardware-støjdæmpningsalgoritme for at sikre dataintegritet selv i nærvær af stærk interferens. Sådanne enheder har en grænseflade, der gør det muligt for mikrokredsløbene at kommunikere med hinanden, selv når deres forsyningsspændinger er forskellige. I nedenstående figur kan du gøre dig bekendt med princippet om at forbinde flere mikrokredsløb gennem en fælles bus.

Hver af de enheder, der er tilsluttet bussen, har sin egen unikke adresse, den bestemmes af den, og i overensstemmelse med formålet med enheden kan den fungere som modtager eller som sender. Ved overførsel af data kan disse enheder være master (master) eller slave (slave). Masteren er den enhed, der initierer dataoverførslen og genererer kloksignaler på SCL-linjen. Slaven, i forhold til masteren, er destinationsenheden.

Enhedsforbindelsesdiagram

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

I princippet tillader bussen flere forskellige mastere, men pålægger begrænsninger på egenskaberne ved dannelse af styresignaler og overvågning af bussens status; det betyder, at flere mastere kan begynde at sende på samme tid, men konflikter af denne art elimineres takket være voldgift, det vil sige den måde, masteren opfører sig på, når den registrerer, at bussen er optaget af en anden master.

Synkronisering af et par enheder sikres ved, at alle enheder er forbundet til bussen og danner en "AND" ledning. I starten er SDA- og SCL-signalerne høje.

START og STOP

Udvekslingen starter med, at masteren genererer «START»-tilstanden: på SDA-linjen går signalet fra høj til lav tilstand, mens SCL-linjen har et stabilt højt niveau. Alle enheder, der er tilsluttet bussen, opfatter denne situation som en kommando til at starte udvekslingen.


Start og stop - synkroniseringssignal

Hver master genererer et individuelt kloksignal på SCL-linjen, når data overføres på bussen.

Udvekslingen slutter med dannelsen af ​​STOP-tilstanden af ​​masteren: på SDA-linjen skifter signalet fra lavt til højt, mens SCL-linjen har et stabilt højt niveau.

Føreren fungerer altid som kilden til START- og STOP-signalerne. Så snart «START»-signalet er fast, betyder det, at linjen er optaget. Linjen er fri, når der detekteres et STOP-signal.

Dataoverførsel

Umiddelbart efter at have erklæret START-tilstanden, skifter masteren SCL-linjen lavt og sender den mest signifikante bit af den første beskedbyte til SDA-linjen. Antallet af bytes i en meddelelse er ikke begrænset.Ændringer på SDA-linjen er kun aktiveret, når signalniveauet på SCL-linjen er lavt. Dataene er gyldige og bør ikke kun ændres, når synkroniseringsimpulsen er høj.

Kvittering for, at byten fra mastersenderen er modtaget af slavemodtageren, sker ved at indstille en speciel kvitteringsbit på SDA-linjen efter at den ottende databit er modtaget.

BEKRÆFTELSEN

Så at sende 8 bits data fra senderen til modtageren ender med en ekstra puls på SCL-linjen, når den modtagende enhed går lavt på SDA-linjen, hvilket indikerer, at den har modtaget hele byten.

Kvitteringssynkroniseringsimpuls

Bekræftelse er en integreret del af dataoverførselsprocessen. Masteren genererer en synkroniseringsimpuls. Senderen sender en lav tilstand til SDA, mens kvitteringsuret er aktivt. Mens synkroniseringsimpulsen er høj, skal modtageren holde SDA lav.

Hvis destinationsslaven ikke kvitterer for sin adresse, f.eks. fordi den i øjeblikket er optaget, skal datalinjen holdes højt. Masteren kan derefter give et STOP-signal for at afbryde afsendelsen.

Hvis modtagelsen udføres af mastermodtageren, så er den forpligtet til at informere slavesenderen efter afslutningen af ​​transmissionen - ikke ved at bekræfte den sidste byte. Slavesenderen frigiver datalinjen, så masteren kan afgive et STOP-signal eller et gentaget START-signal.

Synkroniseringen af ​​enhederne sikres ved, at forbindelserne til SCL-linjen er lavet efter "AND"-princippet.

Masteren har ikke eneret til at styre overgangen af ​​SCL-linjen fra lav til høj.Hvis slaven har brug for mere tid til at behandle en modtaget bit, kan den uafhængigt holde SCL lav, indtil den er klar til at modtage den næste bit data. SCL-linjen i en sådan situation vil være lav i varigheden af ​​den længste lav-niveau sync-impuls.

Enheder med den laveste vedvarende lav vil forblive inaktiv, indtil den lange periode slutter. Når alle enheder har afsluttet den lave synkroniseringsperiode, vil SCL blive høj.

Alle enheder vil begynde at klokke højt, og den første enhed, der afslutter sin periode, vil være den første, der indstiller SCL-linjen lavt. Som et resultat vil varigheden af ​​den lave tilstand af SCL blive bestemt af den længste lave tilstand af synkroniseringsimpulsen for en af ​​enhederne, og varigheden af ​​den høje tilstand vil blive bestemt af den korteste periode for synkronisering af en af enheder.

Synkroniseringssignaler kan bruges af modtagere som et middel til at styre datatransmission på bit- og byte-niveau.

Hvis enheden er i stand til at modtage bytes med en høj hastighed, men det tager en vis tid at gemme den modtagne byte eller forberede sig på at modtage den næste byte, kan den fortsætte med at holde SCL lav efter modtagelse og bekræftelse af en byte, hvilket tvinger senderen i standbytilstand.

En mikrocontroller uden indbyggede hardware-kredsløb, for eksempel på bit-niveau, kan sænke clock-hastigheden ved at øge varigheden af ​​deres lave tilstand. Som følge heraf vil baud-hastigheden af ​​masterenheden blive bestemt af hastigheden af langsommere enhed.


I2C bus

ADRESSERING

Hver enhed, der er tilsluttet I2C-bussen, har en unik programadresse, hvor masteren adresserer den ved at sende en specifik kommando. Mikrokredsløb af samme type er kendetegnet ved en adressevælger, implementeret enten i form af digitale indgange på vælgeren eller i analog form. Adresser er opdelt i adresseområdet for de enheder, der er tilsluttet bussen.

Normal tilstand forudsætter syv-bit adressering. Adressering fungerer som følger: efter kommandoen «START» sender masteren den første byte, som bestemmer, hvilken slaveenhed der er nødvendig for at kommunikere med masteren. Der er også en fælles opkaldsadresse, der definerer alle enheder på bussen, alle enheder (teoretisk) svarer på den med en kvittering, men i praksis er det sjældent.

Så de første syv bits af den første byte er slaveadressen. Den mindst signifikante bit, den ottende, angiver retningen for afsendelse af data. Hvis der er en «0», vil informationen blive skrevet fra masteren til denne slave. Hvis «1», vil informationen blive læst af masteren fra denne slave.

Når masteren er færdig med at sende adressebyten, sammenligner hver slave sin adresse med den. Enhver med samme adresse er en slave og defineres som en slavesender eller slavemodtager, afhængigt af værdien af ​​den mindst signifikante bit af adressebyten.

En slaveadresse kan omfatte faste og programmerbare dele. Ganske ofte fungerer et stort antal enheder af samme type i et system, så tillader den programmerbare del af adressen brugen af ​​maksimalt samme type enheder på bussen. Hvor mange bits i adressebyten der er programmerbare afhænger af antallet af ledige ben på chippen.

Nogle gange er en pin med en analog indstilling af det programmerbare adresseområde tilstrækkelig, for eksempel SAA1064 - en LED-indikatordriver, der har præcis sådan en implementering. Potentialet for en bestemt pin bestemmer forskydningen af ​​chippens adresserum, således at chips af samme type ikke kommer i konflikt med driften på den samme bus. Alle chips, der understøtter I2C-bussen, indeholder et sæt adresser, som producenten angiver i dokumentationen.

Kombinationen «11110XX» er reserveret til 10-bit adressering. Hvis vi forestiller os udvekslingen af ​​data fra «START»-kommandoen til «STOP»-kommandoen, vil det se sådan ud:


Adressering

Simple og kombinerede dataudvekslingsformater er tilladt her. Det kombinerede format betyder, at mellem «START» og «STOP» kan master og slave fungere som modtagere og sendere, dette er f.eks. nyttigt ved seriel hukommelseshåndtering.

Lad den første byte af data overføre en hukommelsesadresse. Gentager kommandoen «START» og læser slaveadressen, vil hukommelsesdataene fungere. Beslutninger om automatisk at øge eller formindske den tidligere tilgåede adresse træffes af enhedsudvikleren efter tidligere at have studeret chipdokumentationen. På den ene eller anden måde skal alle enheder efter at have modtaget START-kommandoen genoprette deres logik og forberede sig på, at adressen nu vil blive navngivet.

Vi råder dig til at læse:

Hvorfor er elektrisk strøm farlig?