I²C

I²C ("i-squared cee"; zwischeneinheitlicher Stromkreis; allgemein gekennzeichnet als "Zweidrahtschnittstelle") ist ein Mehrmaster einzeln beendeter Seriencomputerbus, der von Philips erfunden ist, der verwendet wird, um Peripherie der niedrigen Geschwindigkeit einer Hauptplatine, eingebettetem System, Mobiltelefon oder anderem elektronischem Gerät beizufügen. Seit der Mitte der 1990er Jahre haben mehrere Mitbewerber (z.B, Siemens AG (später Infineon Technologies AG), NEC, Instrumente von Texas, STMicroelectronics (früher SGS-THOMSON), Motorola (später Freescale), Intersil, usw.) I²C Produkte auf dem Markt gebracht, die mit dem NXP (früher die Halbleiter-Abteilung des Philips) I²C-System völlig vereinbar sind. Bezüglich am 10. Oktober 2006 sind keine Genehmigen-Gebühren erforderlich, das I²C Protokoll durchzuführen. Jedoch sind Gebühren noch erforderlich, I²C durch NXP zugeteilte Sklavenadressen zu erhalten.

SMBus, der von Intel 1995 definiert ist, ist eine Teilmenge von I²C, der die Protokolle strenger definiert. Ein Zweck von SMBus ist, Robustheit und Zwischenfunktionsfähigkeit zu fördern. Entsprechend vereinigen moderne I²C Systeme Policen und Regeln von SMBus, manchmal sowohl I²C als auch SMBus mit der minimalen erforderlichen Wiederkonfiguration unterstützend.

Revisionen

  • 1982 wurde das I²C ursprüngliche 100-Kilohertz-System als ein einfaches inneres Bussystem geschaffen, um Kontrollelektronik mit verschiedenen Chips von Philips zu bauen.
  • 1992 hat Version 1.0 (die erste standardisierte Version) 400-Kilohertz-Schnelle Weise (Bundesstaaten) und 10 Bit hinzugefügt, Weise richtend, um Kapazität zu 1008 Knoten zu vergrößern.
  • 1998 hat Version 2.0 3.4-MHz-Hochleistungsweise (Hs) mit Macht sparenden Voraussetzungen für die elektrische Stromspannung und den Strom hinzugefügt.
  • 2000 hat Version 2.1 eine geringe Reinigung der Version 2.0 eingeführt.
  • 2007 hat Version 3.0 1-MHz-Schnelle Weise plus (Von +), und ein Gerät-ID-Mechanismus hinzugefügt.
  • 2012 hat Version 4.0 5-MHz-Ultra Fast-mode (UFm) für neuen USDA hinzugefügt, und USCL Linien mit der Logik des Stoß-Ziehens ohne ziehen Widerstände hoch, und haben zugeteilten Hersteller-ID-Tisch hinzugefügt. Das ist der neuste Standard.

Design

I²C verwendet nur zwei bidirektionale Linien des offenen Abflussrohrs, Seriendatenlinie (SDA) und Serienuhr (SCL), der mit Widerständen hochgezogen ist. Typische verwendete Stromspannungen sind +5 V oder +3.3 V, obwohl Systeme mit anderen Stromspannungen erlaubt werden.

Das I²C Bezugsdesign hat 7 Bit oder 10 Bit (je nachdem das Gerät verwendet hat) Adressraum. Allgemeine I²C Busgeschwindigkeiten sind die 100 kbit/s Standardweise und die 10 kbit/s Weise der niedrigen Geschwindigkeit, aber willkürlich niedrigen Uhr-Frequenzen wird auch erlaubt. Neue Revisionen von I²C können mehr Knoten und Lauf mit schnelleren Geschwindigkeiten (400 kbit/s Schnelle Weise, 1 Mbit/s Schnelle Weise plus oder Von + und 3.4 Mbit/s Hohe Geschwindigkeitsweise) veranstalten. Diese Geschwindigkeiten werden auf eingebetteten Systemen weiter verwendet als auf PCs. Es gibt auch andere Eigenschaften wie das 16-Bit-Wenden.

Bemerken Sie, dass die angesetzten Bit-Raten für die Transaktionen zwischen Master und Sklaven ohne das Uhr-Ausdehnen oder die andere Hardware oben sind. Allgemeine Protokoll-Kosten schließen eine Sklavenadresse und vielleicht eine Register-Adresse innerhalb des Sklavengeräts sowie der ACK/NACK Bit pro Byte ein. So ist die wirkliche Übertragungsrate von Benutzerdaten niedriger, als jene Maximalbit-Raten allein einbeziehen würden. Zum Beispiel, wenn jede Wechselwirkung mit einem Sklaven ineffizient nur 1 Byte von Daten erlaubt, übertragen zu werden, wird die Datenrate weniger als Hälfte der Maximalbit-Rate sein.

Die maximale Zahl von Knoten wird durch den Adressraum, und auch durch die Gesamtbuskapazität von 400 pF beschränkt, die praktische Nachrichtenentfernungen zu einigen Metern einschränkt.

Bezugsdesign

Das Bezugsdesign ist wie oben erwähnt ein Bus mit einer Uhr (SCL) und Daten (SDA) Linien mit dem 7-Bit-Wenden.

Der Bus hat zwei Rollen für Knoten: Master und Sklave:

  • Master-Knoten - Knoten, der die Uhr ausgibt und Sklaven anredet
  • Sklavenknoten - Knoten, der die Uhr-Linie und Adresse erhält.

