I2C-buss — tilldelning, enhet, dataöverföring, adressering

När man skapar en elektronisk krets ställs många utvecklare inför behovet av att använda ett stort antal mellanchips för att matcha, ta prov och adressera sina individuella block. För att minimera antalet extra chips föreslog Philips ett tvåtråds dubbelriktat I2C seriellt nätverksgränssnitt redan på 1980-talet, designat specifikt för att hantera flera chips inom en enda enhet.

I2C Bus - Tilldelning, Enhet, Dataöverföring, Adressering

Idag producerar Philips mer än hundra I2C-kompatibla enheter för elektronisk utrustning med en mängd olika ändamål: minne, videoprocessorsystem, analog-till-digital och digital-till-analog-omvandlare, bildskärmsdrivrutiner, etc.

I2C buss

I2C-bussen är en modifiering av det seriella datautbytesprotokollet som kan sända seriella 8-bitars data i det vanliga "snabba" läget med hastigheter på 100 till 400 kbps. Processen för datautbyte implementeras här på endast två ledningar (den gemensamma tråden räknas inte med): SDA-linje för data och SCL-linje för synkronisering.

Bussen blir dubbelriktad på grund av det faktum att kaskaderna av utgångar från enheter som är anslutna till bussen har öppna kollektorer eller kanaler, vilket replikerar OCH-ledningarna. Som ett resultat minimerar bussen antalet anslutningar mellan chips, vilket lämnar färre erforderliga stift och spår på kortet. Som ett resultat av detta visar sig själva brädan vara enklare, mer kompakt och tekniskt mer avancerad i produktionen.

Detta protokoll låter dig inaktivera adressavkodare och annan extern förhandlingslogik. Antalet chips som kan fungera samtidigt på I2C-bussen begränsas av dess kapacitet - maximalt 400 pF.

I2C-protokoll

I2C-kompatibla IC:er har en brusreduceringsalgoritm för hårdvara för att säkerställa dataintegritet även i närvaro av starka störningar. Sådana enheter har ett gränssnitt som gör att mikrokretsarna kan kommunicera med varandra även när deras matningsspänningar är olika. I figuren nedan kan du bekanta dig med principen att ansluta flera mikrokretsar genom en gemensam buss.

Var och en av enheterna som är anslutna till bussen har sin egen unika adress, den bestäms av den och, i enlighet med enhetens syfte, kan den fungera som en mottagare eller som en sändare. Vid överföring av data kan dessa enheter vara master (master) eller slav (slav). Mastern är enheten som initierar dataöverföringen och genererar klocksignaler på SCL-linjen. Slaven, i förhållande till mastern, är destinationsanordningen.

Anslutningsschema för enheten

Vid varje givet ögonblick av drift på I2C-bussen kan endast en enhet fungera som master; den genererar en signal på SCL-linjen.En master kan antingen vara en mastermottagare eller en mastersändare.

I princip tillåter bussen flera olika masters, men lägger begränsningar på egenskaperna för att bilda styrsignaler och övervaka bussens status; detta innebär att flera masters kan börja sända samtidigt, men konflikter av detta slag elimineras tack vare skiljedom, det vill säga hur mastern beter sig när den upptäcker att bussen är upptagen av en annan master.

Synkronisering av ett par enheter säkerställs av det faktum att alla enheter är anslutna till bussen och bildar en "OCH"-ledning. Inledningsvis är SDA- och SCL-signalerna höga.

STARTA och STOPP

Utbytet börjar med att mastern genererar «START»-tillståndet: på SDA-linjen går signalen från högt till lågt tillstånd, medan SCL-linjen har en stabil hög nivå. Alla enheter som är anslutna till bussen uppfattar denna situation som ett kommando för att starta växeln.


Start och stopp - synkroniseringssignal

Varje master genererar en individuell klocksignal på SCL-linjen vid sändning av data på bussen.

Utbytet slutar med bildandet av STOP-tillståndet av mastern: på SDA-linjen ändras signalen från låg till hög, medan SCL-linjen har en stabil hög nivå.

Föraren fungerar alltid som källa för START- och STOP-signalerna. Så snart «START»-signalen är fixerad betyder det att linjen är upptagen. Linjen är ledig när en STOP-signal detekteras.

Dataöverföring

Omedelbart efter att ha deklarerat START-tillståndet växlar mastern SCL-linjen låg och skickar den mest signifikanta biten av den första meddelandebyten till SDA-linjen. Antalet byte i ett meddelande är inte begränsat.Ändringar på SDA-linjen är endast aktiverade när signalnivån på SCL-linjen är låg. Data är giltiga och bör inte ändras endast när synkpulsen är hög.

Bekräftelse av att byten från mastersändaren har tagits emot av slavmottagaren görs genom att sätta en speciell bekräftelsebit på SDA-linjen efter att den åttonde databiten har tagits emot.

BEKRÄFTELSEN

Så att skicka 8 bitar av data från sändaren till mottagaren slutar med en extra puls på SCL-linjen när den mottagande enheten går lågt på SDA-linjen, vilket indikerar att den har tagit emot hela byten.

Kvittenssynkroniseringspuls

Bekräftelse är en integrerad del av dataöverföringsprocessen. Mastern genererar en synkpuls. Sändaren skickar ett lågt tillstånd till SDA medan bekräftelseklockan är aktiv. Medan synkpulsen är hög måste mottagaren hålla SDA låg.

