robot de la enciclopedia para niños

I²C para niños

Enciclopedia para niños

El Circuito Inter-Integrado (conocido como I²C, que se pronuncia "i-cuadrado-c") es una forma especial de comunicación que se usa dentro de los aparatos electrónicos. Fue creado en 1982 por la empresa Philips Semiconductors (que ahora es NXP Semiconductors). Su principal función es permitir que diferentes partes de un circuito electrónico se "hablen" entre sí, como por ejemplo, un cerebro electrónico (un controlador) y otros componentes pequeños (circuitos periféricos).

Philips desarrolló este sistema a principios de los años 80 para controlar de forma sencilla varios chips dentro de los televisores. A partir de mediados de los años 90, otras empresas importantes como Siemens, NEC y Motorola también empezaron a usar sistemas compatibles con I²C. En 2014, ya existían más de mil tipos diferentes de chips I²C fabricados por más de 50 empresas.

Por razones de licencias, la empresa Atmel introdujo el nombre TWI (Interfaz de Dos Hilos), que hoy usan otros fabricantes. Técnicamente, TWI e I²C son lo mismo. La patente original de I²C terminó el 1 de octubre de 2006, así que ya no hay derechos de autor sobre el uso del término I²C. El nombre I²C no es una marca registrada de NXP Semiconductors; solo el logotipo está protegido.

¿Cómo surgió el I²C?

Los inicios del bus I²C

El bus I²C fue presentado por Philips en 1982. Su objetivo era que los chips dentro de aparatos como reproductores de CD y televisores pudieran comunicarse entre sí. Para esto, crearon una familia de microcontroladores llamada MAB8400, que ya incluía un controlador de bus I²C.

Evolución de las velocidades y capacidades

La primera versión oficial, la 1.0, se publicó en 1992. Esta versión mejoró la velocidad original de 100 kilobits por segundo (kbps) a un nuevo modo rápido de 400 kbps. También amplió la capacidad de conexión, permitiendo que en lugar de 112 dispositivos, se pudieran conectar hasta 1136.

En 1998, con la versión 2.0, llegó el modo de alta velocidad (Hs), que alcanzaba hasta 3.4 megabits por segundo (Mbps). Además, se redujeron los requisitos de voltaje y corriente. La versión 3.0, de 2007, añadió un modo llamado Fm+ (modo rápido mejorado) con una velocidad máxima de 1 Mbps. A diferencia del modo Hs, este usaba el mismo sistema de comunicación que los modos de 100 y 400 kbps.

En 2012, la versión V.4 introdujo un modo aún más rápido, el Ufm (modo ultrarrápido), que podía transferir datos en una sola dirección a 5 Mbps. Ese mismo año, la versión V.5 corrigió algunos errores. Finalmente, en abril de 2014, se lanzó la versión V.6, que también solucionó otras fallas.

¿Cómo funciona el sistema de bus I²C?

El I²C funciona como un sistema de "maestro y esclavo". Esto significa que siempre hay un dispositivo principal (el maestro) que inicia la comunicación y envía las órdenes. Los otros dispositivos (los esclavos) son los que responden a esas órdenes.

Es posible tener varios maestros en el mismo sistema (modo multimaestro). En este caso, los maestros pueden comunicarse entre sí, y uno de ellos puede actuar como esclavo temporalmente. Las reglas del sistema aseguran que los maestros se turnen para usar el bus de forma ordenada.

Archivo:I2C
Un ejemplo de cómo se conectan los dispositivos en un bus I²C. Hay un maestro (un microcontrolador) y tres esclavos (un conversor analógico-digital, un conversor digital-analógico y otro microcontrolador), todos conectados con resistencias especiales llamadas pull-up (Rp).

Conexiones eléctricas del I²C

El sistema I²C necesita solo dos cables para funcionar:

  • SCL (Serial Clock): Es la línea del reloj, que marca el ritmo de la comunicación.
  • SDA (Serial Data): Es la línea por donde viajan los datos.

