Tutorial zum I2C-Busprotokoll, Schnittstelle zu Anwendungen

Versuchen Sie Unser Instrument, Um Probleme Zu Beseitigen





Heutzutage spielen die Protokolle eine wesentliche Rolle in der Design eingebetteter Systeme . Wenn Sie die Peripheriefunktionen des Mikrocontrollers erweitern möchten, ohne die Protokolle aufzurufen, erhöhen sich die Komplexität und der Stromverbrauch. Es gibt verschiedene Arten von Busprotokollen wie USART, SPI, CAN, I2C-Busprotokoll usw., die zum Übertragen der Daten zwischen zwei Systemen verwendet werden.

I2C-Protokoll

Was ist I2C-Bus?




Das Senden und Empfangen der Informationen zwischen zwei oder mehr als zwei Geräten erfordert einen Kommunikationspfad, der als Bussystem bezeichnet wird. Ein I2C-Bus ist ein bidirektionaler zweidrahtiger serieller Bus, mit dem die Daten zwischen integrierten Schaltkreisen transportiert werden. Das I2C steht für 'Inter Integrated Circuit'. Es wurde erstmals 1982 von den Philips Halbleitern eingeführt. Der I2C-Bus besteht aus drei Datenübertragungsgeschwindigkeiten wie Standard, Fast-Mode und High-Speed-Mode. Der I2C-Bus unterstützt 7-Bit- und 10-Bit-Adressraumgeräte und seine Funktionsweise unterscheidet sich bei niedrigen Spannungen.

I2c-Bus-Protokoll

I2c-Bus-Protokoll



I2C-Signalleitungen

I2C-Signalleitungen

I2C-Signalleitungen

Das I2C ist ein serielles Busprotokoll, das aus zwei Signalleitungen wie SCL- und SDL-Leitungen besteht, die zur Kommunikation mit den Geräten verwendet werden. Die SCL steht für eine 'serielle Taktleitung' und dieses Signal wird immer vom 'Master-Gerät' angesteuert. Die SDL steht für die 'serielle Datenleitung', und dieses Signal wird entweder vom Master- oder vom I2C-Peripheriegerät angesteuert. Sowohl diese SCL- als auch diese SDL-Leitungen befinden sich im Open-Drain-Zustand, wenn keine Übertragung zwischen I2C-Peripheriegeräten erfolgt.

Open-Drain-Ausgänge


Der offene Abfluss ist der Konzept für FET-Transistor wobei der Drain-Anschluss des Transistors offen ist. Die SDL- und SCL-Pins des Master-Geräts sind so ausgelegt, dass die Transistoren geöffnet sind, sodass eine Datenübertragung nur möglich ist, wenn diese Transistoren durchgeführt werden. Daher sind diese Leitungen oder Drain-Anschlüsse für den Leitungsmodus durch gründliche Pull-up-Widerstände mit VCC verbunden.

I2C-Schnittstellen

Viele Slave-Geräte sind mit dem Mikrocontroller verbunden mit Hilfe des I2C-Busses über den I2C-Pegelumsetzer-IC zur Übertragung der Informationen zwischen ihnen. Das I2C-Protokoll, mit dem maximal 128 Geräte verbunden werden, die alle für die Kommunikation mit den SCL- und SDL-Leitungen der Master-Einheit sowie den Slave-Geräten verbunden sind. Es unterstützt die Multimaster-Kommunikation, dh, zwei Master werden zur Kommunikation der externen Geräte verwendet.

I2C-Datenübertragungsraten

Das I2C-Protokoll arbeitet in drei Modi: Schnellmodus, Hochgeschwindigkeitsmodus und Standardmodus, wobei die Datengeschwindigkeit im Standardmodus zwischen 0 Hz und 100 Hz liegt und die Daten im Schnellmodus mit einer Geschwindigkeit von 0 Hz bis 400 kHz und im Hochgeschwindigkeitsmodus mit 10 übertragen werden können KHz bis 100 kHz. Die 9-Bit-Daten werden für jede Übertragung gesendet, wobei 8-Bit vom Sender MSB an LSB gesendet werden und das 9. Bit ein vom Empfänger gesendetes Bestätigungsbit ist.

I2C-Datenübertragungsraten

I2C-Datenübertragungsraten

I2C-Kommunikation

