I2C-busprotocol Tutorial, interface met applicaties

Probeer Ons Instrument Voor Het Oplossen Van Problemen





Tegenwoordig spelen de protocollen een essentiële rol in het embedded systeemontwerp ​Zonder naar de protocollen te gaan, als u de randfuncties van de microcontroller wilt uitbreiden, zullen de complexiteit en het stroomverbruik toenemen. Er zijn verschillende soorten busprotocollen beschikbaar zoals USART, SPI, CAN, I2C-busprotocol , enz., die worden gebruikt voor het overdragen van de gegevens tussen twee systemen.

I2C-protocol

Wat is I2C Bus?




Voor het verzenden en ontvangen van de informatie tussen twee of meer dan twee apparaten is een communicatiepad vereist dat een bussysteem wordt genoemd. Een I2C-bus is een bidirectionele tweeaderige seriële bus die wordt gebruikt om de gegevens tussen geïntegreerde schakelingen te transporteren. De I2C staat voor 'Inter Integrated Circuit'. Het werd voor het eerst geïntroduceerd door de Philips-halfgeleiders in 1982. De I2C-bus bestaat uit drie gegevensoverdrachtsnelheden: standaard, snelle modus en hoge snelheid. De I2C-bus ondersteunt 7-bits en 10-bits adresruimte-apparaten en de werking ervan verschilt bij lage spanningen.

I2c-busprotocol

I2c-busprotocol



I2C-signaallijnen

I2C-signaallijnen

I2C-signaallijnen

De I2C is een serieel busprotocol dat bestaat uit twee signaallijnen zoals SCL- en SDL-lijnen die worden gebruikt om met de apparaten te communiceren. De SCL staat voor een ‘seriële kloklijn’ en dit signaal wordt altijd aangestuurd door het ‘masterapparaat’. De SDL staat voor de ‘seriële datalijn’ en dit signaal wordt aangestuurd door de master of de I2C-randapparatuur. Zowel deze SCL- als SDL-lijnen bevinden zich in de open-drain-toestand wanneer er geen overdracht is tussen I2C-randapparatuur.

Open afvoer uitgangen


De open afvoer is de concept voor FET-transistor waarbij de afvoeraansluiting van de transistor open is. De SDL- en SCL-pinnen van het masterapparaat zijn ontworpen met de transistors in geopende toestand, dus gegevensoverdracht is alleen mogelijk wanneer deze transistors worden geleid. Daarom zijn deze lijnen of afvoerklemmen verbonden door middel van pull-up weerstanden met VCC voor geleidingsmodus.

I2C-interfaces

Veel Slave-apparaten zijn gekoppeld aan de microcontroller met behulp van de I2C bus via I2C level shifter IC voor het overbrengen van de informatie tussen hen. Het I2C-protocol dat wordt gebruikt om maximaal 128 apparaten aan te sluiten die allemaal zijn verbonden om te communiceren met de SCL- en SDL-lijnen van de master-unit en de slave-apparaten. Het ondersteunt Multimaster-communicatie, wat betekent dat er twee masters worden gebruikt om de externe apparaten te communiceren.

I2C-gegevensoverdrachtsnelheden

Het I2C-protocol werkt met drie modi, zoals: snelle modus, snelle modus en standaardmodus, waarbij de gegevenssnelheid in de standaardmodus varieert van 0Hz tot 100Hz, en de gegevens in de snelle modus kunnen worden overgedragen met een snelheid van 0Hz tot 400 KHz en de hoge snelheidsmodus met 10Hz. KHz tot 100 KHz. De 9-bits gegevens worden verzonden voor elke overdracht waarbij 8 bits worden verzonden door de zender MSB naar LSB, en het 9e bit is een bevestigingsbit dat door de ontvanger wordt verzonden.

I2C-gegevensoverdrachtsnelheden

I2C-gegevensoverdrachtsnelheden

I2C-communicatie

