I2C-bus — toewijzing, apparaat, gegevensoverdracht, adressering

Bij het maken van een elektronisch circuit worden veel ontwikkelaars geconfronteerd met de noodzaak om een ​​groot aantal tussenliggende chips te gebruiken voor het matchen, bemonsteren en adresseren van de afzonderlijke blokken. Om het aantal hulpchips te minimaliseren, stelde Philips in de jaren 80 een tweedraads bidirectionele I2C seriële netwerkinterface voor, speciaal ontworpen om meerdere chips binnen één apparaat te beheren.

I2C-bus - toewijzing, apparaat, gegevensoverdracht, adressering

Tegenwoordig produceert Philips alleen al meer dan honderd I2C-compatibele apparaten voor elektronische apparatuur met een breed scala aan doeleinden: geheugen, videoprocessorsystemen, analoog-naar-digitaal en digitaal-naar-analoog converters, beeldschermstuurprogramma's, enz.

I2C-bus

De I2C-bus is een wijziging van het seriële gegevensuitwisselingsprotocol dat in staat is seriële 8-bits gegevens in de gebruikelijke "snelle" modus te verzenden met snelheden van 100 tot 400 kbps. Het proces van gegevensuitwisseling wordt hier geïmplementeerd op slechts twee draden (de gemeenschappelijke draad niet meegerekend): SDA-lijn voor gegevens en SCL-lijn voor synchronisatie.

De bus wordt bidirectioneel vanwege het feit dat de cascades van uitgangen van apparaten die op de bus zijn aangesloten open collectoren of kanalen hebben, waardoor de EN-bedrading wordt gerepliceerd. Als gevolg hiervan minimaliseert de bus het aantal verbindingen tussen chips, waardoor er minder benodigde pinnen en sporen op het bord achterblijven. Als gevolg hiervan blijkt het bord zelf eenvoudiger, compacter en technologisch geavanceerder in productie te zijn.

Met dit protocol kunt u adresdecoders en andere externe onderhandelingslogica uitschakelen. Het aantal chips dat tegelijkertijd op de I2C-bus kan werken, wordt beperkt door zijn capaciteit - maximaal 400 pF.

I2C-protocol

I2C-compatibele IC's hebben een hardware-ruisonderdrukkingsalgoritme om de gegevensintegriteit te waarborgen, zelfs bij sterke interferentie. Dergelijke apparaten hebben een interface waarmee de microschakelingen met elkaar kunnen communiceren, zelfs als hun voedingsspanningen verschillen. In de onderstaande afbeelding kunt u vertrouwd raken met het principe van het verbinden van meerdere microschakelingen via een gemeenschappelijke bus.

Elk van de op de bus aangesloten apparaten heeft zijn eigen unieke adres, wordt daardoor bepaald en kan, in overeenstemming met het doel van het apparaat, als ontvanger of als zender werken. Bij het verzenden van gegevens kunnen deze apparaten master (master) of slave (slave) zijn. De master is het apparaat dat de gegevensoverdracht initieert en kloksignalen genereert op de SCL-lijn. De slave, in relatie tot de master, is het bestemmingsapparaat.

Apparaat aansluitschema

Op elk moment van werking op de I2C-bus kan slechts één apparaat als master fungeren; het genereert een signaal op de SCL-lijn.Een master kan een master-ontvanger of een master-zender zijn.

De bus staat in principe meerdere verschillende masters toe, maar legt beperkingen op aan de kenmerken van het vormen van stuursignalen en het bewaken van de status van de bus; dit betekent dat meerdere masters tegelijkertijd kunnen gaan zenden, maar dit soort conflicten worden geëlimineerd dankzij arbitrage, dat wil zeggen de manier waarop de master zich gedraagt ​​wanneer hij detecteert dat de bus bezet is door een andere master.

Synchronisatie van een paar apparaten wordt verzekerd door het feit dat alle apparaten op de bus zijn aangesloten en een "EN" -bedrading vormen. Aanvankelijk zijn de SDA- en SCL-signalen hoog.

STARTEN en STOPPEN