Ambas líneas necesitan unas resistencias especiales llamadas "pull-up" que las conectan a la energía (VDD). Los dispositivos conectados a estas líneas funcionan de una manera particular que, junto con las resistencias, crea un circuito llamado "Wired-AND". Esto significa que si cualquier dispositivo baja el voltaje de la línea, toda la línea se va a un nivel bajo.

El sistema I²C usa "lógica positiva": un voltaje alto en la línea de datos significa un "1" (encendido), y un voltaje bajo significa un "0" (apagado).

Ritmo y señales del bus

El dispositivo maestro es siempre el que genera la señal de reloj (SCL). Cada modo de velocidad tiene un límite máximo de pulsos de reloj. Aunque se pueden usar relojes más lentos, algunos chips necesitan una frecuencia mínima para funcionar bien.

Aquí te mostramos las velocidades máximas de los diferentes modos:

Modo Velocidad máxima Dirección
Standard Mode (Sm) 0,1 Mbit/s Bidireccional (en ambos sentidos)
Fast Mode (Fm) 0,4 Mbit/s Bidireccional
Fast Mode Plus (Fm+) 1,0 Mbit/s Bidireccional
High Speed Mode (Hs-mode) 3,4 Mbit/s Bidireccional
Ultra Fast-mode (UFm) 5,0 Mbit/s Unidireccional (en un solo sentido)

Si un dispositivo esclavo necesita más tiempo para procesar algo, puede "estirar el reloj" (clock-stretching). Esto lo hace manteniendo la línea de reloj (SCL) en nivel bajo entre la transferencia de datos, lo que hace que el maestro espere.

Los datos (los "unos" y "ceros") solo son válidos cuando la señal de reloj está en nivel alto y el nivel de los datos no cambia. Hay excepciones para las señales de inicio, parada y reinicio.

  • La señal de inicio ocurre cuando la línea de datos (SDA) baja mientras la línea de reloj (SCL) está alta.
  • La señal de parada ocurre cuando la línea de datos (SDA) sube mientras la línea de reloj (SCL) está alta.
  • La señal de reinicio es similar a la de inicio.

Cada paquete de datos tiene 8 bits (un octeto) y un bit extra llamado ACK (Acknowledge, que significa "confirmación"). Este bit lo usa el esclavo para confirmar que recibió los datos. Si el esclavo no puede confirmar, envía un NACK (Not Acknowledge).

Direcciones de los dispositivos

Cuando el maestro quiere hablar con un esclavo específico, primero envía una dirección. En el I²C estándar, esta dirección es el primer byte que se envía. Los primeros 7 bits de ese byte son la dirección del esclavo, y el octavo bit (llamado R/W-Bit) le dice al esclavo si debe recibir datos del maestro (si el bit es bajo) o enviar datos al maestro (si el bit es alto).

Esto significa que el I²C estándar puede usar 112 direcciones diferentes para conectar dispositivos. Algunos chips I²C tienen una dirección preestablecida por el fabricante, y los últimos tres bits de esa dirección se pueden ajustar con unos pines de control. Así, se pueden conectar hasta 8 chips idénticos en el mismo bus.

Debido a que las 7 bits de dirección a veces no eran suficientes, se añadió un sistema de direccionamiento de 10 bits. Este es compatible con el sistema de 7 bits y permite conectar hasta 1136 dispositivos en un solo bus.

Cómo se transfieren los datos

Una comunicación I²C comienza con una señal de inicio enviada por el maestro, seguida de la dirección del esclavo. El esclavo que reconoce su dirección envía un bit ACK para confirmar que está listo.

Luego, dependiendo de si el maestro quiere escribir o leer datos, se envían o reciben los bytes. Cuando se escriben datos, el esclavo envía el ACK. Cuando se leen datos, el maestro envía el ACK. El último byte que se lee es confirmado por el maestro con un NACK, para indicar que la transmisión ha terminado.