Das I2C-Busprotokoll wird am häufigsten in der Master- und Slave-Kommunikation verwendet, wobei der Master als 'Mikrocontroller' und der Slave als andere Geräte wie ADC, EEPROM, DAC und ähnliche Geräte im eingebetteten System bezeichnet wird. Die Anzahl der Slave-Geräte wird mit Hilfe des I2C-Busses mit dem Master-Gerät verbunden, wobei jeder Slave aus einer eindeutigen Adresse für die Kommunikation besteht. Die folgenden Schritte werden verwendet, um das Master-Gerät an den Slave zu kommunizieren:

Schritt 1: Zunächst gibt das Master-Gerät eine Startbedingung aus, um alle Slave-Geräte zu informieren, damit sie die serielle Datenleitung abhören.

Schritt 2: Das Master-Gerät sendet die Adresse des Ziel-Slave-Geräts, die mit allen Adressen der Slave-Geräte verglichen wird, die an die SCL- und SDL-Leitungen angeschlossen sind. Wenn eine Adresse übereinstimmt, wird dieses Gerät ausgewählt und die verbleibenden Geräte werden von den SCL- und SDL-Leitungen getrennt.

Schritt 3: Das Slave-Gerät mit einer vom Master empfangenen übereinstimmenden Adresse antwortet mit einer Bestätigung an den Master. Danach wird eine Kommunikation zwischen dem Master- und dem Slave-Gerät auf dem Datenbus hergestellt.

Schritt 4: Sowohl der Master als auch der Slave empfangen und senden die Daten, je nachdem, ob die Kommunikation gelesen oder geschrieben wird.

Schritt 5: Dann kann der Master 8-Bit-Daten an den Empfänger senden, der mit einer 1-Bit-Bestätigung antwortet.

I2C-Tutorial

Das schrittweise Senden und Empfangen der Informationen in Bezug auf die Taktimpulse wird als I2C-Protokoll bezeichnet. Es handelt sich um ein System- und Kurzstreckenprotokoll, dh es wird innerhalb der Leiterplatte zur Kommunikation der Master- und Slave-Geräte verwendet.

Grundlagen des I2C-Protokolls

Im Allgemeinen besteht das I2C-Bussystem aus zwei Drähten, mit denen die Eingangs- und Ausgangsperipheriefunktionen wie ADC, EEROM und RTC problemlos erweitert werden können andere Grundkomponenten ein System zu schaffen, dessen Komplexität sehr gering ist.

Beispiel: Da der 8051-Mikrocontroller keinen eingebauten ADC hat. Wenn wir also analoge Sensoren an den 8051-Mikrocontroller anschließen möchten, müssen wir ADC-Geräte wie ADC0804-1-Kanal-ADC, ADC0808-8-Kanal-ADC usw. verwenden. Wir können die analogen Sensoren an den Mikrocontroller anschließen.

Ohne das Protokoll zur Erweiterung der E / A-Funktionen eines Mikrocontrollers oder Prozessors zu verwenden, können wir auf das 8-polige 8255 ICit-Gerät umsteigen. Das Der 8051-Mikrocontroller ist ein 40-poliger Mikrocontroller Mit dem 8255 IC können wir die 3-E / A-Ports mit 8-Pins in jedem Port erweitern. Durch die Verwendung aller Geräte wie RTC, ADC, EEPROM, Timer usw. - zur Erweiterung der Peripherieschaltung - werden auch Komplexität, Kosten, Stromverbrauch und Produktgröße erhöht.

Um dieses Problem zu lösen, kommt das Protokollkonzept ins Spiel, um die Hardwarekomplexität und den Stromverbrauch zu reduzieren. Mit diesem I2C-Protokoll können wir eine größere Anzahl von Funktionen wie E / A-Peripheriegeräte, ADCs, T / C- und Speichergeräte auf bis zu 128 Geräte erweitern.
In I2C-Protokollen verwendete Terminologie

Sender: Das Gerät, das Daten an den Bus sendet, wird als Sender bezeichnet.

Empfänger: Das Gerät, das Daten vom Bus empfängt, wird als Empfänger bezeichnet.

Meister: Das Gerät, das Übertragungen initiiert, um Taktsignale zu erzeugen und eine Übertragung zu beenden, wird als Master bezeichnet.

Sklave: Das von einem Master adressierte Gerät wird als Slave bezeichnet.

