• Keine Ergebnisse gefunden

I2C-Bus Allgemein

Im Dokument DIPLOMARBEIT. Flight-Info-System (Seite 134-138)

Der I2C-Bus wurde in den frühen 80er-Jahren von Philips entwickelt. Er wird benutzt, um eine einfache Kommunikation zwischen ICs, die sich auf derselben Platine befinden, zu ermöglichen. Der Name I2C kommt von „Inter IC“, was so viel bedeutet wie

„(Kommunikation) zwischen ICs“. Ein großer Vorteil dieses Bussystems ist, dass es, wie zum Beispiel auch UART, nur 2 Leitungen benötigt. Im Gegensatz zu UART arbeitet I2C jedoch synchron und ist damit nicht an normierte Übertragungsraten gebunden.

Zur Übertragung der Daten benötigt der Bus nur 2 Leitungen, sie werden SDA und SCL genannt. An SCL gibt der Master (steuernder IC) den Takt für die Übertragung an. Es ist auch möglich mehrere Master an einem Bus zu betreiben. SDA wird zum Übertragen der eigentlichen Daten benutzt. Die Leitungen müssen mit einem Pull-Up Widerstand versehen werden, dadurch müssen die angeschlossenen Bausteine die Leitungen nur noch auf GND ziehen oder freigeben.

1.1 Geschichte

2

Das ursprüngliche System wurde von Philips in den frühen 1980er Jahren entwickelt, um verschiedene Chips in Fernsehgeräten einfach steuern zu können. Seit Mitte der 1990er Jahre wird I²C auch von einigen Wettbewerbern zur Bezeichnung von Philips-kompatiblen I²C-Systemen verwendet, darunter Siemens AG (später Infineon Technologies AG), NEC, STMicroelectronics, Motorola (später Freescale), Intersil, etc.

Atmel führte aus lizenzrechtlichen Gründen die heute auch von einigen anderen Herstellern verwendete Bezeichnung TWI (Two-Wire-Interface) ein, technisch sind TWI und I²C identisch.

Allerdings ist das ursprüngliche Patent am 1. Oktober 2006 ausgelaufen, so dass keine Lizenzgebühren für die Benutzung von I²C mehr anfallen. I²C ist auch kein eingetragenes

Markenzeichen von NXP Semiconductors, Markenschutz besteht lediglich für das Logo.

1vgl. http://www.i2c-bus.org (2013)

Abb. 1: I2C Logo

Grundlagenarbeit FLINOS 2012/2013

1992 wurde die erste Spezifikation 1.0 veröffentlicht. Diese ergänzte den ursprünglichen Standard mit 100 kbit/s um einen neuen „schnellen“ Modus mit 400 kbit/s und erweiterte den Adressraum um einen 10-Bit-Modus, so dass statt der ursprünglichen 112 Knoten seitdem bis zu 1136 unterstützt werden. Mit Version 2.0 aus dem Jahr 1998 kam ein

„Hochgeschwindigkeitsmodus“ mit max. 3,4 Mbit/s dazu, wobei die Strom- und

Spannungsanforderungen in diesem Modus gesenkt wurden. Version 2.1 von 2000 enthält nur kleinere Aktualisierungen gegenüber 2.0. Aktuell gültig ist Version 3.0 von 2007, die einen „extra schnellen“ Modus („Fast-mode Plus“) mit bis zu 1 Mbit/s einführt, der im Gegensatz zum „Hochgeschwindigkeitsmodus“ dasselbe Protokoll verwendet wie die 100-kbit/s- und 400-100-kbit/s-Modi.

1.2 Hardware

3

Abb. 2: Ersatzschaltbild I2C-Bus

Die Grafik zeigt eine schematische Darstellung eines I2C-Busses mit 2 angeschlossenen ICs.

Die Widerstände Rs repräsentieren die Leitungswiderstände des Busses. Die parasitären Kapazitäten Cp und Cc sind unerwünscht und sollten layouttechnisch so gering wie möglich gehalten werden, wenn eine schnelle Übertragung gewünscht ist. Weiters sind auch noch Pull-Up Widerstände an SCL und SDA angeschlossen, damit die Übertragung funktionieren kann. Im Normalfall verwendet man Pull-Up Widerstände zwischen 1k und 100k. Da sie in Verbindung mit den Leitungskapazitäten einen Tiefpass bilden, muss darauf geachtet werden, sie nicht zu hoch zu dimensionieren, da die langsamen Anstiegszeiten besonders bei hohen Datenraten zu Problemen führen.