La transmisión finaliza con una señal de parada. Otra opción es enviar una señal de reinicio para empezar una nueva transmisión sin necesidad de una señal de parada previa. Todos los bytes se transfieren empezando por el bit más significativo (el de mayor valor).

Para el modo de alta velocidad, el maestro envía un código especial en modo estándar o rápido antes de aumentar la frecuencia de comunicación.

¿Para qué se usa el I²C?

Archivo:Medion MD8910 - STMicroelectronics 24C08-8003
Una memoria EEPROM de 8 Kbit de STMicroelectronics (modelo 24C08) que usa el bus I²C para comunicarse.

Una de las grandes ventajas del I²C es que un microcontrolador puede controlar muchos chips usando solo dos pines de entrada/salida (I/O) y un programa muy sencillo. Este tipo de buses se crearon porque el costo de un chip y de la placa de circuito depende mucho del tamaño del chip y del número de pines. Un chip grande con muchos pines ocupa más espacio, tiene más conexiones que podrían fallar y aumenta los costos de fabricación.

Aunque el I²C es más lento que otros sistemas de comunicación más nuevos, es muy útil y económico para dispositivos que no necesitan ser muy rápidos. Se usa a menudo para enviar datos de control y configuración, como:

  • Controlar el volumen de un aparato.
  • Conversores de señales analógicas a digitales o viceversa, que no necesitan ser muy rápidos.
  • Relojes que marcan la hora en tiempo real.
  • Pequeñas memorias.
  • Interruptores y selectores de señales.
  • Muchos sensores electrónicos que incluyen un conversor analógico-digital también usan I²C.

Una característica interesante es que se pueden añadir o quitar microcontroladores del bus mientras está funcionando (esto se llama "Hot-Plugging").

El I²C también es la base de otros sistemas como ACCESS.bus y los monitores de interfaz VESA (DDC, Display Data Channel). El SMBus, usado por Intel para la comunicación de componentes en la placa base de las computadoras, es muy parecido al I²C. La mayoría de los chips son compatibles con ambos.

En el pasado, el protocolo I²C fue muy importante en las tarjetas con chip. Por ejemplo, la tarjeta sanitaria usada en Alemania hasta finales de 2014 era una tarjeta I²C. Esto significa que dentro del chip dorado había una memoria I²C-EEPROM simple, que podía ser leída y escrita por el lector de tarjetas usando el protocolo I²C.

¿Es el I²C un sistema estable?

El protocolo I²C es sencillo, pero también puede ser sensible a las interferencias. Por eso, se usa principalmente en lugares donde no hay mucho ruido eléctrico, problemas de compatibilidad electromagnética o problemas de contacto en los conectores. Tampoco es adecuado para conectar dispositivos a grandes distancias.

Sin embargo, se puede mejorar el bus usando cables especiales que permiten mayores niveles de corriente o voltaje. Esto aumenta la distancia a la que puede funcionar y su resistencia al ruido. También se puede hacer más resistente al ruido si se implementa sobre una capa física de bus CAN, que usa señales diferenciales.

Las irregularidades en las señales SDA y SCL pueden causar que los datos se transmitan de forma incorrecta. A veces, estas irregularidades son difíciles de detectar, especialmente si ocurren en la señal SDA. Solo con perturbaciones muy cortas y rápidas, el sistema puede hacerse más estable si se procesan las señales.

Un problema importante del I²C es que no tiene un "tiempo de espera" incorporado. Esto puede hacer que los microcontroladores se queden "colgados". Si un esclavo mantiene la línea de datos en "0" y el maestro se reinicia, esa línea de datos puede quedarse en "0" indefinidamente. Esto bloquea todo el bus I²C y a todos los microcontroladores conectados. A menos que el esclavo tenga su propio sistema de reinicio, la única forma de solucionar este bloqueo es generando pulsos de reloj manualmente o apagando y encendiendo la energía.

Otras formas de comunicación

  • SMBus
  • SPI

Ver también

Véase también

Kids robot.svg En inglés: I²C Facts for Kids

kids search engine
I²C para Niños. Enciclopedia Kiddle.