Der Bus ist ein Mehrmaster-Bus, was bedeutet, dass jede Zahl von Master-Knoten da sein kann.

Zusätzlich können Master und Sklavenrollen zwischen Nachrichten geändert werden (nachdem ein HALT gesandt wird).

Es gibt vier potenzielle Verfahrensweisen für ein gegebenes Busgerät, obwohl die meisten Geräte nur eine einzelne Rolle und seine zwei Weisen verwenden:

  • Master übersendet - Master-Knoten sendet Daten einem Sklaven
  • Master erhält - Master-Knoten erhält Daten von einem Sklaven
  • Sklave übersendet - Sklavenknoten sendet Daten dem Master
  • Sklave erhält - Sklavenknoten erhält Daten vom Master

Der Master ist am Anfang im Master-Sendemodus, indem er ein Anfang-Bit sendet, das von der 7-Bit-Adresse des Sklaven gefolgt ist, mit dem es kommunizieren möchte, dem schließlich von einem einzelnen Bit-Darstellen gefolgt wird, ob es (0) dem schreiben oder (1) vom Sklaven lesen möchte.

Wenn der Sklave auf dem Bus dann besteht, wird er mit einem ACK-Bit (aktiv niedrig für den anerkannten) für diese Adresse erwidern. Der Master macht dann weiter, entweder in übersenden oder erhalten Weise (gemäß dem Lesen/Schreiben hat es gesandt gebissen), und der Sklave macht in seiner Ergänzungsweise weiter (erhalten Sie oder, übersenden Sie beziehungsweise).

Der Adresse und den Datenbytes wird bedeutendstes Bit zuerst gesandt.

Der Anfang hat gebissen wird durch einen hohen-zu-niedrig Übergang von SDA mit SCL hoch angezeigt; der Halt hat gebissen wird durch einen niedrigen-zu-hoch Übergang von SDA mit SCL hoch angezeigt.

Wenn der Master dem Sklaven dann schreiben möchte, sendet es wiederholt ein Byte mit dem Sklaven, der ein ACK-Bit sendet. (In dieser Situation ist der Master im Master-Sendemodus, und der Sklave ist im Sklaven erhalten Weise.)

Wenn der Master vom Sklaven dann lesen möchte, erhält es wiederholt ein Byte vom Sklaven, der Master, der einen ACK sendet, hat nach jedem Byte, aber dem letzten gebissen. (In dieser Situation ist der Master im Master erhalten Weise, und der Sklave ist im Sklavensendemodus.)

Der Master endet dann die Übertragung mit einem Halt hat gebissen, oder sie kann ein anderes ANFANG-Bit senden, wenn sie Kontrolle des Busses für eine andere Übertragung (eine "vereinigte Nachricht") behalten möchte.

Nachrichtenprotokolle

I²C definiert drei grundlegende Typen von Nachrichten, von denen jede mit einem ANFANG beginnt und mit einem HALT endet:

  • Einzelne Nachricht, wo ein Master Daten einem Sklaven schreibt;
  • Einzelne Nachricht, wo ein Master Daten von einem Sklaven liest;
  • Vereinigte Nachrichten, wo ein Master mindestens zwei ausgibt, lesen und/oder schreiben einem oder mehr Sklaven.

In einer vereinigten Nachricht schreibt jeder gelesen oder beginnt mit einem ANFANG und der Sklavenadresse. Nach dem ersten ANFANG werden diese auch wiederholte ANFANG-Bit genannt; wiederholten ANFANG-Bit wird durch HALT-Bit nicht vorangegangen, der ist, wie Sklaven wissen, dass die folgende Übertragung ein Teil derselben Nachricht ist.

Jeder gegebene Sklave wird nur auf besondere Nachrichten, wie definiert, durch seine Produktdokumentation antworten.

Reine I²C Systeme unterstützen willkürliche Nachrichtenstrukturen. SMBus wird auf neun jener Strukturen, wie gelesenes Wort N eingeschränkt, und schreiben Sie Wort N, einen einzelnen Sklaven einbeziehend. PMBus erweitert SMBus mit einem Gruppenprotokoll, vielfach solche SMBus Transaktionen erlaubend, in einer vereinigter Nachricht gesandt zu werden. Der endende HALT zeigt an, wenn jene gruppierten Handlungen wirken sollten. Zum Beispiel könnte eine PMBus Operation drei Macht-Bedarf wiederkonfigurieren (drei verschiedene I2C Sklavenadressen verwendend), und ihre neuen Konfigurationen würden zur gleichen Zeit wirken: Wenn sie diesen HALT erhalten.

Mit nur einigen Ausnahmen definieren weder I²C noch SMBus Nachrichtensemantik wie die Bedeutung von Datenbytes in Nachrichten. Nachrichtensemantik ist sonst produktspezifisch. Jene Ausnahmen schließen Nachrichten ein, die an die I²C allgemeine Anruf-Adresse (0x00) oder an die SMBus-Alarmsignal-Ansprechadresse gerichtet sind; und Nachrichten, die an SMBus Address Resolution Protocol (ARP) für die dynamische Adresszuteilung und Management beteiligt sind.

In der Praxis nehmen die meisten Sklaven Kontrollmodelle der Bitte/Antwort an, wo ein oder mehr Bytes im Anschluss an einen schreiben Befehl als ein Befehl oder Adresse behandelt werden. Jene Bytes bestimmen, wie nachfolgende schriftliche Bytes behandelt werden, und/oder wie der Sklave auf dem nachfolgenden antwortet, liest. Die meisten SMBus Operationen sind mit einzelnen Byte-Befehlen verbunden.

