Stap 22: Aanhangsel D: I2C / TWI Bus Basics
I2C staat voor Inter-Integrated Circuit. I2C bussen zijn ook bekend als TWI voor twee Wire Interface, omdat het gebruik maakt van slechts twee draden.http://en.wikipedia.org/wiki/I%C2%B2C
Op een bus van TWI zijn de twee draden van het signaal SDA en SCL, in principe gegevens en klok. Deze signalen zijn open afvoer (wat betekent dat de logica is ofwel hoge impedantie, of laag, het kan ooit niet hoog), maar er moet een pull-up weerstand op elk van deze signalen (we zijn met behulp van de AVR interne pull-up weerstanden). Dit is significant omdat elk apparaat op een TWI-bus de signalen laag op elk gewenst moment, rijden kan dus het signaal kan pas hoog als alle apparaten mogelijk is te hoog worden. Hierdoor apparaten detecteren wanneer de bus is bezette ("arbitrage met behulp van SDA") en ook toestaan een traag apparaat om te dicteren de snelheid van de klok, of zelfs het onderbreken van een transmissie als het langzamere apparaat bezet is (Hierdoor wordt genoemd "klok uitrekken". Deze feiten maakt de TWI-bus goed voor communicatie tussen een stelletje chips met behulp van slechts twee draden.
Iedere transactie is tussen een meester (degene die het kloksignaal rijden) en een slave-apparaat. Elke transactie met een "start voorwaarde" begint en eindigt met een "einde aandoening". Een start-voorwaarde is wanneer de bus master stations SDA lage eerst, dan rijden SCL tweede laag. Een einde voorwaarde is wanneer het model releases de TWI bus door het vrijgeven van de SCL en SDA vervolgens het vrijgeven.
Na de start-voorwaarde heeft de kapitein om te kiezen van welk apparaat om te praten met door het sturen van een 7 bit adres byte. De 8e (laatst verzonden) bit geeft aan of de kapitein wenst te lezen (1) of (0) Schrijf naar de slaaf worden aangepakt. Als de meester schrijft, zal het meer gegevens vervolgens verzenden. Als de meester leest, het zal het vrijgeven van de SDA lijn zodat de slaaf gegevens stuurt (maar het model nog steeds de klok rijden is). Wanneer aangepakt
Alle bytes worden verzonden MSB eerst (meest significante bit eerst). Elke byte wordt optioneel beëindigd door een ontvangstbevestiging/nacknowledgement. Controleer het gegevensblad apparaat om te zien wat het apparaat zullen verwachten of terug sturen. Meestal aan quote Wikipedia: "als de meester wil schrijven naar de slaaf dan herhaaldelijk verzendt een byte met het sturen van een ACK-bit slaaf. (In deze situatie, is de meester in master overbrengen modus en de slaaf in slave modus ontvangen.) Wil de meester van de slaaf leest dan zij herhaaldelijk een byte van de slaaf heeft ontvangen, beetje de meester een ACK sturen na elke byte maar de laatstgenoemde. (In deze situatie, is de meester in master modus te krijgen en de slaaf is in slave modus verzenden.) "
Meer ingewikkelde details zijn meestal specifiek voor een bepaald apparaat, en dergelijke informatie zal komen uit het gegevensblad.
Toen ik gebruik I2C/TWI met AVR microcontrollers, gebruik ik de laag niveau laag van de "Draad" bibliotheek voor Arduino. De bibliotheek van de draad is de C++ wrapper voor de lagere niveau "twi.c" en "twi.h" module, die ik slighly wijzigen en compileren in mijn eigen code (omdat ik gebruik meestal niet C++). Het zorgt voor bijna alles.
Voor sommige logic analyzer golfvormen, raadpleegt u de stap over de RTC DS1307