OK, zu allererst solltest du dir die I²C-Spezifikation von Philips antun, zu finden hier ganz unten auf der Seite:
http://www.semiconductors.philips.c.....acts/
Da steht eigentlich das komplette Protokoll drin.
Kurz zusammengefasst sieht eine Übertragung so aus.
Dein Master generiert ein Start, indem er SCL auf High legt und auf der SDA vin High auf Low zieht. (Stop-Kondition sieht ähnlich aus, nur wird da SDA von Low auf High gezogen.)
Danach sendet der Master (der übrigens immer den Clock generiert, egal ob der Master etwas sendet oder auf Daten vom Slaver wartet, nachdem er die Anforderung zum senden geschickt hat.) die Adresse des entsprechenden Slaves. Damit der Master merkt, dass das angesprochene Device was gemerkt hat, lässt der Master SDA auf High und beim nächsten Clock-Puls (nach dem letzten gesendeten Bit) zieht der Slave SDA auf Low. Das ist das Acknowledge.
Danach werden meistens die Daten gesendet (oder aber eine weitere Adresse), und zwar immer 8 Bit nacheinander, dann wartet der Master wieder auf ein Acknowledge vom Slave.
Wurden alle Daten übertragen, wird eine Stop-Kondition generiert und der Bus ist wieder frei.
Du solltest dir das Datenblatt des Slaves zu Gemüte führen. Da steht drin, was der Baustein als Daten erwartet und wie die zu senden sind.
Das ist so im Groben und Ganzen das Protokoll.
Ansonsten findest du hier:
http://www.specs.de/users/danni/appl/hard/i2c/
http://www.programmersheaven.com/zone5/cat27/
und an anderen Stellen Beispielcode, je nachdem, ob du in C oder ASM programmierst.
Hoffe, das hilft schonmal.
Edit: Ich vergass: Auf der Homepage von Atmel findest du einige App-Notes, die auf I²C eingehen. Lass dich nicht von deren Namen (TWI) für I²C abschrecken. Ist das Gleiche.
_________________
Wie immer gilt: Erst googeln, dann fragen!
(Für ICQ bitte erst Anfrage per PM, da alles andere nicht angenommen wird.)
[ Diese Nachricht wurde geändert von: ERDI-Soft am 13 Dez 2004 16:22 ]