Nachrichtenübermittlungsbeispiel: 24c32 EEPROM

Ein spezifisches Beispiel ist 24c32 Typ EEPROM, der zwei Bitte-Bytes verwendet, die Adresse Hoch und Adresse Niedrig genannt werden. (Entsprechend sind diese EEPROMs durch reine SMBus-Gastgeber nicht verwendbar, die nur einzelne Byte-Befehle oder Adressen unterstützen.) Diese Bytes werden verwendet, um Bytes innerhalb der 32 kbit (4 Kilobytes) zu richten, die dadurch EEPROM unterstützt sind; dasselbe Zwei-Byte-Wenden wird auch durch größeren EEPROMs, solcher als 24c512 verwendet, die 512 kbits (64 Kilobytes) versorgen. Das Schreiben und das Lesen von Daten zu diesen EEPROMs verwenden ein einfaches Protokoll: Die Adresse wird geschrieben, und dann werden Daten bis zum Ende der Nachricht übertragen. (Dass Daten überwechseln, macht ein Teil des Protokolls auch Schwierigkeiten für SMBus, da den Datenbytes von einer Zählung nicht vorangegangen wird und mehr als 32 Bytes sofort übertragen werden können. I²C EEPROMs kleiner als 32 kbits, wie 2 kbit 24c02, werden häufig auf SMBus mit ineffizienten einzelnen Byte-Datenübertragungen verwendet.)

Um dem EEPROM zu schreiben, wird eine einzelne Nachricht verwendet. Nach dem ANFANG sendet der Master die Busadresse des Spans mit dem klaren Richtungsbit (schreiben), dann sendet die Zwei-Byte-Adresse von Daten innerhalb des EEPROM und sendet dann zu schreibende Datenbytes, an dieser Adresse anfangend, die von einem HALT gefolgt ist. Wenn sie vielfache Bytes schreiben, müssen alle Bytes in derselben 32-Byte-Seite sein. Während es beschäftigt ist, jene Bytes zum Gedächtnis zu sparen, wird der EEPROM auf weiter I²C Bitten nicht antworten. (Es ist eine andere Inkompatibilität mit SMBus: SMBus Geräte müssen immer auf ihre Busadressen antworten.)

Um das Starten an einer besonderen Adresse im EEPROM zu lesen, wird eine vereinigte Nachricht verwendet. Nach einem ANFANG schreibt der Master zuerst, dass die Busadresse des Spans mit der Richtung klar gebissen hat (schreiben) und dann die zwei Bytes der EEPROM Datenadresse. Es sendet dann einen (wiederholten) ANFANG und die Busadresse des EEPROM mit dem (gelesenen) Richtungsbohrersatz. Der EEPROM wird dann mit den Datenbytes erwidern, die an der angegebenen EEPROM Datenadresse — eine vereinigte Nachricht, zuerst ein Schreiben dann eines gelesenen beginnen. Der Master gibt einen HALT nach dem ersten Datenbyte es NACKs aber nicht ACKs aus (als es alles gelesen hat, was man braucht). Der EEPROM erhöht die Adresse, nachdem jedes Datenbyte übergewechselt hat; Mehrbyte liest kann den kompletten Inhalt des EEPROM wiederbekommen das Verwenden von demjenigen hat Nachricht verbunden.

Physische Schicht

An der physischen Schicht sind beide Linien von SCL & SDA vom Design des offenen Abflussrohrs so, fahren Sie vor Widerstände sind erforderlich.

Das Ziehen der Linie, um sich zu gründen, wird als eine logische Null betrachtet, während das Lassen der Linie schwimmen ein logisches ist.

Das wird als eine Kanalzugriffsmöglichkeit verwendet. Hohe Geschwindigkeitssysteme (und einige andere) fügen auch hinzu, dass eine aktuelle Quelle mindestens auf SCL vorfährt; das unterstützt schnellere Anstieg-Zeiten und höhere Buskapazität.

Eine wichtige Folge davon ist, dass vielfache Knoten die Linien gleichzeitig steuern können. Wenn ein Knoten die Linie niedrig steuert, wird es niedrig sein. Knoten, die versuchen, einen logischen zu übersenden (d. h. die Linie hoch schwimmen lassen) kann das sehen, und dadurch wissen, dass ein anderer Knoten zur gleichen Zeit aktiv ist.

Wenn verwendet, auf SCL wird das "das Uhr-Ausdehnen" genannt und gibt Sklaven einen Fluss-Kontrollmechanismus. Wenn verwendet, auf SDA wird das Schlichtung genannt und stellt sicher, dass es nur einen Sender auf einmal gibt.

Wenn müßig, sind beide Linien hoch. Um eine Transaktion anzufangen, wird SDA niedrig gezogen, während SCL hoch bleibt. Die Ausgabe von SDA, um hoch wieder zu schwimmen, würde ein Halt-Anschreiber sein, dem Ende einer Bustransaktion Zeichen gebend. Obwohl gesetzlich, ist das sofort nach einem Anfang normalerweise sinnlos, so soll der nächste Schritt SCL niedrig ziehen.

