Comunicación I2C

Comunicación I2C

Descripción de las señales

I2C (Inter-Integrated Circuit), es un estándar de comunicación que requiere únicamente de dos líneas:

  • SCL: Marca el tiempo (los pulsos de reloj) y mantiene sincronizados todos los dispositivos conectados al bus.
  • SDA: Por la que se envían los distintos datos a intercambiar.

La metodología de comunicación es por tanto, en serie y síncrona.

Las líneas SDA y SCL son del tipo Open Drain, es decir, un estado similar al de colector abierto, pero asociadas a un transistor de efecto de campo (o FET). Se deben polarizar en estado alto (conectando a la alimentación por medio de resistencias de “pull-up”) lo que permite conectar en paralelo múltiples entradas y salidas.

Protocolo de comunicación del bus I2C

Habiendo varios dispositivos conectados al bus, es lógico que para establecer una comunicación a través de él se deba respetar un protocolo. Para ello clasificamos los dispositivos conectados al bus en dos tipos:

  • Maestros
  • Esclavos

Sólo los dispositivos maestros pueden iniciar una comunicación.

La condición inicial, de bus libre, es cuando ambas señales están en estado lógico alto. En este estado cualquier dispositivo maestro puede ocuparlo, estableciendo la condición de inicio (start). Esta condición se presenta cuando un dispositivo maestro pone en estado bajo la línea de datos (SDA), pero dejando en alto la línea de reloj (SCL).

El primer byte que se transmite luego de la condición de inicio contiene siete bits que componen la dirección del dispositivo que se desea seleccionar, y un octavo bit que corresponde a la operación que se quiere realizar con él (lectura o escritura).

I2C

Si el bit de lectura/escritura (R/W) se pone a nivel lógico bajo (escritura), el dispositivo maestro envía datos al dispositivo esclavo. Esto se mantiene mientras continúe recibiendo señales de reconocimiento (ACK), y la conexión concluye cuando se hayan transmitido todos los datos.

El dispositivo maestro puede dejar libre el bus generando una condición de parada (stop).