Desarrollado por Philips en la década de 1980, I2C se ha convertido en uno de los protocolos de comunicación en serie más comunes en electrónica. I2C permite la comunicación entre componentes electrónicos o IC a IC, ya sea que los componentes estén en la misma PCB o conectados a través de un cable. La característica clave de I2C es la capacidad de tener una gran cantidad de componentes en un solo bus de comunicación con solo dos cables, lo que hace que I2C sea perfecto para aplicaciones que requieren simplicidad y bajo costo en comparación con la velocidad.
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 PCB. I2C se diseñó originalmente para una comunicación de 100 kbps, pero a lo largo de los años se han desarrollado modos de transmisión de datos más rápidos para alcanzar velocidades de hasta 3,4 Mbit. El protocolo I2C se ha establecido como un estándar oficial, que proporciona una buena compatibilidad entre las implementaciones de I2C y una buena compatibilidad con versiones anteriores.
Señales I2C
El protocolo I2C utiliza solo dos líneas de señal bidireccionales para comunicarse con todos los dispositivos en el bus I2C. Las dos señales utilizadas son:
- Línea de datos 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 es la forma en que 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 llama a la dirección del periférico y el resto de la comunicación está destinada a recibir la comunicación. Esto permite que múltiples dispositivos en el bus I2C desempeñen el papel del dispositivo maestro según lo requieran las necesidades del sistema. Para evitar colisiones de comunicación, el protocolo I2C incluye capacidades de detección de colisiones y arbitraje que permiten una comunicación fluida a lo largo del bus.
Ventajas y limitaciones
Como protocolo de comunicación, I2C tiene muchas ventajas que hacen que sea una buena opción para muchas aplicaciones de diseño integrado. I2C trae las siguientes ventajas:
- I2C solo requiere dos líneas de señal
- Tasas flexibles de transmisión de datos
- Cada dispositivo en el bus es direccionable independientemente
- Los dispositivos tienen una simple relación maestro / esclavo
- I2C es capaz de manejar múltiples comunicaciones maestras al proporcionar arbitraje y detección de colisiones de comunicación
- Comunicación a mayor distancia que SPI
Con todas estas ventajas, I2C también tiene algunas limitaciones que deben ser diseñadas alrededor. Las limitaciones más importantes de I2C incluyen:
- Dado que solo están disponibles 7 bits (o 10 bits) para direccionamiento de dispositivos, los dispositivos en el mismo bus pueden compartir la misma dirección. Algunos dispositivos son capaces de configurar los últimos bits de la dirección, pero esto todavía impone una limitación de dispositivos en el mismo bus.
- Solo unas pocas velocidades de comunicación limitadas están disponibles 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 atrapen transmisiones parciales que resulten en fallas operacionales.
- La naturaleza compartida del bus I2C puede hacer que todo el bus se cuelgue cuando un solo dispositivo en el bus deja de funcionar. Se puede usar el ciclo de alimentación del bus para reiniciar el bus y restaurar el funcionamiento correcto.
- Dado que los dispositivos pueden establecer su velocidad de comunicación, los dispositivos operativos más lentos pueden retrasar el funcionamiento de los dispositivos de velocidad más rápida.
- I2C consume más energía que otros buses de comunicación serie debido a la topología de drenaje abierto de las líneas de comunicación.
- Las limitaciones del bus I2C generalmente limitan la cantidad de dispositivos en un bus a alrededor de una docena de dispositivos.
Aplicaciones
El bus I2C es una excelente opción para aplicaciones que requieren un bajo costo y una implementación simple en lugar de una alta velocidad. Por ejemplo, leer ciertos IC de memoria, acceder a DAC y ADC, leer sensores, transmitir y controlar acciones dirigidas por el usuario, leer sensores de hardware y comunicarse con varios microcontroladores son usos comunes del protocolo de comunicación I2C.