Abgesehen vom Anfang und den Halt-Signalen ändert sich die SDA Linie nur, während die Uhr niedrig ist; als sie übersandt haben, haben Daten gebissen besteht daraus, die Uhr-Linie hoch zu pulsieren, während man die am gewünschten Niveau unveränderliche Datenlinie hält.

Während SCL niedrig ist, setzt der Sender (am Anfang der Master) SDA auf den Sollwert, und (nachdem eine kleine Verzögerung, um sich den Wert fortpflanzen zu lassen), lässt SCL hoch schwimmen. Der Master wartet dann auf SCL, um wirklich hoch zu gehen; das wird durch das begrenzte mit dem Anstieg malige vom SCL-Signal (die RC-Zeit verzögert, die des hochziehen Widerstands und der parasitischen Kapazität des Busses unveränderlich ist), und kann durch ein Uhr-Ausdehnen eines Sklaven zusätzlich verzögert werden.

Sobald SCL hoch ist, und der Master auf eine minimale Zeit (4 μs für die Standardgeschwindigkeit I²C) wartet, um sicherzustellen, dass der Empfänger das Bit gesehen hat, es dann niedrig wieder zieht. Das vollendet Übertragung von einem Bit.

Nach allen 8 Datenbit in einer Richtung wird ein "anerkennen" Bit im anderen übersandt. Die Sender- und Empfänger-Schalter-Rollen für ein Bit und der ehemalige Empfänger übersenden einzelne 0 Bit (ACK) zurück. Wenn der Sender ein 1 Bit (NACK) statt dessen sieht, erfährt es dass:

  • (Wenn Master, der übersendet, um zu schuften), Der Sklave ist unfähig, die Daten zu akzeptieren. Kein solcher Sklave, Befehl nicht verstanden oder unfähig, mehr Daten zu akzeptieren.
  • (Wenn Sklave, der dem Master übersendet), Der Master möchte, dass die Übertragung nach diesem Datenbyte anhält.

Nach dem anerkennen Bit kann der Master eine von drei Sachen machen:

  1. Bereiten Sie sich vor, ein anderes Byte von Daten zu übertragen: Der Sender hat SDA und die Master-Pulse SCL hoch gesetzt..
  2. Senden Sie einen "Halt": Satz SDA niedrig, lassen Sie SCL hoch gehen, dann SDA hoch gehen lassen. Das veröffentlicht den I²C Bus.
  3. Senden Sie einen "Wiederholten Anfang": Satz SDA hoch, lassen Sie SCL hoch gehen, und SDA niedrig wieder ziehen. Das fängt eine neue I²C Bustransaktion an, ohne den Bus zu veröffentlichen.

Das Uhr-Ausdehnen mit SCL

Eine der bedeutenderen Eigenschaften des I²C Protokolls ist das Uhr-Ausdehnen. Ein gerichtetes Sklavengerät kann die Uhr-Linie (SCL) niedrig nach dem Empfang (oder das Senden) ein Byte halten, anzeigend, dass es noch nicht bereit ist, mehr Daten zu bearbeiten. Der Master, der mit dem Sklaven kommuniziert, kann die Übertragung des aktuellen Bit nicht beenden, aber muss warten, bis die Uhr-Linie wirklich hoch geht. Wenn der Sklave das Uhr-Ausdehnen ist, wird die Uhr-Linie noch niedrig sein (weil die Verbindungen offenes Abflussrohr sind). Dasselbe ist wahr, wenn eine Sekunde, langsamer, Master versucht, die Uhr zur gleichen Zeit zu steuern. (Wenn es mehr als einen Master gibt, werden alle außer einem von ihnen normalerweise Schlichtung verlieren.)

Der Master muss warten, bis es die Uhr-Linie beobachtet, die hoch und eine zusätzliche minimale Zeit (4 μs für normale 100 kbit/s I²C) vor dem Ziehen der Uhr niedrig wieder geht.

Obwohl der Master auch die SCL Linie niedrig für halten kann, so lange sie wünscht, wird der Begriff "Uhr-Ausdehnen" normalerweise nur gebraucht, wenn Sklaven es tun. Obwohl in der Theorie jeder Uhr-Puls gestreckt werden kann, allgemein sind es die Zwischenräume vorher, oder nachdem die Anerkennung gebissen hat, die verwendet werden. Zum Beispiel, wenn der Sklave ein Mikrokontrolleur ist, wird seine I²C-Schnittstelle die Uhr nach jedem Byte strecken, bis die Software entscheidet, ob man eine positive Anerkennung oder einen NACK sendet.

Uhr, die sich streckt, ist die einzige Zeit mit I2C, wohin der Sklave SCL steuert. Viele Sklaven brauchen Strecken nicht abzustoppen und so SCL als ausschließlich ein Eingang ohne Schaltsystem zu behandeln, um es zu steuern. Einige Master, wie diejenigen, die innerhalb von kundenspezifischem ASICs gefunden sind, können Uhr nicht unterstützen, die sich streckt; häufig werden diese Geräte als eine "Zweidrahtschnittstelle" und nicht I²C etikettiert.

Um einen minimalen Busdurchfluss zu sichern, legt SMBus Grenzen darauf, wie weit Uhren gestreckt werden können. Gastgeber und Sklaven, die an jenen Grenzen kleben, können Zugang zum Bus für mehr als eine kurze Zeit nicht blockieren, die nicht eine durch reine I²C Systeme gemachte Garantie ist.

Schlichtung mit SDA