De uitwisseling begint wanneer de master de «START»-status genereert: op de SDA-lijn gaat het signaal van hoog naar laag, terwijl de SCL-lijn een stabiel hoog niveau heeft. Alle apparaten die op de bus zijn aangesloten, zien deze situatie als een commando om de uitwisseling te starten.


Start en stop - synchronisatiesignaal

Elke master genereert een individueel kloksignaal op de SCL-lijn bij het verzenden van gegevens op de bus.

De uitwisseling eindigt met het vormen van de STOP-status door de master: op de SDA-lijn verandert het signaal van laag naar hoog, terwijl de SCL-lijn een stabiel hoog niveau heeft.

De bestuurder fungeert altijd als bron van de START- en STOP-signalen. Zodra het «START»-signaal vaststaat, betekent dit dat de lijn bezet is. De lijn is vrij wanneer een STOP-signaal wordt gedetecteerd.

Data overdracht

Onmiddellijk na het declareren van de START-status schakelt de master de SCL-lijn laag en stuurt het meest significante bit van de eerste berichtbyte naar de SDA-lijn. Het aantal bytes in een bericht is niet beperkt.Wijzigingen op de SDA-lijn zijn alleen mogelijk als het signaalniveau op de SCL-lijn laag is. De gegevens zijn geldig en mogen niet alleen worden gewijzigd als de synchronisatiepuls hoog is.

Bevestiging dat de byte van de masterzender is ontvangen door de slave-ontvanger wordt gedaan door een speciale bevestigingsbit in te stellen op de SDA-lijn nadat de achtste databit is ontvangen.

DE BEVESTIGING

Dus het verzenden van 8 bits gegevens van de zender naar de ontvanger eindigt met een extra puls op de SCL-lijn wanneer het ontvangende apparaat laag wordt op de SDA-lijn, wat aangeeft dat het de hele byte heeft ontvangen.

Bevestiging synchronisatiepuls

Bevestiging is een integraal onderdeel van het gegevensoverdrachtproces. De master genereert een synchronisatiepuls. De zender stuurt een lage status naar SDA terwijl de bevestigingsklok actief is. Terwijl de synchronisatiepuls hoog is, moet de ontvanger de SDA laag houden.

Als de bestemmingsslave zijn adres niet bevestigt, bijvoorbeeld omdat hij momenteel bezet is, moet de datalijn hoog worden gehouden. De master kan dan een STOP-signaal geven om de verzending af te breken.

Als de ontvangst door de master-ontvanger wordt uitgevoerd, is deze verplicht om de slave-zender na voltooiing van de verzending te informeren - niet door de laatste byte te bevestigen. De slave-zender geeft de datalijn vrij, zodat de master een STOP-signaal of een herhalend START-signaal kan geven.

De synchronisatie van de apparaten wordt verzekerd door het feit dat de verbindingen met de SCL-lijn worden gemaakt volgens het "EN"-principe.

De master heeft niet het alleenrecht om de overgang van de SCL-lijn van laag naar hoog te regelen.Als de slave meer tijd nodig heeft om een ​​ontvangen bit te verwerken, kan hij zelfstandig SCL laag houden totdat hij klaar is om de volgende bit data te ontvangen. De SCL-lijn zal in een dergelijke situatie laag zijn gedurende de langste synchronisatiepuls op laag niveau.

Apparaten met het laagste aanhoudende lage niveau blijven inactief totdat de lange periode voorbij is. Wanneer alle apparaten de lage synchronisatieperiode hebben beëindigd, gaat SCL hoog.

Alle apparaten beginnen hoog te klokken en het eerste apparaat dat zijn periode voltooit, zal het eerste zijn dat de SCL-lijn laag zet. Dientengevolge zal de duur van de lage toestand van SCL worden bepaald door de langste lage toestand van de synchronisatiepuls van een van de apparaten, en de duur van de hoge toestand zal worden bepaald door de kortste synchronisatieperiode van een van de apparaten.

Synchronisatiesignalen kunnen door ontvangers worden gebruikt om gegevensoverdracht op bit- en byteniveau te regelen.

