Der I2C -Bus
IIC = Inter-IC-Bus
Der I2C -Bus ist eines von vielen standardisierten Verfahren in der Computertechnik um verschiedene Einheiten mittels Bussystem zu verbinden. Der I2C-Bus ist zur Verbindung von ICs auf einer oder mehreren Platinen gedacht.
Es handelt sich hierbei um einen seriellen Bus, der dadurch eine niedrigere Transferleistung als parallele Busse hat, aber es sich Einsparungen bei den Leitungskosten ergeben. Zusätzlich ist die Gefahr des Übersprechens reduziert und es gibt Mechanismen zur Fehlererkennung und -Korrektur. ( Referat S. Abid-Aziz, T. Barth
Da also serielle Busse relativ störsicher sind kann man sie auch für große Leitungslängen einsetzen, so zum Beispiel auch in "rauer" Umgebung wie der Flugzeugbau. Wenn nun ein serieller Bus für solche Zwecke, sprich Leitungslängen, verwendet wird spricht man von Feldbussen ( Referat G. Haidvogl, M. Brandtner, S. Fischer
Der I2C -Bus hat im Gegensatz zu den allgemein erwähnten Eigenschaften von seriellen Bussen keine gute Störsicherheit und ist somit auch nicht für große Leitungslängen geeignet. Er ist vielmehr für die Verbindung von Mikroprozessoren und anderen ICs entwickelt worden, deshalb auch Inter-IC-Bus. Diese Entwicklung von Philips, der eher ein Rückschritt zu sein scheint, diente dem Einsatz in den vielen Konsumgeräten von Philips die fast ausnahmslos mit Mikroprozessoren ausgestattet waren und noch immer sind. Aus den zuvor erwähnten Gründen ist für diesen Einsatz in der Mikroelektronik ein schnellerer, paralleler Bus aufgrund seiner Platzbeanspruchung viel zu ungeeignet. Der gesamte Fertigungsaufwand wäre viel zu hoch, wenn solche Systeme mit einem parallelen Bus realisiert wären, allein die Bohrungen und Lötpunkte würden noch mehr unnötigen Platz einnehmen. Philips, und einzelne andere Hersteller, haben für den I2C -Bus eine schwer überschaubare Anzahl an ICs für dieses Interface entwickelt.
Der I2C -Bus bietet mit seinen zwei Leitungen eine maximale Transferleistung von 10kByte/sec an, was nicht gerade berauschend aber ausreichend ist.
Aufgrund der geringen Leitungszahl und Transferrate bezeichnet man den I2C -Bus auch als "kleinen" Bus, der jedoch Eigenschaften hat die ihm einen Vorsprung gegenüber "großen" Bussen verschaffen. ICs die hier Anwendung finden besitzen in der Regel Input-Filter, die kleine Spikes auf den Signalleitungen unschädlich machen. Auch können Wartezyklen bzw. -Anforderungen durch langsamere Bausteine erzwungen werden, welche parallele Systeme nicht verarbeiten könnten.
Der herausragendste Vorteil ist sicherlich die integrierte Multimasterfähigkeit mit Kollisionsvermeidung. Dadurch können mehrere Mikrocontroller dasselbe Leitungsnetz verwenden, man spricht dann von Mehrprozessorsystemen.
Im Konzept des I2C -Busses sind ICs der Logikfamilien NMOS, CMOS und bipolar eingeplant. Die erwähnten zwei Leitungen sind SCL (Serial Clock) und SDA (Serial Data). Jedes Gerät bzw. Teilnehmer besitzt eine einzigartige Adresse, wobei es jedoch egal ist welcher Art (Display, Mikrocontroller, Speicher, .) dieses ist. Jeder Teilnehmer kann Sende- und Empfangsfunktionen durchführen, abhängig vom Zweck wird natürlich nicht jede Komponente beide Funktionen ausüben. Ganz entscheidend ist beim I2C -Bus die Unterscheidung zwischen Master und Slave. Als Master wird jenes Gerät bezeichnet, welches einen Datentransfer und dessen Richtung initiiert und dazu die entsprechenden Clock-Impulse auf der SCL -Leitung generiert. Ein Gerät das vom Master angesprochen bzw. adressiert wurde, nimmt am Transfer teil und wird somit als Slave bezeichnet. Das Praktische bei solchen Anwendungen ist, dass im Prinzip jedes Gerät Master- und Slave-Funktionen übernehmen kann. Die Zuteilung dieser Funktionen erfolgt dynamisch, was jedoch nicht bedeutet dass jedes Gerät auch Master "sein will".
Die eingangs erwähnte Kollisionsvermeidung kommt erst zum Einsatz wenn der I2C -Bus tatsächlich als Multimasterbus verwendet wird, denn es kann immer nur ein Master aktiv sein und so den Bus belegen. Deshalb muss jeder Master vor Sendebeginn überprüfen ob der Bus nicht besetzt ist, sollten zwei Master genau zeitgleich zu senden beginnen erfüllen zwei Verfahren namens Clock-Synchronisation und Arbitrierung ihren Zweck. Ersteres synchronisiert die beiden Clockzeiten und während das zweite dem Master der zuerst eine "1" als Datum ausgibt die Buszuteilung wegnimmt. Deshalb wird hier der 0-Pegel als der "dominante Pegel" bezeichnet.
Bei der zur Anwendung kommenden Wired-AND-Schaltung arbeiten beide Leitungen bidirektional und werden, wie man aus der Skizze erkennt, durch einen Pullup-Transistor auf "High" gehalten. Somit liegt hier ein High-Pegel an wenn der Bus frei sein sollte. Aller angeschlossenen Geräte müssen Open-Drain- oder Open-Collector-Ausgänge haben. Nur mit diesen lässt sich die entsprechende Leitung auf "Low" ziehen.
Noch mal zur Erinnerung, die Datentransferrate beträgt normalerweise 100kBits/sec (Takt = 100kHz); jedoch kann man auch im Fast-Modus (400kBits/sec » 400kHz) arbeiten, wenn man das Protokoll erweitert.
Die Anzahl der Teilnehmer wird nur durch die maximale Buskapazität von 400pF eingeschränkt.
Die Übertragung von Wortdaten basiert auf dem Bitlevel, die in der Bitlevel-Schicht des I2C-Bus-Protokolls erledigt wird. Einzelbits werden grundsätzlich durch einen Pegel auf der Clock-Leitung codiert. SCL ist ähnlich wie bei einem Schieberegister ein serieller Takt. Die sogenannte Start- und Stoppbedingung werden durch spezielle Pegel/Flanken-Kombinationen beider Leitungen codiert. Somit wird Beginn und Ende eines Datentransfers auf diesen beiden Leitungen signalisiert, im Gegensatz zu vielen anderen seriellen Bussystemen wo Extraleitungen verwendet werden.
Solange auf der SCL eine "1" liegt darf sich SDA nicht ändern, erst bei einer "0" kann sich SDA ändern.
Sollte sich bei SCL "1" eine fallende Flanke auf SDA einstellen, so wird dies als Startbedingung interpretiert. Ab diesem Zeitpunkt ist der Bus belegt (BUSY). Nur derjenige Master der die Startbedingung erzeugt hat, darf jetzt zu jedem beliebigen Zeitpunkt die Stoppbedingung, bei SCL "1" eine positive Flanke auf SDA, setzen. Danach wird der Bus als leer (IDLE) bezeichnet.
Ein Sonderfall ist die Repeated Start Condition, wobei statt einer Stoppbedingung eine neue Startbedingung durch denselben Master generiert wird. Diese Methode spart etwas an Zeit ein.
Jeder Datentransfer dauert mindestens 8 Bits (1 Byte) lang, dazu kommt am Ende 1 Bytes das "Acknowledge Bit". Nach jeder Übertragung hat wie schon erwähnt der Master die Möglichkeit den Transfer zu beenden. 8 Bits erfordern logischerweise auch 8 Clock-Impulse auf der SCL-Leitung. Zuerst sendet der Master das MSB (Most Significant Bit), er erzeugt auch den Takt, und zum Schluss das LSB (Least Significant Bit). Über das Acknowledge Bit will der Slave dem Master mitteilen, sofern diese "1" ist, dass er an der Übertragung nicht mehr teilnehmen will oder kann, wenn zum Beispiel ein Speicherbaustein "voll" ist. Zu beachten ist jedoch das das Acknowledge Bit kein Stoppbit sein soll, also muss die SCL auf "0" sein, und dann kann erst das Acknowledge Bit auf der SDA entsprechend verändert werden. Das heißt es soll sich wie ein einfaches Datenbit verhalten.
Die Clock-Synchronisation von verschiedenen Takten ist notwendig da jeder aktive Master den Takt autonom generiert und durch die Wired-AND-Schaltung auch mehrere Master an einem Bus angeschlossen sein können. Durch das Abwarten eines Masters bis die SCL-Leitung "1" wird, setzt sich der langsamste Takt durch. Ab dem Zeitpunkt wo auch das letzte Gerät eine "1" auf SCL gelegt hat, werden alle gleichzeitig auf "0" beginnen, womit der Takt synchronisiert ist.
Arbitrierung ist ein günstiger Weg Fehler zu vermeiden, sollten tatsächlich zwei oder mehr Master genau zeitgleich zu senden beginnen wollen. Beim I2C -Bus kommt das CSMA/CA (Carrier Sense, Multiple Access, Collision Avoidance) -Verfahren zum Einsatz. Bei diesem Verfahren schaut ein Master der Senden will, ob der Bus belegt ist (Carrier Sense). Wenn ein anderer Master senden will und hierzu eine "1" ausgibt, aber eine "0" zurückbekommt wird ihm signalisiert dass der Bus belegt ist und bricht die Übertragung ab. Da dies auf den sendenden Master keinen Einfluss hat wird dies Mulitple Access with Collision Avoidance genannt.
Im Gegensatz hierzu steht CSMA/CD (. Collision Detection) wobei bei dem zuvor beschriebenen Fall beide Master den Bus freigeben müssen.
Zur eindeutigen Unterscheidung der differenzierten Geräte ist eine gute Adressierung notwendig. Es erhält jedes Gerät eine einzigartige Adresse, ausgenommen sind Geräte die nur Masterfunktionen erfüllen. Das ursprüngliche Konzept von Philips sah nur maximal 128 verschiedene Geräte (Adressen), was 7-Bit-Adressierung entspricht, vor. Es gibt jedoch ICs die auch einen 10-Bit-Rahmen adressieren können. Der Rahmen von 128 Geräten wird jedoch noch weiter eingeschränkt, da einige Adressen für spezielle Zwecke vordefiniert sind.
Um bei der 7-Bit-Adressierung zu bleiben, muss wie beschrieben ein transaktionswilliger Master den Bus unter seine Kontrolle bringen. Das erste Byte enthält die 7-Bit-Adresse des gewünschten Slaves und ein einzelnes Bit das über die Übertragungsrichtung entscheidet (0 = Schreiben, 1 = Lesen).
Die Kommunikation über den Bus beginnt damit, dass ein Master, der die Zuteilung des Busses erhalten hat, wenn er an einen Slave senden will, nach dem Startbit das Adressierungsbyte (7-Bit) plus Richtungsbit (0). Nach beliebig vielen transferierten Bytes und jeweiliger Rücksendung des Acknowledge Bits vom Slave beendet der Master die Übertragung mit dem Stoppbit oder mit einem Repeated Start.
Will der Master vom Slave etwas erhalten, so beginnt dies genauso wie zuvor, außer das logischerweise das Richtungsbit "1" ist. Der Slave sendet noch ein Acknowledge Bit für den Empfang des Adressbits und wechselt dann in den Sendemodus, während der Master hingegen in den Empfangsmodus umschaltet und absofort die Acknowledge Bits generiert.
Haupt | Fügen Sie Referat | Kontakt | Impressum | Nutzungsbedingungen