Jeder Master kontrolliert den Bus für den Anfang und die Halt-Bit, und fängt keine Nachricht an, während ein anderer Master den Bus beschäftigt hält. Jedoch können zwei Master Übertragung in ungefähr derselben Zeit anfangen; in diesem Fall kommt Schlichtung vor. Sklavensendemodus kann auch entschieden werden, wenn ein Master vielfache Sklaven anredet, aber das ist weniger üblich. Im Gegensatz zu Protokollen (wie Ethernet), dass zufälliger Gebrauch Verzögerungen vor der Ausgabe einer Wiederholung zurücksetzt, hat I²C eine deterministische Schiedspolitik. Jeder Sender überprüft das Niveau der Datenlinie (SDA) und vergleicht es mit den Niveaus, die es erwartet; wenn sie nicht zusammenpassen, hat dieser Sender Schlichtung verloren, und fällt aus dieser Protokoll-Wechselwirkung heraus.

Wenn ein Sender SDA auf 1 setzt (das nicht Fahren eines Signals) und ein zweiter Sender es auf 0 setzt (Ziehen, um sich zu gründen), besteht das Ergebnis darin, dass die Linie niedrig ist. Der erste Sender bemerkt dann, dass das Niveau der Linie verschieden ist als erwartet, und beschließt, dass ein anderer Knoten übersendet. Der erste Knoten, um solch einen Unterschied zu bemerken, ist derjenige, der Schlichtung verliert: Es hört auf, SDA zu steuern. Wenn es ein Master ist, hört es auch auf, SCL zu steuern, und wartet auf einen HALT; dann kann es versuchen, seine komplette Nachricht neu aufzulegen. Inzwischen hat der andere Knoten keinen Unterschied zwischen den erwarteten und wirklichen Niveaus auf SDA bemerkt, und setzt deshalb Übertragung fort. Es kann so ohne Probleme tun, weil bis jetzt das Signal genau darin bestanden hat, wie es erwartet hat; kein anderer Sender hat seine Nachricht gestört.

Wenn die zwei Master eine Nachricht zwei verschiedenen Sklaven senden, "gewinnt" derjenige, die niedrigere Sklavenadresse sendend, immer Schlichtung in der Adressbühne. Da die zwei Master Nachrichten an dieselbe Sklavenadresse senden können — und sich Adressen manchmal auf vielfache Sklaven beziehen — muss Schlichtung in die Datenstufen weitermachen.

Schlichtung kommt sehr selten vor, aber ist für die richtige Mehrmaster-Unterstützung notwendig. Als mit dem Uhr-Ausdehnen unterstützen nicht alle Geräte Schlichtung. Diejenigen, die wirklich allgemein sich als das Unterstützen der "Mehrmaster"-Kommunikation etikettieren.

Im äußerst seltenen Fall, dass zwei Master gleichzeitig identische Nachrichten senden. dann werden beide die Kommunikation als erfolgreich betrachten, aber der Sklave wird nur eine Nachricht sehen. Sklaven, auf die von vielfachen Mastern zugegriffen werden kann, müssen Befehle haben, die idempotent aus diesem Grund sind.

Schlichtung in SMBus

Während I²C nur zwischen Mastern Schiedsrichter ist, verwendet SMBus Schlichtung in drei zusätzlichen Zusammenhängen, wo vielfache Sklaven dem Master antworten, und man seine Nachricht durchbringt.

  1. Obwohl begrifflich ein Bus des einzelnen Masters, ein Sklavengerät, das den "Gastgeber unterstützt, Protokoll" Taten als ein Master bekannt gibt, um die Ankündigung durchzuführen. Es greift den Bus und schreibt eine 3-Byte-Nachricht an die vorbestellte "SMBus Gastgeber" Adresse (0x08), seine Adresse und zwei Bytes von Daten passierend. Wenn zwei Sklaven versuchen, den Gastgeber zur gleichen Zeit zu benachrichtigen, wird einer von ihnen Schlichtung und Bedürfnis verlieren neu zu verhandeln.
  2. Ein alternatives Sklavenankündigungssystem verwendet das getrennte SMBALERT# Signal, um Aufmerksamkeit zu bitten. In diesem Fall führt der Gastgeber ein 1 Byte durch, das von der SMBus vorbestellten "Alarmsignal-Ansprechadresse" (0x0c) gelesen ist, der eine Art Rundfunkansprache ist. Alle Alarmieren-Sklaven erwidern mit Datenbytes, die ihre eigene Adresse enthalten. Wenn der Sklave erfolgreich seine eigene Adresse übersendet (Schlichtung gegen andere gewinnend), hört sie auf, diese Unterbrechung zu erheben. Sowohl darin als auch im vorhergehenden Fall stellt Schlichtung sicher, dass die Nachricht eines Sklaven erhalten wird, und andere wissen werden, dass sie neu verhandeln müssen.
  3. SMBus unterstützt auch ein "Adressentschlossenheitsprotokoll", worin Geräte einen universalen "16-Byte-Gerät-Personalausweis" (UDID) zurückgeben. Vielfache Geräte können antworten; derjenige mit kleinstem UDID wird Schlichtung gewinnen und anerkannt werden.

Buffering und Muxing

