Qué es el bus I2C y cómo funciona en la electrónica

El bus I2C (Inter-Integrated Circuit) es un protocolo de comunicación serie sincrónico que permite la transferencia de datos entre un dispositivo maestro y múltiples dispositivos esclavos utilizando únicamente dos líneas eléctricas. Fue desarrollado por Philips Semiconductors en 1982 para optimizar el espacio en placas de circuito.
Este estándar se ha consolidado como la solución preferida para conectar periféricos de baja velocidad, como sensores y memorias EEPROM, debido a su simplicidad de cableado y eficiencia en el direccionamiento de componentes.
{inAds}
Arquitectura física y líneas de transmisión
El funcionamiento del I2C se basa en un esquema de bus compartido. A diferencia de otros protocolos, no requiere un cable dedicado para cada dispositivo conectado. Utiliza dos líneas conductoras principales que deben estar conectadas a la alimentación mediante resistencias de pull-up.
- SDA (Serial Data): Es la línea bidireccional por la que viajan los datos. El maestro y el esclavo pueden escribir en ella según la fase de la comunicación.
- SCL (Serial Clock): Es la línea de reloj. El dispositivo maestro genera la señal de sincronización para que todos los nodos sepan exactamente cuándo leer o escribir un bit.
El uso de colectores abiertos significa que las líneas solo pueden ser llevadas a estado bajo (0 lógico) por los dispositivos. Cuando nadie tira de la línea hacia abajo, las resistencias de pull-up mantienen el voltaje en estado alto (1 lógico).
El mecanismo de direccionamiento y control
Para evitar colisiones de datos en un bus donde conviven múltiples componentes, el I2C implementa un sistema de direccionamiento único. Cada dispositivo esclavo posee una dirección binaria predefinida por el fabricante o configurable mediante pines físicos.
El proceso de comunicación sigue una secuencia lógica rigurosa:
- Condición de Inicio (Start): El maestro tira de la línea SDA a nivel bajo mientras SCL sigue en alto.
- Trama de Dirección: El maestro envía una dirección de 7 bits (o 10 bits en versiones extendidas) seguida de un bit que indica si quiere leer o escribir.
- Acuse de Recibo (ACK/NACK): El esclavo reconocido responde tirando de la línea SDA a bajo, confirmando que está listo.
- Transferencia de Datos: Se envían paquetes de 8 bits (1 byte). Tras cada byte, el receptor debe enviar un bit de confirmación.
- Condición de Parada (Stop): El maestro libera la línea SDA mientras SCL está en alto, liberando el bus para otras comunicaciones.
Modos de velocidad y rendimiento técnico
El bus I2C no es un protocolo de alta velocidad, pero es suficiente para la mayoría de las tareas de control y monitorización. Existen diferentes perfiles de velocidad según la carga capacitiva del bus y la necesidad de la aplicación.
| Modo de velocidad | Frecuencia de reloj (SCL) | Uso habitual |
|---|---|---|
| Standard-mode | Hasta 100 kHz | Sensores básicos, RTC |
| Fast-mode | Hasta 400 kHz | Pantallas OLED, memorias |
| Fast-mode Plus | Hasta 1 MHz | Dispositivos de alta tasa de datos |
| High-speed mode | Hasta 3.4 MHz | Aplicaciones industriales específicas |
La velocidad máxima depende en gran medida del valor de las resistencias de pull-up. Resistencias muy altas pueden deformar la señal cuadrada del reloj, provocando errores de lectura.
I2C frente a SPI: diferencias en la gestión de datos
El competidor más directo del I2C es el bus SPI (Serial Peripheral Interface). Mientras que el I2C busca minimizar el uso de pines, el SPI prioriza la velocidad de transferencia.
La diferencia fundamental reside en la selección de dispositivos. El I2C utiliza direcciones lógicas internas, lo que permite añadir esclavos sin añadir cables nuevos. El SPI requiere una línea física llamada Chip Select (CS) para cada esclavo, lo que incrementa la complejidad del cableado a medida que crece el sistema.
En términos de flujo, el SPI es full-duplex, pudiendo enviar y recibir datos simultáneamente. El I2C es half-duplex, ya que la línea SDA solo puede transportar datos en un sentido a la vez. Sin embargo, el I2C ofrece una ventaja crítica: el sistema de confirmación (ACK), que permite al maestro saber si el esclavo ha recibido la información correctamente, algo que el SPI no posee de forma nativa.
Limitaciones y consideraciones de implementación
Aunque es versátil, el bus I2C presenta restricciones físicas. La capacitancia del bus limita la longitud de los cables. Si el cable es demasiado largo, la capacitancia aumenta y las líneas no pueden regresar al estado alto con la rapidez necesaria para mantener la frecuencia de reloj.
En entornos con mucho ruido electromagnético, el I2C puede volverse inestable. Para mitigar esto, se suelen emplear expansores de bus o convertidores de niveles lógicos si el maestro opera a 5V y el esclavo a 3.3V, evitando así daños permanentes en los circuitos integrados.
Dudas comunes sobre la implementación del bus
¿Cuál es la finalidad del bus I2C?
Su objetivo es simplificar la interconexión de circuitos integrados en una misma placa. Permite que un microcontrolador gestione decenas de periféricos utilizando solo dos pines de E/S, reduciendo la complejidad del diseño de hardware y el tamaño del PCB.
¿Cómo se utiliza un bus I2C?
Se implementa conectando las líneas SDA y SCL de todos los dispositivos en paralelo y añadiendo resistencias de pull-up a la tensión de alimentación. Mediante software, el maestro envía el código de dirección del esclavo deseado para iniciar el intercambio de bytes de datos.
¿Qué es un bus de comunicación I2C?
Es un protocolo de comunicación serie sincrónico basado en un sistema de maestro-esclavo. Se caracteriza por utilizar un reloj común para coordinar la transferencia de datos binarios entre componentes electrónicos, permitiendo la coexistencia de múltiples dispositivos en un único canal físico.