Multimaster: Es können mehrere Master gleichzeitig versuchen, den Bus zu steuern, ohne die Nachricht zu beschädigen. Dies wird als Multimaster bezeichnet.

Schiedsgerichtsbarkeit: Verfahren, um sicherzustellen, dass, wenn mehr als ein Master gleichzeitig versucht, den Bus zu steuern, nur einer dies tun darf, die Gewinnnachricht nicht beschädigt wird.

Synchronisation: Das Verfahren zum Synchronisieren der Clock-Singles von zwei oder mehr Geräten wird als Synchronisation bezeichnet.

Sequenz der I2C-Basisbefehle

  1. Startbitbedingung
  2. Bitbedingung stoppen
  3. Bestätigungsbedingung
  4. Master-zu-Slave-Schreibvorgang
  5. Lesen Sie Operation Slave zum Master

Start- und Stoppbitbedingung

Wenn der Master (Mikrocontroller) mit einem Slave-Gerät (z. B. ADC) sprechen möchte, beginnt er die Kommunikation, indem er eine Startbedingung auf dem I2C-Bus ausgibt und dann eine Stoppbedingung ausgibt. Die I2C-Start- und Stopp-Logikpegel sind in der Abbildung dargestellt.

Die I2C-Startbedingung definiert als einen Übergang von hoch nach niedrig der SDA-Leitung, während die SCL-Leitung hoch ist. Eine I2C-Stoppbedingung tritt auf, wenn die SDA-Leitung von niedrig nach hoch wechselt, während die SCL-Leitung hoch ist.

Der I2C-Master generiert immer die S- und P-Bedingungen. Sobald der I2C-Master eine START-Bedingung initiiert, wird der I2c-Bus als besetzt betrachtet.

Start- und Stoppbitbedingung

Start- und Stoppbitbedingung

Programmierung:

START Bedingung:

sbit SDA = P1 ^ 7 // initialisiere die SDA- und SCL-Pins des Mikrocontrollers //
sbit SCL = P1 ^ 6
void delay (unsigned int)
void main ()
{
SDA = 1 // Daten verarbeiten //
SCL = 1 // Uhr ist hoch //
verzögern()
SDA = 0 // hat die Daten gesendet //
verzögern()
SCL = 0 // Taktsignal ist niedrig //
}}
Leere Verzögerung (int p)
{
unsignedinta, b
Für (a = 0a<255a++) //delay function//
Für (b = 0b}}

STOP Bedingung:

void main ()
{
SDA = 0 // Verarbeitung der Daten beenden //
SCL = 1 // Uhr ist hoch //
verzögern()
SDA = 1 // gestoppt //
verzögern()
SCL = 0 // Taktsignal ist niedrig //
}}
Leere Verzögerung (int p)
{
unsignedinta, b
Für (a = 0a<255a++) //delay function//
Für (b = 0b}}

Bedingung für Bestätigung (ACK) und keine Bestätigung (NCK)

Auf jedes über den I2C-Bus übertragene Byte folgt eine Bestätigungsbedingung vom Empfänger. Dies bedeutet, dass der SDA vom Empfänger zum Master nach unten gezogen wird, nachdem der Master die SCL auf Low gesetzt hat, um die Übertragung von 8 Bit abzuschließen. Wenn nach dem Senden des Empfängers nicht gezogen wird, wird die SDA-Leitung LOW als NCK-Bedingung betrachtet.

Bestätigung (ACK)

Bestätigung (ACK)

Programmierung

Wissen
void main ()
{
SDA = 0 // SDA-Leitung geht auf niedrig //
SCL = 1 // Takt ist hoch bis niedrig //
Verzögerung (100)
SCL = 0
}}
Keine Anerkennung:
void main ()
{
SDA = 1 // SDA-Leitung geht auf hoch //
SCL = 1 // Takt ist hoch bis niedrig //
Verzögerung (100)
SCL = 0
}}

Master to Slave schreibt Operation

Das I2C-Protokoll überträgt die Daten in Form von Paketen oder Bytes. Auf jedes Byte folgt ein Bestätigungsbit.

Datenübertragungsformat

Datenübertragungsformat

Datenübertragungsformat

Start: In erster Linie die vom Master initiierte Datenübertragungssequenz, die die Startbedingung erzeugt.

7-Bit-Adresse: Danach sendet der Master die Slave-Adresse in zwei 8-Bit-Formaten anstelle einer einzelnen 16-Bit-Adresse.