Grundlagenarbeit FLINOS 2012/2013

1.3 Übertragung

4

Abb. 3: I2C Übertragung AVR (FIG 6 UM10204)

Vor dem Betrieb des Busses liegt, wegen der Pull-Ups an SDA und SCL, ein HIGH-Pegel an.

Vor der Übertragung muss dann der Master eine START-Bedingung ausführen. Dies geschieht indem SDA und erst danach SCL auf LOW gezogen werden. Danach beginnt der Master einen Takt an SCL anzulegen. Wenn der Slave zeitlich nicht mehr mit kommt, hat er die Möglichkeit, SCL aktiv auf LOW zu halten. Dies veranlasst den Master zu warten, bis die Leitung wieder freigegeben wird. Nun werden die Datenbits beginnend mit dem MSB über die SDA-Leitung übertragen. Dabei muss darauf geachtet werden, dass sich SDA nur während den LOW Perioden der Clock-Leitung ändern darf. Nach den 8 übertragenen Datenbits folgt ein Acknowledge-Bit (ACK). Hierbei wird die SDA Leitung vom Master

freigegeben und der Slave muss sie zur Bestätigung auf LOW ziehen. Beim Lesen muss der Master ACK selbst anlegen, um weitere Daten vom Slave anzufordern. Nach der

Übertragung wird der Bus mit einer STOP-Bedingung wieder freigegeben. Dafür muss zuerst SCL und erst danach SDA auf HIGH gesetzt werden. Wenn man stattdessen sofort wieder eine START-Bedingung schickt (Repeated START), wird der Bus nicht freigegeben und es können keine anderen Master den Bus beanspruchen. Bei einem Fehler hat man mit der STOP-Bedingung auch die Möglichkeit die Übertragung jederzeit abzubrechen.

1.4 Adressierung

Da an einem Bus mehrere Slaves angeschlossen sind, muss mithilfe einer Adressierung zuerst ein Slave zur Kommunikation ausgewählt werden. Beim I2C-Bus handelt es sich um 7-bit Adressen, die bei gekauften ICs manchmal fix vorgegeben sind. Oft ist es aber auch möglich einzelne Bits mithilfe von Pins am Baustein zu setzen.

Von den 128 möglichen Adressen können 112 verwendet werden, die anderen sind für spezielle Zwecke reserviert. Dies reicht für die meisten kleineren Anwendung völlig aus. Es wird nur problematisch, wenn man 2 ICs mit fixen Adressen vom gleichen Typ verwendet.

Grundlagenarbeit FLINOS 2012/2013

1.5 Protokoll

5

Abb. 4: I2C Protokoll AVR (FIG 13 UM10204)

Nach senden der Start Condition muss zuerst die Adresse des anzusteuernden ICs

übertragen werden (7 Bit). Anschließend wird noch ein Bit gesendet, es teilt dem Slave mit, ob vom Master gelesen oder geschrieben wird. Wenn dieses Bit HIGH ist, wird geschrieben, ansonsten gelesen. Am Ende dieser Sequenz meldet sich der angesprochene Slave mit einem Acknowledge-Bit. Nun ist der Slave bereit, und es kann mit der Übertragung der Daten begonnen werden.

1.5.1 Schreiben

Beim Schreiben von Daten werden, nachdem sich der Slave gemeldet hat, nacheinander Datenbytes übertragen. Am Ende jedes Bytes antwortet der Slave mit ACK, sofern kein Fehler aufgetreten ist. Danach hat er die Möglichkeit die Clock-Leitung aktiv auf LOW zu ziehen, bis er bereit für das nächste Bit ist.

1.5.2 Lesen

Zum Lesen gibt der Master SDA frei und gibt wie immer den Takt vor. Der Slave überträgt Byteweise die Daten und der Master antwortet mit ACK, solange er weitere Daten will. Da vor dem Lesen meist eine Speicheradresse des ICs vorgegeben werden muss, ist es wichtig, dass im Betrieb mit mehreren Mastern keine STOP-Condition dazwischen ist (repeated START). Andernfalls könnte ein anderer Master die Speicheradresse dazwischen ändern.

Grundlagenarbeit FLINOS 2012/2013

Im Dokument DIPLOMARBEIT. Flight-Info-System (Seite 134-138)