Wenn es viele I²C Geräte in einem System gibt, kann es ein Bedürfnis geben, Buspuffer oder multiplexers einzuschließen, um große Bussegmente in kleinere zu spalten. Das kann notwendig sein, um die Kapazität eines Bussegmentes unter dem zulässigen Wert zu behalten oder vielfachen Geräten mit derselben Adresse zu erlauben, durch einen multiplexer getrennt zu werden. Viele Typen von multiplexers und Puffern bestehen, und alle müssen die Tatsache in Betracht ziehen, dass I²C Linien angegeben werden, um bidirektional zu sein. Multiplexers kann mit analogen Schaltern durchgeführt werden, die ein Segment an einen anderen binden können. Analoge Schalter erhalten die bidirektionale Natur der Linien aufrecht, aber isolieren die Kapazität eines Segmentes von einem anderen nicht oder stellen Pufferungsfähigkeit zur Verfügung.

Puffer können verwendet werden, um Kapazität auf einem Segment von einem anderen zu isolieren und/oder I²C zu erlauben, über längere Kabel oder Spuren gesandt zu werden. Puffer für bidirektionale Linien wie I²C müssen eines von mehreren Schemas verwenden, um Klinke zu verhindern. I²C ist offenes Abflussrohr, so müssen Puffer einen niedrigen auf einer Seite steuern, wenn sie einen niedrigen auf dem anderen sehen. Eine Methode, um Klinke zu verhindern, ist für einen Puffer, um Eingang sorgfältig ausgewählt zu haben, und Produktion zielt solch, dass das Produktionsniveau seines Fahrers höher ist, als es Schwelle eingegeben hat, es davon abhaltend, sich auszulösen. Zum Beispiel kann ein Puffer eine Eingangsschwelle von 0.4V haben, für einen niedrigen, aber eine niedrige Produktionsstufe von 0.5V zu entdecken. Diese Methode verlangt, dass alle anderen Geräte auf dem Bus Schwellen haben, die vereinbar sind und häufig bedeutet, dass vielfache Puffer, die dieses Schema durchführen, der Reihe nach miteinander nicht gestellt werden können.

Wechselweise bestehen andere Typen von Puffern, die aktuelle Verstärker durchführen, oder den Staat nachgehen (d. h. welche Seite den Bus niedrig gesteuert hat), Klinke zu verhindern. Die Zustandmethode bedeutet normalerweise, dass ein unbeabsichtigter Puls während eines handoff geschaffen wird, wenn eine Seite den Bus niedrig, dann die anderen Laufwerke es niedrig, dann die ersten Seitenausgaben steuert (das ist während einer I²C Anerkennung üblich).

Timing des Diagramms

Datenübertragung wird mit dem ANFANG-Bit-(S) begonnen, wenn SDA niedrig gezogen wird, während SCL hoch bleibt. Dann setzt SDA das übertragene Bit, während SCL niedrig (blau) ist und die Daten (erhalten) probiert wird, wenn sich SCL (grün) erhebt. Wenn die Übertragung abgeschlossen ist, hat ein HALT (P) gebissen, wird durch die Ausgabe der Datenlinie gesandt, um ihm zu erlauben, hochgezogen zu werden, während SCL ständig hoch ist.

Beispiel des Bit-Schlagens das I2C Master-Protokoll

Unten ist ein Beispiel des Bit-Schlagens das I²C Protokoll als ein I²C Master. Das Beispiel wird in PseudoC geschrieben. Es illustriert alle I²C-Eigenschaften beschrieben vorher (das Uhr-Ausdehnen, die Schlichtung, fangen Sie Bit, ack/nack an/anhalten Sie)

//Mit der Hardware spezifische Unterstützungsfunktionen, die kundengerecht angefertigt werden MÜSSEN:

  1. definieren Sie I2CSPEED 100

