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