Het I2C-busprotocol wordt het meest gebruikt in master- en slave-communicatie, waarbij de master 'microcontroller' wordt genoemd en de slave andere apparaten wordt genoemd, zoals ADC, EEPROM, DAC en vergelijkbare apparaten in het embedded systeem. Het aantal slave-apparaten wordt met behulp van de I2C-bus op het master-apparaat aangesloten, waarbij elke slave uit een uniek adres bestaat om deze te communiceren. De volgende stappen worden gebruikt om het master-apparaat aan de slave te communiceren:

Stap 1: Ten eerste geeft het masterapparaat een startvoorwaarde af om alle slaafapparaten te informeren zodat ze luisteren via de seriële datalijn.

Stap 2: Het master-apparaat verzendt het adres van het doel-slave-apparaat dat wordt vergeleken met de adressen van alle slave-apparaten zoals verbonden met de SCL- en SDL-lijnen. Als een van de adressen overeenkomt, wordt dat apparaat geselecteerd en worden de overige apparaten losgekoppeld van de SCL- en SDL-lijnen.

Stap 3: Het slaafapparaat met een aangepast adres dat van de meester is ontvangen, antwoordt met een bevestiging naar de meester, waarna communicatie tot stand wordt gebracht tussen zowel de meester- als de slaafapparaten op de databus.

Stap 4: Zowel de master als de slave ontvangen en verzenden de gegevens, afhankelijk van of de communicatie wordt gelezen of geschreven.

Stap5: Vervolgens kan de master 8-bits gegevens naar de ontvanger verzenden, die antwoordt met een 1-bits bevestiging.

I2C-zelfstudie

Het stap voor stap serieel verzenden en ontvangen van de informatie met betrekking tot de klokpulsen wordt het I2C-protocol genoemd. Het is een inter-systeem en korteafstandsprotocol, wat betekent dat het binnen de printplaat wordt gebruikt om de master- en slave-apparaten te communiceren.

I2C Protocol Basics

Over het algemeen bestaat het I2C-bussysteem uit twee draden die gemakkelijk kunnen worden gebruikt om de randapparatuur voor invoer en uitvoer uit te breiden, zoals ADC, EEROM en RTC, en andere basiscomponenten om een ​​systeem te maken waarvan de complexiteit veel minder is.

Voorbeeld: Aangezien de 8051-microcontroller geen ingebouwde ADC heeft - dus als we analoge sensoren willen koppelen aan de 8051-microcontroller - moeten we ADC-apparaten gebruiken zoals ADC0804-1-kanaals ADC, ADC0808-8-kanaals ADC, enz. Door deze ADC's te gebruiken, we kunnen de analoge sensoren koppelen aan de microcontroller.

Zonder het protocol te gebruiken om de I / O-functies van een microcontroller of processor uit te breiden, kunnen we naar 8255 ICit 8-pins apparaat. De 8051-microcontroller is een 40-pins microcontroller door gebruik te maken van de 8255 IC kunnen we de 3-I / O-poorten uitbreiden met 8-pins in elke poort. Door alle apparaten zoals RTC, ADC, EEPROM, Timers, enz. Te gebruiken - voor het uitbreiden van de randschakelingen - worden ook de complexiteit, de kosten, het stroomverbruik en de productgrootte vergroot.

Om dit probleem op te lossen, komt het protocolconcept in beeld om de complexiteit van de hardware en het stroomverbruik te verminderen. We kunnen meer functies uitbreiden, zoals I / 0-randapparatuur, ADC's, T / C en geheugenapparaten tot 128 apparaten door dit I2C-protocol te gebruiken.
Terminologie die wordt gebruikt in I2C-protocollen

Zender: Het apparaat dat gegevens naar de bus stuurt, wordt zender genoemd.

Ontvanger: Het apparaat dat gegevens van de bus ontvangt, wordt een ontvanger genoemd.

Meester: Het apparaat dat overdrachten initieert om kloksignalen te genereren en een overdracht te beëindigen, wordt een master genoemd.

Slaaf: Het apparaat dat door een master wordt aangesproken, wordt een slave genoemd.

Multimaster: Meer dan één master kan tegelijkertijd proberen de bus te besturen zonder het bericht te beschadigen. Dit wordt een multimaster genoemd.

