I²C – Mikrocontroller.net (2024)

I²C (gesprochen "I quadrat C") ist ein synchroner serieller Zweidraht-Bus, der jeweils eine bidirektionale Daten- und Taktleitung verwendet und für die Kommunikation zwischen ICs über kleine Distanzen geeignet ist. Die Bezeichnung steht für IIC, Inter-Integrated Circuit. Der Bus wurde Anfang der 80er Jahre von Philips entwickelt.

Aus Lizenzgründen heißt der I²C Bus bei manchen Herstellern auch TWI, two wire interface (siehe AVR TWI). Im PC wird ein dem I²C-Bus sehr ähnliches System benutzt, um z.B. die Daten eines SDRAM-Modules auszulesen. Dieser nennt sich SMBus (System Management Bus).

  • 1 Busstruktur und Adressierung
  • 2 Adressierung
  • 3 Handshaking / Quittierung
  • 4 Übertragungsraten
    • 4.1 Reale Beispiele
  • 5 Bausteine
  • 6 Galvanische Trennung
  • 7 Siehe auch
  • 8 Weblinks
    • 8.1 Bibliotheken
    • 8.2 I²C-Interface
    • 8.3 I²C-Monitor

Busstruktur und Adressierung

In einem I²C-Bus gibt es mindestens einen Master sowie bis zu 127 Slaves. Ein I²C-Bus mit mehreren Mastern wird als "Multi-Master-Bus" bezeichnet.

Die Slaves in einem Verbund müssen alle mit einer eigenen, individuellen Adresse codiert werden. Somit sind sie für jedem Master individuell anzusprechen. Darüber hinaus existiert ein sogenannter Broadcastkanal, mit dem alle Slaves gleichzeitig angesprochen werden können.

Ein Problem mit manchen Slaves ist der eingeschränkte Adressbereich, d.h. sie liegen auf einem definierten Bereich und haben darin z.b. nur 3 Bit als Programmieroption. Somit schließen diese Slaves indirekt andere Adressen aus.

Adressierung

Der (oder die) Master sprechen die Slaves jeweils aktiv an. Slaves können nie selbstständig beginnen, Daten zu senden. Um eine Kommunikation zu etablieren, übernimmt der Master, der Daten senden oder empfangen möchte, den Bus und gibt die (7-bit- bzw. 10-bit-)Adresse des Slaves aus, mit dem er kommunizieren möchte. Nach der Adresse teilt der Master dem entsprechenden Slave mit, ob er Daten senden oder empfangen möchte. Danach werden die eigentlichen Daten (entweder vom Master oder Slave) auf den Bus gelegt. Hat der Master den Lese- oder Schreibvorgang abgeschlossen, so gibt er den Bus wieder frei.Sofern mehrere Master vorhanden sind, stellt ein logisches Protokoll sicher, dass sich diese nicht gegenseitig stören. Im Fall einer broad cast Operation kann ein time slot System sicherstellen, dass nie mehr als ein slave gleichzeitig antwortet.

Handshaking / Quittierung

Die Kommunikation auf Bitebene erfolgt seitens des Masters durch Senden von Start / Stopp Bedingungen, die sich aus der Kombination der Zustände von Takt- und Datenleitung ergeben. Um die erfolgreiche Kommunikation zwischen Master und Slave sicherzustellen, senden Slaves - ausser im broadcast Betrieb - nach erfolgreicher Dekodierung ihrer Adresse sowie im Schreibfall ein Acknowledge, in dem sie die Datenleitung ziehen. Diese muss dazu vom Master rechtzeitig freigegeben worden sein und beobachtet werden. Umgekehrt quittiert der Master in ähnlicher Weise den Empfang eines Datenbytes vom Slave und signalisiert somit weitere Empfangsbereitschaft. Der Takt wird immer vom Master getrieben.

Übertragungsraten

Die genormte Übertragungsrate beträgt beim sogenannten "standard mode" 100 kbit/s, beim "fast mode" 400 kbit/s und beim "fast mode+" 1000kbit/sec. Im sogenannten high-speed mode, der mit etwas anderen Spannungs- und Stromrandbedingungen arbeitet sind es zu 3,4 MBit/s. Die Raten beziehen sich auf die festgelegten Taktraten. Andere sind möglich, jedoch nicht genormt.

Die reale maximale Datenrate ist infolge des asynchronen Betriebs und der Pausen meistens etwas niedriger. Zudem kann - falls die Taktrate für einen Slave zu hoch ist - die Clock-Leitung auf Null durch ihn auf GND gezogen- und damit die Übertragung verlangsamt werden, was als sog. "Clock Stretching" bezeichnet wird. Dies ist auf Bit- wie auf Byte-Ebene möglich; ersteres allerdings nicht im high-speed mode.

Reale Beispiele

Um sich an längere Übertragungswege anzupassen, kann man die Taktrate theoretisch beliebig vermindern, jedoch erzeugen einige Bausteine aber irgendwann ein Time-Out. Manche interpretieren einen lange niedergehaltenen Takt auch als Reset. Daher sind Taktraten von unter 1kbps in der Regel nicht denkbar.