Om destinationsslaven inte bekräftar sin adress, till exempel för att den för närvarande är upptagen, måste datalinjen hållas högt. Mastern kan då ge en STOP-signal för att avbryta sändningen.

Om mottagningen utförs av mastermottagaren, är den skyldig att informera slavsändaren efter avslutad överföring - inte genom att bekräfta den sista byten. Slavsändaren släpper dataledningen så att mastern kan ge en STOP-signal eller en upprepad START-signal.

Synkroniseringen av enheterna säkerställs av det faktum att anslutningarna till SCL-linjen görs enligt "OCH"-principen.

Mastern har inte ensamrätt att styra övergången av SCL-linjen från låg till hög.Om slaven behöver mer tid för att bearbeta en mottagen bit, kan den oberoende hålla SCL låg tills den är redo att ta emot nästa databit. SCL-linjen i en sådan situation kommer att vara låg under varaktigheten av den längsta lågnivåsynkpulsen.

Enheter med det lägsta ihållande låga förblir inaktiva tills den långa perioden tar slut. När alla enheter har avslutat den låga synkroniseringsperioden kommer SCL att bli hög.

Alla enheter kommer att börja klocka högt och den första enheten som slutför sin period kommer att vara den första som ställer in SCL-linjen lågt. Som ett resultat kommer varaktigheten av det låga tillståndet för SCL att bestämmas av det längsta låga tillståndet för synkroniseringspulsen för en av enheterna, och varaktigheten av det höga tillståndet kommer att bestämmas av den kortaste synkroniseringsperioden för en av de enheter.

Synkroniseringssignaler kan användas av mottagare som ett sätt att styra dataöverföring på bit- och bytenivå.

Om enheten kan ta emot byte med hög hastighet, men det tar en viss tid att lagra den mottagna byten eller förbereda sig för att ta emot nästa byte, kan den fortsätta att hålla SCL låg efter att ha tagit emot och bekräftat en byte, vilket tvingar sändaren till standbyläge.

En mikrokontroller utan inbyggda hårdvarukretsar, till exempel på bitnivå, kan sakta ner klockhastigheten genom att öka varaktigheten av deras låga tillstånd. Som ett resultat kommer baudhastigheten för masterenheten att bestämmas av hastigheten på långsammare enhet.


I2C buss

ADRESSERING

Varje enhet som är ansluten till I2C-bussen har en unik programadress där mastern adresserar den genom att skicka ett specifikt kommando. Mikrokretsar av samma typ kännetecknas av en adressväljare, implementerad antingen i form av digitala ingångar på väljaren eller i analog form. Adresser är uppdelade i adressutrymmet för enheterna som är anslutna till bussen.

Normalläge förutsätter sju-bitars adressering. Adresseringen fungerar enligt följande: efter kommandot «START» skickar mastern den första byten, som bestämmer vilken slavenhet som behövs för att kommunicera med mastern. Det finns också en gemensam anropsadress som definierar alla enheter på bussen, alla enheter (teoretiskt) svarar på den med en kvittens, men i praktiken är detta sällsynt.

Så de första sju bitarna i den första byten är slavadressen. Den minst signifikanta biten, den åttonde, indikerar riktningen för att skicka data. Om det finns en «0» kommer informationen att skrivas från mastern till denna slav. Om «1» kommer informationen att läsas av befälhavaren från denna slav.

Efter att mastern slutat skicka adressbyten jämför varje slav sin adress med den. Alla med samma adress är en slav och definieras som en slavsändare eller slavmottagare, beroende på värdet på den minst signifikanta biten i adressbyten.

En slavadress kan innehålla fasta och programmerbara delar. Ganska ofta fungerar ett stort antal enheter av samma typ i ett system, då tillåter den programmerbara delen av adressen användning av maximalt samma typ av enheter på bussen. Hur många bitar i adressbyten som är programmerbara beror på antalet lediga stift på chippet.

Ibland räcker ett stift med en analog inställning av det programmerbara adressområdet, till exempel SAA1064 - en LED-indikatordrivrutin som har exakt en sådan implementering. Potentialen för ett speciellt stift bestämmer förskjutningen av chipets adressutrymme så att chip av samma typ inte kommer i konflikt som arbetar på samma buss. Alla chips som stöder I2C-bussen innehåller en uppsättning adresser som tillverkaren anger i dokumentationen.

Kombinationen «11110XX» är reserverad för 10-bitars adressering. Om vi ​​föreställer oss utbyte av data från kommandot «START» till kommandot «STOPP» kommer det att se ut så här:


Adressering

Enkla och kombinerade datautbytesformat är tillåtna här. Det kombinerade formatet gör att mellan «START» och «STOPP» kan master och slav fungera som mottagare och sändare, detta är användbart till exempel vid seriell minneshantering.

Låt den första databyten överföra en minnesadress. Om du sedan upprepar «START»-kommandot och läser slavadressen, kommer minnesdata att fungera. Beslut om att automatiskt öka eller minska den tidigare åtkomstadressen fattas av enhetsutvecklaren efter att tidigare ha studerat chipdokumentationen. På ett eller annat sätt, efter att ha mottagit START-kommandot, måste alla enheter återställa sin logik och förbereda sig på att adressen nu kommer att namnges.

Vi råder dig att läsa:

Varför är elektrisk ström farlig?