Als het apparaat in staat is om bytes met een hoge snelheid te ontvangen, maar het duurt een bepaalde tijd om de ontvangen byte op te slaan of om de volgende byte voor te bereiden, kan het SCL laag blijven houden na ontvangst en bevestiging van een byte, waardoor de zender in een standby-status.

Een microcontroller zonder ingebouwde hardwareschakelingen, bijvoorbeeld op bitniveau, kan de kloksnelheid vertragen door de duur van hun lage toestand te verlengen.Hierdoor wordt de baudsnelheid van het masterapparaat bepaald door de snelheid van de trager apparaat.


I2C-bus

ADRESSEN

Elk apparaat dat op de I2C-bus is aangesloten, heeft een uniek programmaadres waarop de master het adresseert door een specifiek commando te sturen. Microschakelingen van hetzelfde type worden gekenmerkt door een adresselector, geïmplementeerd in de vorm van digitale ingangen van de selector, of in analoge vorm. Adressen worden verdeeld in de adresruimte van de apparaten die op de bus zijn aangesloten.

Normale modus gaat uit van zeven-bits adressering. De adressering werkt als volgt: na het «START»-commando stuurt de master de eerste byte, die bepaalt welk slave-apparaat nodig is om met de master te communiceren. Er is ook een gemeenschappelijk oproepadres dat alle apparaten op de bus definieert, alle apparaten reageren (theoretisch) hierop met een bevestiging, maar in de praktijk komt dit zelden voor.

Dus de eerste zeven bits van de eerste byte zijn het slave-adres. Het minst significante bit, de achtste, geeft de richting van het verzenden van gegevens aan. Staat er een «0», dan wordt de informatie van de master naar deze slave geschreven. Indien «1», wordt de informatie door de master uitgelezen van deze slave.

Nadat de master klaar is met het verzenden van de adresbyte, vergelijkt elke slave zijn adres ermee. Iedereen met hetzelfde adres is een slaaf en wordt gedefinieerd als een slaafzender of slaafontvanger, afhankelijk van de waarde van het minst significante bit van de adresbyte.

Een slave-adres kan vaste en programmeerbare delen bevatten. Heel vaak werken een groot aantal apparaten van hetzelfde type in één systeem, waarna het programmeerbare deel van het adres het gebruik van maximaal hetzelfde type apparaten op de bus mogelijk maakt. Hoeveel bits in de adresbyte programmeerbaar zijn, hangt af van het aantal vrije pinnen op de chip.

Soms is een pin met een analoge instelling van het programmeerbare adresbereik voldoende, bijvoorbeeld de SAA1064 - een LED-indicator driver die precies zo'n implementatie heeft. De potentiaal van een bepaalde pin bepaalt de offset van de adresruimte van de chip, zodat chips van hetzelfde type niet conflicteren als ze op dezelfde bus werken. Alle chips die de I2C-bus ondersteunen, bevatten een reeks adressen die de fabrikant specificeert in de documentatie.

De combinatie «11110XX» is gereserveerd voor 10-bits adressering. Als we ons de uitwisseling van gegevens van het «START»-commando naar het «STOP»-commando voorstellen, ziet het er als volgt uit:


Adressering

Eenvoudige en gecombineerde formaten voor gegevensuitwisseling zijn hier toegestaan. Het gecombineerde formaat betekent dat tussen «START» en «STOP» de master en slave kunnen fungeren als ontvangers en zenders, dit is bijvoorbeeld handig bij serieel geheugenbeheer.

Laat de eerste byte aan gegevens een geheugenadres overbrengen. Door vervolgens het commando «START» te herhalen en het adres van de slave te lezen, zullen de geheugengegevens werken. Beslissingen om het eerder geopende adres automatisch te verhogen of te verlagen, worden genomen door de ontwikkelaar van het apparaat na eerst de chipdocumentatie te hebben bestudeerd. Op de een of andere manier moeten alle apparaten na ontvangst van het START-commando hun logica herstellen en zich voorbereiden op het feit dat het adres nu een naam krijgt.

We raden u aan om te lezen:

Waarom is elektrische stroom gevaarlijk?