Arbitrage: Procedure om ervoor te zorgen dat, als meer dan één master tegelijkertijd probeert om de bus te besturen - er slechts één mag doen, het winnende bericht niet wordt beschadigd.

Synchronisatie: Procedure voor het synchroniseren van de kloksignalen van twee of meer apparaten wordt synchronisatie genoemd.

I2C Basisopdrachtenreeks

  1. Startbitvoorwaarde
  2. Stop Bit-toestand
  3. Bevestigingsvoorwaarde
  4. Master naar slave Schrijfbewerking
  5. Lees Operatie Slave naar Master

Start- en stopbitvoorwaarde

Wanneer de master (microcontroller) met een slaafapparaat (bijvoorbeeld ADC) wil praten, begint deze te communiceren door een startvoorwaarde op de I2C-bus uit te geven en geeft vervolgens een stopvoorwaarde af. De I2C start- en stoplogica-niveaus worden weergegeven in de afbeelding.

De I2C-startvoorwaarde wordt gedefinieerd als een hoge naar lage overgang van de SDA-lijn terwijl de SCL-lijn hoog is. Een I2C-stopconditie treedt op wanneer de SDA-lijn van laag naar hoog schakelt terwijl de SCL-lijn hoog is.

De I2C-master genereert altijd de S- en P-voorwaarden. Zodra de I2C-master een START-conditie initieert, wordt de I2c-bus als bezet beschouwd.

Start- en stopbitvoorwaarde

Start- en stopbitvoorwaarde

Programmeren:

START Conditie:

sbit SDA = P1 ^ 7 // initialiseer de SDA- en SCL-pinnen van de microcontroller //
sbit SCL = P1 ^ 6
ongeldige vertraging (unsigned int)
leegte main ()

SDA = 1 // verwerking van de gegevens //
SCL = 1 // klok is hoog //
vertraging()
SDA = 0 // verzonden de gegevens //
vertraging()
SCL = 0 // kloksignaal is laag //

Ongeldige vertraging (int p)

