Desarrollado por Philips en la década de 1980, I2C (también escrito I2C) se ha convertido en uno de los protocolos de comunicación en serie más utilizados en la electrónica. I2C facilita la comunicación entre componentes electrónicos o circuitos integrados, ya sea que los componentes estén en la misma PCB o conectados con un cable.
¿Qué es el protocolo I2C?
I2C es un protocolo de comunicación en serie que solo requiere dos líneas de señal. Fue diseñado para la comunicación entre chips en una placa de circuito impreso (PCB). I2C se diseñó originalmente para comunicaciones de 100 Kbps. Sin embargo, se han desarrollado modos de transmisión de datos más rápidos a lo largo de los años para alcanzar velocidades de hasta 3.4 Mbit.
La característica clave de I2C es la capacidad de tener muchos componentes en un solo bus de comunicación con solo dos cables, lo que hace que I2C sea perfecto para aplicaciones simples. El protocolo I2C se ha establecido como un estándar oficial, lo que permite la compatibilidad con versiones anteriores entre las implementaciones de I2C.
Señales I2C
El protocolo I2C utiliza dos líneas de señal bidireccionales para comunicarse con los dispositivos en el bus de comunicación. Las dos señales utilizadas son:
- Línea de datos en serie (SDL)
- Reloj de datos en serie (SDC)
La razón por la que I2C puede usar solo dos señales para comunicarse con varios periféricos está en cómo se maneja la comunicación a lo largo del bus. Cada comunicación I2C comienza con una dirección de 7 bits (o 10 bits) que indica la dirección del periférico.
Esto permite que varios dispositivos en el bus I2C desempeñen el papel del dispositivo principal según lo dicten las necesidades del sistema. Para evitar colisiones en la comunicación, el protocolo I2C incluye funciones de arbitraje y detección de colisiones, que permiten una comunicación fluida a lo largo del bus.
Beneficios de I2C
Como protocolo de comunicación, I2C tiene las siguientes ventajas:
- Tasas de transmisión de datos flexibles.
- Comunicación a mayor distancia que SPI.
- Cada dispositivo en el bus es direccionable de forma independiente.
- Los dispositivos tienen una relación primaria/secundaria simple.
- Solo requiere dos líneas de señal.
- Es capaz de manejar múltiples comunicaciones primarias proporcionando arbitraje y detección de colisión de comunicaciones.
Limitaciones de I2C
Con todas estas ventajas, I2C también tiene algunas limitaciones que pueden necesitar ser diseñadas. Las limitaciones más importantes de I2C incluyen:
- Dado que solo hay 7 bits (o 10 bits) disponibles para el direccionamiento de dispositivos, los dispositivos en el mismo bus pueden compartir la misma dirección. Algunos dispositivos pueden configurar los últimos bits de la dirección, pero esto impone una limitación de dispositivos en el mismo bus.
- Solo están disponibles unas pocas velocidades de comunicación limitadas y muchos dispositivos no admiten la transmisión a velocidades más altas. Se requiere soporte parcial para cada velocidad en el bus para evitar que los dispositivos más lentos capturen transmisiones parciales que pueden resultar en fallas operativas.
- La naturaleza compartida del bus I2C puede provocar que todo el bus se cuelgue cuando un solo dispositivo del bus deja de funcionar. Ciclar la alimentación del bus puede restaurar el funcionamiento adecuado.
- Dado que los dispositivos establecen su propia velocidad de comunicación, los dispositivos operativos más lentos pueden retrasar el funcionamiento de los dispositivos más rápidos.
- I2C consume más energía que otros buses de comunicación en serie debido a la topología de drenaje abierto de las líneas de comunicación.
- Las limitaciones del bus I2C normalmente limitan la cantidad de dispositivos en un bus a alrededor de una docena.
Aplicaciones I2C
I2C es una excelente opción para aplicaciones que requieren una implementación simple y de bajo costo en lugar de alta velocidad. Por ejemplo, los usos comunes del protocolo de comunicación I2C incluyen:
- Leyendo ciertos circuitos integrados de memoria.
- Acceso a DAC y ADC.
- Transmisión y control de acciones dirigidas por el usuario.
- Lectura de sensores de hardware.
- Comunicándose con varios microcontroladores.