R / W: Wenn das Lese- und Schreibbit hoch ist, wird die Schreiboperation ausgeführt.

ACH: Wenn der Schreibvorgang im Slave-Gerät ausgeführt wird, sendet der Empfänger die 1-Bit-ACK an den Mikrocontroller.

Halt: Nach Abschluss des Schreibvorgangs im Slave-Gerät sendet der Mikrocontroller die Stoppbedingung an das Slave-Gerät.

Programmierung

Schreibvorgang

voidwrite (vorzeichenloses Zeichen d)
{
Vorzeichenloses Zeichen k, j = 0x80
Für (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
Verzögerung (4)
SCL = 0
}}
SDA=1
SCL = 1
Verzögerung (2)
c = SDA
Verzögerung (2)
SCL = 0
}}

Lesevorgang von Master zu Slave

Die Daten werden in Form von Bits oder Bytes vom Slave-Gerät zurückgelesen. Lesen Sie zuerst das höchstwertige Bit und zuletzt das niedrigstwertige Bit.

Das Datenleseformat

Datenleseformat

Datenleseformat

Start: In erster Linie wird die Datenübertragungssequenz vom Master initiiert, der die Startbedingung erzeugt.

7-Bit-Adresse: Danach sendet der Master die Slave-Adresse in zwei 8-Bit-Formaten anstelle einer einzelnen 16-Bit-Adresse.

R / W: Wenn das Lese- und Schreibbit niedrig ist, wird die Leseoperation ausgeführt.

ACH: Wenn der Schreibvorgang im Slave-Gerät ausgeführt wird, sendet der Empfänger die 1-Bit-ACK an den Mikrocontroller.

Halt: Nach Abschluss des Schreibvorgangs im Slave-Gerät sendet der Mikrocontroller die Stoppbedingung an das Slave-Gerät.

Programmierung

Nichtig lesen ()
{
Vorzeichenloses Zeichen j, z = 0x00, q = 0x80
SDA=1
für (j = 0j<8j++)
{
SCL = 1
Verzögerung (100)
flag = SDA
if (flag == 1)
q)
q = q >> 1
Verzögerung (100)
SCL = 0

Praktisches Beispiel für die Anbindung eines ADC an den 8051-Mikrocontroller

Der ADC ist ein Gerät, mit dem die analogen Daten in die Form digital und digital in analog umgewandelt werden. Der 8051-Mikrocontroller verfügt nicht über einen eingebauten ADC, daher müssen wir ihn extern über das I2C-Protokoll hinzufügen. Der PCF8591 basiert auf I2C analog zu digital und Digital-Analog-Wandler. Dieses Gerät unterstützt maximal 4 analoge Eingangskanäle sowie 2,5 bis 6 V Spannungen.

Analoge Ausgänge

Die Analogausgänge liegen in Form von Spannungen vor. Zum Beispiel liefert ein analoger 5-V-Sensor eine Ausgangslogik von 0,01 V bis 5 V.
Der maximale digitale Wert von 5 V beträgt = 256.
Der Wert von 2,5 V beträgt = 123 gemäß dem maximalen Spannungswert.

Die Formel für den Analogausgang lautet:

Die Formel der digitalen Ausgänge:

Schnittstelle zwischen ADC und 8051-Mikrocontroller

Schnittstelle zwischen ADC und 8051-Mikrocontroller

Die obige Abbildung zeigt die Datenübertragung unter Verwendung des I2C-Protokolls vom ADC-Gerät zum 8051-Mikrocontroller. Die ADC-Pins von SCL und SDA sind mit den Pins 1.7 und 1.6 des Mikrocontrollers verbunden, um die Kommunikation zwischen ihnen herzustellen. Wenn der Sensor dem ADC analoge Werte gibt, wandelt er diese in digitale um und überträgt Daten über das I2C-Protokoll an den Mikrocontroller.

Hier geht es um das Tutorial zum I2C-Busprotokoll mit entsprechenden Programmen. Wir hoffen, dass der gegebene Inhalt Ihnen ein praktisches Konzept für die Verbindung mehrerer Geräte mit Mikrocontrollern über die I2C-Kommunikation bietet. Wenn Sie Zweifel an der Schnittstellenprozedur dieses Protokolls haben, können Sie uns erreichen, indem Sie unten einen Kommentar abgeben.