unsignedinta, b
Voor (a = 0a<255a++) //delay function//
Voor (b = 0b

STOP-voorwaarde:

leegte main ()

SDA = 0 // Stop met het verwerken van de gegevens //
SCL = 1 // klok is hoog //
vertraging()
SDA = 1 // Gestopt //
vertraging()
SCL = 0 // kloksignaal is laag //

Ongeldige vertraging (int p)

unsignedinta, b
Voor (a = 0a<255a++) //delay function//
Voor (b = 0b

Bevestiging (ACK) en geen bevestiging (NCK) voorwaarde

Elke byte die via de I2C-bus wordt verzonden, wordt gevolgd door een bevestigingsvoorwaarde van de ontvanger, wat betekent dat, nadat de master SCL laag heeft getrokken om de transmissie van 8-bit te voltooien, de SDA door de ontvanger naar de master wordt getrokken. Als, nadat de transmissie van de ontvanger niet trekt, de SDA-lijn LOW wordt beschouwd als een NCK-toestand.

Erkenning (ACK)

Erkenning (ACK)

Programmeren

Erkenning
leegte main ()

SDA = 0 // SDA-lijn gaat te laag //
SCL = 1 // klok is van hoog naar laag //
vertraging (100)
SCL = 0

Geen bevestiging:
leegte main ()

SDA = 1 // SDA-lijn gaat te hoog //
SCL = 1 // klok is van hoog naar laag //
vertraging (100)
SCL = 0

Master to Slave schrijft operatie

Het I2C-protocol draagt ​​de gegevens over in de vorm van pakketten of bytes. Elke byte wordt gevolgd door een bevestigingsbit.

Formaat voor gegevensoverdracht

Formaat voor gegevensoverdracht

Formaat voor gegevensoverdracht

Begin: In de eerste plaats de gegevensoverdrachtsequentie geïnitieerd door de master die de startvoorwaarde genereert.

7-bits adres: Daarna verstuurt de master het slave-adres in twee 8-bit formaten in plaats van een enkel 16-bit adres.

R / W: Als de lees- en schrijfbit hoog is, wordt de schrijfbewerking uitgevoerd.

HELAAS: Als de schrijfbewerking wordt uitgevoerd in het slave-apparaat, stuurt de ontvanger de 1-bit ACK naar de microcontroller.

Hou op: Na voltooiing van de schrijfbewerking in het slaafapparaat, verzendt de microcontroller de stopconditie naar het slaafapparaat.

Programmeren

Schrijf operatie

voidwrite (niet-ondertekende teken d)

Niet-ondertekend teken k, j = 0x80
Voor (k = 0k<8k++)

SDA = (d & j)
J = j >> 1
SCL = 1
vertraging (4)
SCL = 0

SDA = 1
SCL = 1
vertraging (2)
c = SDA
vertraging (2)
SCL = 0

Lezen van master naar slaaf

De gegevens worden van het slaafapparaat teruggelezen in de vorm van bit of bytes - lees eerst de meest significante bit en als laatste de minst significante bit.

Het gegevensleesformaat

Gegevens lezen formaat

Gegevens lezen formaat

Begin: In de eerste plaats wordt de gegevensoverdrachtsequentie geïnitieerd door de master die de startvoorwaarde genereert.

7-bits adres: Daarna verstuurt de master het slave-adres in twee 8-bit formaten in plaats van een enkel 16-bit adres.

R / W: Als de lees- en schrijfbit laag is, wordt de leesbewerking uitgevoerd.

HELAAS: Als de schrijfbewerking wordt uitgevoerd in het slave-apparaat, stuurt de ontvanger de 1-bit ACK naar de microcontroller.

Hou op: Na voltooiing van de schrijfbewerking in het slaafapparaat, verzendt de microcontroller de stopconditie naar het slaafapparaat.

Programmeren

Ongeldig lezen ()

Niet-ondertekende char j, z = 0x00, q = 0x80
SDA = 1
voor (j = 0j<8j++)

SCL = 1
vertraging (100)
vlag = SDA
if (vlag == 1)
q)
q = q >> 1
vertraging (100)
SCL = 0

Praktisch voorbeeld van het koppelen van ADC aan de 8051-microcontroller

De ADC is een apparaat dat wordt gebruikt om de analoge gegevens om te zetten in de vorm van digitaal en digitaal naar analoog. De 8051-microcontroller heeft geen ingebouwde ADC, dus we moeten extern toevoegen via het I2C-protocol. De PCF8591 is gebaseerd op de I2C analoog naar digitaal en digitaal naar analoog converter. Dit apparaat ondersteunt maximaal 4 analoge ingangskanalen samen met 2,5 tot 6 volt spanningen.

Analoge uitgangen

De analoge uitgangen zijn er in de vorm van spanningen. Een analoge sensor van 5 V geeft bijvoorbeeld een outputlogica van 0,01 V tot 5 V.
De maximale digitale waarde van 5v is = 256.
De waarde van 2,5 V is = 123 volgens de maximale spanningswaarde.

De formule van analoge output is:

De formule van digitale output:

Koppeling van ADC met de 8051 Microcontroller

Koppeling van ADC met de 8051 Microcontroller

De bovenstaande afbeelding toont de gegevensoverdracht met behulp van het I2C-protocol van het ADC-apparaat naar de 8051-microcontroller. De ADC-pinnen van SCL en SDA zijn verbonden met pin 1.7 en 1.6 van microcontroller om de communicatie tussen beide tot stand te brengen. Wanneer de sensor analoge waarden aan de ADC geeft, converteert deze naar digitaal en draagt ​​hij gegevens over naar de microcontroller via het I2C-protocol.

Dit gaat over de tutorial van het I2C-busprotocol met de juiste programma's. We hopen dat de gegeven inhoud u een praktisch concept geeft om verschillende apparaten te koppelen aan microcontrollers met behulp van de I2C-communicatie. Als u enige twijfel heeft over de interfacing-procedure van dit protocol, kunt u ons bereiken door hieronder te reageren.