Introducción
En las dos secciones previas se describió el funcionamiento del puerto serie y el protocolo SPI que junto al protocolo I2C, integran los principales sistemas de comunicación entre dispositivos y Arduino. El protocolo I2C tiene relevancia, debido a que una gran cantidad de dispositivos y sensores se comunican a través de este protocolo.
I2C es el acrónimo de “Inter Integrated Circuit” y fue desarrollado por Philips en 1980 para la comunicación interna de los circuitos integrados de sus dispositivos electrónicos. Posteriormente fue adoptado progresivamente por otros fabricantes hasta convertirse en un estándar en la industria.
La comunicación I2C requiere únicamente de dos cables para su funcionamiento, uno para la señal de reloj (CLK) y otro para el envío y recepción de datos (SDA), lo cual es una ventaja respecto al protocolo SPI. Sin embargo, su funcionamiento así como la electrónica necesaria para su implementación es más compleja, sin contar que la tasa de transferencia de datos es menor sobre el bus I2C que sobre el bus SPI.
La comunicación a través del bus I2C es de tipo maestro-esclavo, sin embargo, está permitido tener más de un maestro. Para lograr la co- municación entre circuitos cada esclavo dispone de una dirección única, que se emplea para acceder a los dispositivo de forma individual. La dirección puede ser fijada por hardware o por software.
El dispositivo maestro inicia la comunicación con los esclavos, y puede mandar o recibir datos de los esclavos. Los esclavos no pueden iniciar la comunicación, ni hablar entre ellos directamente. Si existe más de un maestro, solo uno puede ser el maestro cada vez que se inicie la comunicación. No es comun tener un bus con multiples maestros ya que requiere de un gran complejidad para ser implementado.
El bus I2C es síncrono, y por tanto el maestro debe proporcionar la señal de reloj, que mantiene sincronizados a todos los dispositivos del bus. De esta forma, se elimina la necesidad de que cada dispositivo tenga su propio reloj, de tener que acordar una velocidad de transmisión y de tener que implementar mecanismos para mantener la transmisión sincronizada.
El protocolo I2C necesita resistencias de Pull-Up de las líneas CLK y SDA a Vcc. En Arduino veréis que frecuentemente no se instalan estas resistencias, ya que la librería Wire activa las resistencias internas de Pull-Up. Sin embargo las resistencias internas tienen un valor de entre 20-30kOhmnios, por lo que son unas resistencias de Pull-UP muy blandas.
Usar unas resistencias blandas implica que los flancos de subida de la señal serán menos rápidas, lo que implica que podremos usar velocidades menores y distancias de comunicación inferiores. Si queremos emplear velocidades o distancias de transmisión superiores, deberemos poner físicamente resistencias de Pull-Up de entre 1K a 4K7 ohms.
Protocolo
Para poder realizar la comunicación con solo un cable de datos, el bus I2C emplea una trama (el formato de los datos enviados) amplia. La comunicación consta de:
Figura 3. Trama del protocolo I2C
Con estos 7 bits de dirección es posible acceder a 112 dispositivos en un mismo bus (16 direcciones de las 128 direcciones posibles se reservan para usos especiales). Este incremento de los datos enviados (18bits por cada 8bits de datos) supone que, en general, la velocidad del bus I2C es reducida. La velocidad estándar de transmisión es de 100Mhz, con un modo de alta velocidad de 400Mhz. El estándar I2C define otros modos de funcionamiento, como un envío de dirección de 8,10 y 12bits, o velocidades de transmisión de 1Mbit/s, 3.4Mbit/s y 5Mbit/s.
Figura 4. Nombre de la figura
Una de las ventajas del protocolo I2C es que requiere pocos cables, además de que dispone de mecanismos para verificar que la señal haya llegado a destino. Sin embargo, una de sus deventajas es su velocidad de transmisión de datos, además de que la comunicación no es full duplex. Tambien habría que mencionar que en el protocolo I2C no existe un método para poder detectar errores en el contenido del mensaje.
Figura 5. Nombre de la figura
INTRODUCCIÓN
CIRCUITOS DIGITALES
PROTOCOLOS
PRÁCTICAS
BÁSICOS
INTERMEDIOS
AVANZADOS