Paso 22: Apéndice D: I2C / TWI Bus básico
I2C está parado para el circuito de Inter-Integrated. Buses I2C son también conocido como TWI para interfaz de dos hilos, ya que utiliza sólo dos hilos.http://en.wikipedia.org/wiki/I%C2%B2C
En un autobús de TWI, los dos cables de señal son SDA y SCL, básicamente datos y reloj. Estas señales están abiertas de drenaje (es decir, su nivel de lógica es cualquier impedancia alta o baja, no puede nunca ser alta), pero debe haber una resistencia de pull-up en cada una de estas señales (estamos usando resistencias de pull-up interna de AVR). Esto es importante porque cualquier dispositivo en un bus de TWI puede conducir las señales de baja en cualquier momento, por lo que la señal sólo puede ser alta cuando todos los dispositivos permiten que sea alta. Esto permite que los dispositivos detectar cuando el bus está ocupado ("arbitraje utilizando SDA") y también permitir que un dispositivo lento dictar la velocidad del reloj o incluso pausar una transmisión si el dispositivo más lento está demasiado ocupado (esto se llama «estiramiento del reloj». Estos hechos hace que el autobús de TWI buena para la comunicación entre un montón de virutas con sólo dos cables.
Cada transacción está entre un maestro (que conduce la señal de reloj) y un dispositivo esclavo. Cada transacción se inicia con una "condición de inicio" y termina con un "estado final". Una condición de inicio es cuando las unidades maestro del bus SDA baja primero, después conducir SCL baja en segundo lugar. Una condición de final es cuando el maestro lanza el autobús TWI por liberación de SCL y SDA soltando.
Después de la condición de inicio, el maestro tiene que elegir que dispositivo para hablar mediante el envío de un byte de la dirección de 7 bits. 8 (último enviado) bit indica si el maestro desea leer (1) o escribir (0) al esclavo que se aborda. Si el maestro está escribiendo, enviará más información. Si el maestro está leyendo, liberará la línea SDA, por lo que el esclavo envía los datos (pero el maestro aún está impulsando el reloj). Cuando se dirigió a
Los bytes se envían MSB primero (más significativo bit primero). Cada byte se termina opcionalmente por un reconocimiento/nacknowledgement. Revise la hoja de datos del dispositivo para ver lo que espera o devolverá el dispositivo. Generalmente, por citar a Wikipedia: "si el maestro desea escribir al esclavo entonces repetidamente envía un byte con el esclavo envía un bit de ACK. (En esta situación, el maestro es en principal modo de transmisión y el esclavo es esclavo recepción.) Si el maestro desea leer desde el esclavo entonces repetidamente recibe un byte desde el esclavo, el maestro envía un ACK poco después de cada byte, pero la última de ellas. (En esta situación, el maestro es en master mode y el esclavo en esclavo transmite modo.) "
Más detalles son generalmente específicos para un dispositivo determinado, y dicha información provendrá de su hoja de datos.
Cuando utilizar I2C/TWI con Microcontroladores AVR, uso la capa de bajo nivel de la biblioteca de "Alambre" para Arduino. La biblioteca de alambre es la envoltura de C++ para el nivel "twi.c" y "twi.h" módulo inferior, que modificar ligeramente y compilar en mi código (ya que normalmente no utilizo C++). Se encarga de casi todo.
Para algunas formas de onda de analizador de la lógica, vea por favor el paso sobre el RTC DS1307