Als Beispiel können jedoch mit einer Taktfrequenz von nur 5 kbit/s durchaus mehrere Meter überbrückt werden:

Erfahrungen mit den Atmegas (gemessene I2C-Taktfrequenzen):

  • 16,000MHz - schafft sauber bis zu 700KHz
  • 18,432MHz - schafft sauber bis zu 950KHz

Selbst unter schlechten Bedingungen wie...

  • 50cm 6-adriges Spiralkabel, frei schwingend verbaut in einem Rennwagen als Verbindung zwischen Lenkraddisplay und Amaturenbrett
  • Nähe zu nicht geschirmten Leitungen mit 12V, GND und 5V PWM zum Dimmen von LEDs
  • grausamen Umgebungsbedingungen, Fahrten im Regen, Schnee oder bei glühender Sonne und gefühlten 100° C;-) auf der Rennstrecke.

... hat der Bus ohne Probleme funktioniert.

Um anders herum hohe Bandbreiten zu erreichen, lassen sich krumme I2C-Frequenzen ausserhalb der SPEC verwenden, damit sie besser zu den Controllern und deren Taktfrequenzen passen.

Bausteine

Neben Mikrocontrollern gibt es eine Reihe von Peripheriebausteinen, die per I²C angeschlossen werden können. Eine gute Anlaufstelle bei der Suche ist die unten angegebene Seite des "Erfinders" Philips, heute als NXP bekannt.

  • I/O-Portexpander
    • PCF8574
    • MCP23008 (8-bit) von Microchip
    • MCP23017(16-bit) von Microchip
  • I2C MUX, zum Anschluss von ICs mit gleicher, fester Adresse
  • LED-Treiber
    • HT16K33 (RAM Mapping 16*8 LED) von Holtek
    • SAA1064 (seit 2005 abgekündigt! Restposten sehr teuer)
  • Temperatursensoren
    • DS1621
    • LM75
    • SHT21
    • TMP101 von TexasInstruments
    • TMP175 von TI (mehr als 8 Bausteine im gleichen Bus möglich)
  • Drucksensoren
    • SMD500
    • BMP085
  • Beschleunigungssensor
    • BMA020
  • Audioverstärker
    • TPA2016
    • TPA2026
    • TDA8594

Galvanische Trennung

  • AN913 von Analog Devices
  • I2C Isolators von Analog Devices
  • Si840 von Silabs,(Not Recommended for New Designs)
  • I2C Isolator von Silabs
  • Galvanische Trennung für I2C, Applikation National Semiconductor
  • I2C FAQ
  • P82B96, I2C Bus Extender, auch für galvansiche Trennung
  • notes_82b96.pdf, Application Note zum P82B96
    • warum die einfache Schaltung Probleme hat, siehe Seite 17
  • an460.pdf, Application Note von Philips zum P82B96
  • Forumsbeitrag: I2C Bus trennen
  • Forumsbeitrag: I²C galvanisch trennen
  • I2C Bus Isolator

Siehe auch

  • AT91-TWI
  • AVR TWI
  • I2C als Hausbus
  • Modulares Board
  • Forumsbeitrag: I2C-Adressen mit 7 oder 8 Bit
  • Forumsbeitrag: I2C über lange Entfernungen als differentielles Signal übertragen.
  • Forumsbeitrag: Übersicht über die Adressen verschiedener I2C Bausteine

Weblinks

Bibliotheken

I²C-Interface

  • Beitrag "i2c usb interface" Diskussion zu Interfaces für Linux
  • USB4ALL bei sprut.de universeller USB-Baustein, auch für I2C (5V, CDC/Virtual-Comport)
  • Aardvark I2C/SPI Host Adapter, Universeller Adapter für I2C und SPI
  • USB-I2C-Interface Komplettbausatz von ELV (5V, Virtual-Comport)
  • i2c-tiny-usb Open Source/Hardware (5V, Linux-Kernel-Treiber, C/C++ Beispiele)
  • I2C-MP-USB Open Source (3,3V und 5V, Linux-Kernel-Treiber, Python-Bibliothek für Windows/MacOS/Linux)

I²C-Monitor

I²C – Mikrocontroller.net (2024)

References

Top Articles
Latest Posts
Article information

Author: Rev. Leonie Wyman

Last Updated:

Views: 5656

Rating: 4.9 / 5 (79 voted)

Reviews: 94% of readers found this page helpful

Author information

Name: Rev. Leonie Wyman

Birthday: 1993-07-01

Address: Suite 763 6272 Lang Bypass, New Xochitlport, VT 72704-3308

Phone: +22014484519944

Job: Banking Officer

Hobby: Sailing, Gaming, Basketball, Calligraphy, Mycology, Astronomy, Juggling

Introduction: My name is Rev. Leonie Wyman, I am a colorful, tasty, splendid, fair, witty, gorgeous, splendid person who loves writing and wants to share my knowledge and understanding with you.