leerer I2C_delay {flüchtige interne Nummer v; interne Nummer i; für (i=0; ich

Anwendungen

I²C ist für die Peripherie passend, wo Einfachheit und niedrig Herstellung von Kosten wichtiger sind als Geschwindigkeit. Allgemeine Anwendungen des I²C Busses sind:

  • Konfigurationsdaten von SPD EEPROMs auf SDRAM, DDR SDRAM, DDR2 SDRAM Speicherstöcke (DIMM) und andere aufgeschoberte PC-Ausschüsse lesend
  • Das Unterstützen des Systemmanagements für PCI Karten, durch einen SMBus 2.0 Verbindung.
  • Das Zugreifen auf NVRAM Chips, die Benutzereinstellungen behalten.
  • Das Zugreifen auf niedrige Geschwindigkeit DACs und ADCs.
  • Unähnlichkeit ändernd, erwägen Farbton und Farbe Einstellungen in Monitoren (Anzeigedatenkanal).
  • Das Ändern gesunden Volumens in intelligenten Sprechern.
  • Das Steuern von OLED/LCD Anzeigen, wie in einem Mobiltelefon.
  • Das Lesen von Hardware-Monitoren und diagnostischen Sensoren, wie eine Zentraleinheitsthermostat- und Fächer-Geschwindigkeit.
  • Das Lesen von Realzeituhren.
  • Sich drehend und die Macht-Versorgung von Systembestandteilen abdrehend.

Eine besondere Kraft von I²C ist, dass ein Mikrokontrolleur ein Netz von Gerät-Chips mit gerade zwei allgemeinen Zweck-Eingabe/Ausgabe-Nadeln und Software kontrollieren kann. Viele andere Bustechnologien, die in ähnlichen Anwendungen wie Peripherischer Serienschnittstelle-Bus verwendet sind, verlangen mehr Nadeln und Signale, Geräte zu verbinden.

Betriebssystembetreuung

  • In Windows von Microsoft wird I²C von den jeweiligen Gerät-Fahrern von viel verfügbarer Hardware der Industrie durchgeführt.
  • In Mac OS X gibt es ungefähr zwei Dutzende I²C Kernerweiterungen, die mit Sensoren kommunizieren, um Stromspannung, Strom, Temperatur, Bewegung und anderen physischen Status zu lesen.
  • In Linux wird I²C mit einem Gerät-Fahrer für das spezifische Gerät und einem anderen für den I²C (oder SMBus) Adapter behandelt, mit dem es verbunden wird. Mehrere hundert solche Fahrer sind ein Teil von aktuellen Ausgaben.
  • FreeBSD, NetBSD und OpenBSD stellen auch ein I²C Fachwerk, mit der Unterstützung für mehrere allgemeine Master-Kontrolleure und Sensoren zur Verfügung.
  • In Sinclair QDOS und Minerva QL Betriebssysteme wird I²C über eine Reihe von von TF Services zur Verfügung gestellten Erweiterungen unterstützt.
  • In AmigaOS kann man den i2c.resource Bestandteil für AmigaOS 4.x oder die geteilte Bibliothek i2c.library durch Wilhelm Noeker für ältere Systeme verwenden.
  • eCos unterstützt I²C für mehrere Hardware-Architekturen.
  • Entwickler von Arduino können die 'Leitungs'-Bibliothek verwenden.

Entwicklungswerkzeuge

Wenn

sie sich entwickelt oder Fehlerbeseitigungssysteme mit I²C, kann die Sichtbarkeit am Niveau von Hardware-Signalen wichtig sein.

I²C veranstalten Adapter

Es gibt mehrere Hardware-Lösungen für Gastgeber-Computer, Linux, Mac oder Windows, I²C Master und/oder Sklavenfähigkeiten führend. Die meisten von ihnen basieren auf Universal Serial Bus (USB) zu I²C Adaptern. Nicht sie alle verlangen Eigentumsfahrer oder APIs.

I²C Protokoll Analysatoren

I²C Protokoll sind Analysatoren Werkzeuge, welche Probe ein I²C Bus und die elektrischen Signale decodiert, einer Ansicht des höheren Niveaus von den Daten zur Verfügung zu stellen, die auf dem Bus übersenden werden.

Logikanalysatoren

Wenn

sie sich entwickelt und/oder Fehlerbeseitigung der I²C Bus, kann die Überprüfung von Hardware-Signalen sehr wichtig sein. Logikanalysatoren sind Werkzeuge, die sammeln, analysieren, decodieren, und Signale versorgen, so können Leute die Hochleistungswellenformen in ihrer Freizeit ansehen. Logikanalysatoren zeigen Zeitstempel jeder Signalpegel-Änderung, die helfen kann, Protokoll-Probleme zu finden. Die meisten Logikanalysatoren haben die Fähigkeit, Bussignale in Protokoll-Daten auf höchster Ebene zu decodieren und ASCII Daten zu zeigen.

Beschränkungen

Die Anweisung von Sklavenadressen ist eine Schwäche von I²C. Sieben Bit sind zu wenige, um Adresskollisionen zwischen vielen tausend von verfügbaren Geräten zu verhindern, und Hersteller widmen selten genug Nadeln, um die volle auf einem gegebenen Ausschuss verwendete Sklavenadresse zu konfigurieren. Drei Nadeln sind typisch, nur acht Wahlen der Sklavenadresse gebend. Während einige Geräte vielfache Adressbit pro Nadel, z.B, durch das Verwenden eines ADC inneren Ersatzkanals setzen können, um eine von acht durch einen Außenspannungsteiler gesetzten Reihen zu fühlen, gewöhnlich kontrolliert jede Nadel ein Adressbit. Hersteller können Nadeln zur Verfügung stellen, um einige niedrige Ordnungsbit der Adresse zu konfigurieren und willkürlich die höheren Ordnungsbit auf einen auf dem Modell gestützten Wert zu setzen. Das beschränkt die Zahl von Geräten dieses Modells, das auf demselben Bus zu einer niedrigen Zahl, normalerweise zwischen zwei und acht da sein kann.

Das richtet teilweise das Problem von Adresskollisionen zwischen verschiedenen Verkäufern.

I²C Zehn-Bit-Adressen werden noch nicht weit verwendet. und vieler Gastgeber Betriebssysteme unterstützt sie nicht.

Keiner ist der Komplex SMBus "ARP" Schema, um Adressen dynamisch zuzuteilen (anders als für PCI Karten mit der SMBus Anwesenheit, für die es erforderlich ist).

Automatische Buskonfiguration ist ein zusammenhängendes Problem. Eine gegebene Adresse kann durch mehrere verschiedene mit dem Protokoll unvereinbare Geräte in verschiedenen Systemen verwendet werden, und kaum können irgendwelche Gerät-Typen an der Durchlaufzeit entdeckt werden. Zum Beispiel kann durch 24LC02 oder 24C32 EEPROM mit dem unvereinbaren Wenden verwendet werden; oder durch einen PCF8563 RTC, der von keinem zuverlässig bemerkenswert sein kann (ohne Gerät-Staat zu ändern, dem nicht erlaubt werden könnte). Die einzigen zuverlässigen für Gastgeber verfügbaren Konfigurationsmechanismen schließen Mechanismen aus dem Band wie Tische ein, die durch das System firmware zur Verfügung gestellt sind, die die verfügbaren Geräte verzeichnen. Wieder kann dieses Problem durch ARP in SMBus Systemen besonders teilweise gerichtet werden, wenn Verkäufer und Produktbezeichner verwendet werden; aber das hat nicht wirklich Anklang gefunden. Die Umdrehung 03 Version der I²C Spezifizierung fügt einen Gerät-ID-Mechanismus hinzu, der bei diesem Schreiben Zeit nicht gehabt hat, um auch Anklang zu finden.

I²C unterstützt eine beschränkte Reihe von Geschwindigkeiten. Gastgeber, die die Mehrmegabit-Geschwindigkeiten unterstützen, sind selten. Unterstützung für Von + ist Ein-Megabit-Geschwindigkeit weit verbreiteter, da seine Elektronik einfache Varianten dessen ist, was mit niedrigeren Geschwindigkeiten verwendet wird. Viele Geräte unterstützen die 400 kbit/s Geschwindigkeit nicht (teilweise, weil SMBus sie nicht noch unterstützt). I²C Knoten, die in der Software (statt der hingebungsvollen Hardware) durchgeführt sind, können die 100 kbit/s Geschwindigkeit nicht sogar unterstützen; so ist die ganze in der Spezifizierung definierte Reihe selten verwendbar. Alle Geräte müssen mindestens die höchste verwendete Geschwindigkeit teilweise unterstützen, oder sie können ihre Gerät-Adresse unecht entdecken.

Geräten wird erlaubt, Uhr-Zyklen zu strecken, um ihren besonderen Bedürfnissen anzupassen, die Bandbreite hungern lassen, die durch schnellere Geräte erforderlich ist, und Latenz vergrößern können, wenn sie mit anderen Gerät-Adressen sprechen.

Buskapazität legt auch eine Grenze auf der Übertragungsgeschwindigkeit besonders, wenn aktuelle Quellen nicht verwendet werden, um Signalanstieg-Zeiten zu vermindern.

Weil I²C ein geteilter Bus ist, gibt es das Potenzial für jedes Gerät, um eine Schuld zu haben und den kompletten Bus zu hängen. Zum Beispiel, wenn ein Gerät den SDA oder die SCL Linie niedrig hält, hält es den Master davon ab, ANFANG oder HALT-Befehle zu senden, den Bus neu zu fassen. So ist es für Designs üblich, ein Rücksetzen-Signal einzuschließen, das eine Außenmethode zur Verfügung stellt, die Busgeräte neu zu fassen. Jedoch haben viele Geräte keine hingebungsvolle Rücksetzen-Nadel, die den Entwerfer zwingt, im Schaltsystem zu stellen, um Geräten zu erlauben, periodisch wiederholte Macht zu sein, wenn sie neu gefasst werden müssen.

Wegen dieser Grenzen (Adressenverwaltung, Buskonfiguration, potenzielle Schulden, Geschwindigkeit), haben wenige I²C Bussegmente sogar ein Dutzend Geräte. Es ist für Systeme üblich, solche mehreren Segmente zu haben. Einer könnte gewidmet werden, um mit hohen Geschwindigkeitsgeräten für das niedrige Latenz-Macht-Management zu verwenden. Ein anderer könnte verwendet werden, um einige Geräte zu kontrollieren, wo Latenz und Durchfluss nicht wichtige Probleme sind; noch könnte ein anderes Segment nur verwendet werden, um EEPROM Chips zu lesen, die Erweiterungskarten (wie der SPD Standard beschreiben, der mit SCHLUCK-Stöcken verwendet ist).

Abgeleitete Technologien

I²C ist die Basis für den ACCESS.bus, die VESA Schnittstelle von Display Data Channel (DDC), der Systemverwaltungsbus (SMBus), Macht-Verwaltungsbus (PMBus) und der Intelligente Plattform-Verwaltungsbus (IPMB, eines der Protokolle von IPMI). Diese Durchführungen haben Unterschiede in der Stromspannung und den Uhr-Frequenzreihen, und können Unterbrechungslinien haben.

TWI (Zwei Leitungsschnittstelle) oder TWSI (Zweidrahtserienschnittstelle) ist im Wesentlichen derselbe Bus, der auf verschiedenen auf dem Spansystemverarbeitern von Atmel und anderen Verkäufern durchgeführt ist. Verkäufer verwenden den Namen TWI, wenn auch I²C nicht ein eingetragenes Warenzeichen ist. Handelsmarke-Schutz besteht nur für das jeweilige Firmenzeichen (Sieh obere richtige Ecke), und Patente auf I²C haben jetzt verstrichen.

Siehe auch

  • Zusammenhängende Busse
  • Liste von Netzbussen
  • SMBus
  • PMBus
  • ACCESS.bus
  • Zusammenhängende Stecker:
  • Serial Presence Detect (SPD) - Üblich in SCHLUCK-Speichermodulen.
  • Display Data Channel (DDC) - Verwendet in Videosteckern, wie VGA, DVI, HDMI, DisplayPort.
  • UEXT Stecker.

Weiterführende Literatur

  • Das Meistern des I²C Busses; Vincent Himpe; 248 Seiten; 2011; internationale Standardbuchnummer 978-0-905705-98-9.
  • Der I2C Bus: Von der Theorie bis Praxis; Dominique Paret; 314 Seiten; 1997; internationale Standardbuchnummer 978-0-471-96268-7.

Links

Offizielle Spezifizierung

Andere Quellen


Waldhügel, Utah / Der Charleston, Utah
Impressum & Datenschutz