I2C (Inter-Integrated Circuit)

Two Wire Interface, o interface de 2 hilo

Phillips, propuso una norma de comunicación digital, entre los diferentes componentes de una sistema electrónico.

Una norma que especificaba la velocidad, niveles de tensión, y el protocolo a seguir para conseguir esa comunicación y la hizo abierta.

Esa norma se llamó Inter Integrated Circuits bus, o IIC, y pronto se convirtió en un estándar de facto en la industria. 

  • Protocolo de dos hilos de control, uno para transmitir los datos, SDA y otro, el reloj asíncrono que indica cuando leer los datos SCL. Mas GND y 5V (cuando se requiera).
  • Cada dispositivo conectado al bus I2C y cada uno tiene su dirección exclusiva, de 7 bits, (Asi que, en teoría, podemos conectar 27 = 128, dispositivos).
  • Uno de estos componentes, debe actuar como master, es decir controla el reloj.
  • No se requiere una velocidad de reloj estricta, ya que es el master quien controla el Clock.
  • Es multimaster, el master puede cambiar, pero solo uno puede estar activo a la vez, y proporciona un protocolo de arbitraje y detección de colisiones. 

La idea es que todos los componentes se conecten en paralelo a las dos líneas del Bus, SDA y SCL. 

En cada momento solo puede haber un master, en este caso, nuestro Duino y los demás se configuran como esclavos.

  • Puede haber más de un master. La norma propone un sistema de arbitraje, para transferir el control de uno a otro, pero en un instante dado, solo uno puede ser el master.
  • Las resistencias de Pullup conectadas a SDA y SCL. Son imperativas, ya que el bus es activo bajo (Esto es, la señal activa es un 0, no un 1.)
  • Cuando se vaya a conectar algo al busI2C, es imprescindible que leas el manual para saber si los pullup los tienes que poner tú, o vienen puestos en el componente.

 

Arduino lo soporta de fábrica con una librería estándar, que utiliza dos de los pines analógicos para las funciones SDA (Datos) y SCL (Clock).

  • En el Arduino UNO, los pines I2C están en los pines analógicos A4 (SDA) y A5 (SCL).
  • En el Arduino Mega y DUE, son el 20 (SDA) y en el 21(SCL).

La librería I2C, en Arduino se llama Wire, y gestiona el protocolo de comunicaciones completo.

Dispositivos Usuales

Adaptador I2C LCD

Reloj I2C

Expansor Puertos PCF8574P