USD

Por qué el Bus de circuitos inter-integrados (I2C) hace que la conexión de los CI sea tan fácil y cómo utilizarlo

Por Art Pini

Colaboración de Editores de Digi-Key de América del Norte

La comunicación y el control entre los circuitos integrados mediante un bus paralelo en una placa de circuito impreso (placa pc) no son prácticos. Incluso un procesador de 8 bits requeriría 16 líneas solo para datos y muchas más para un bus de direcciones. Es aún más problemático si varios CI necesitan estar en un bus de comunicaciones compartido. No hay suficiente espacio para todos esos rastreos de placas de PC. La solución es enlazar los CI usando un bus de comunicaciones en serie como el bus de Circuito Inter-Integrado (I2C), un bus serial de dos cables que resuelve este problema.

Este artículo describirá los orígenes del bus I2C y cómo funciona para proporcionar un eficiente enlace en serie entre los circuitos integrados. A continuación, se discutirá cómo se implementa físicamente el bus I2C, la estructura del protocolo y las aplicaciones comunes de este omnipresente bus de comunicaciones. Las interfaces I2C de ejemplo y las soluciones de Microchip Technology se utilizarán con fines de demostración. El artículo también discutirá las similitudes y diferencias de I2C con el Bus de getión de aistemas (SMBus).

¿Qué es el bus I2C?

El bus I2C fue desarrollado por Phillips Semiconductors, ahora NXP Semiconductors, a principios de la década de 1980 como un simple bus bidireccional de dos hilos para comunicaciones eficientes y control de circuitos integrados en una placa de PC común. La primera especificación se completó en 1992 y desde entonces se ha convertido en un estándar de facto ofrecido en componentes de más de 50 fabricantes de circuitos integrados. Este gran despliegue permite un enfoque de sistemas de diseño en el que los CI pueden incluirse fácilmente en la estructura del bus I2C sin necesidad de un diseño personalizado. Otros autobuses especializados como el SMBus y el Bus de administración de energía (PMBus) junto con varios otros comparten la arquitectura básica.

El bus I2C puede enlazar múltiples CI y sensores porque es un bus direccionable; un campo de dirección de siete o diez bits permite que los mensajes sean enviados a un dispositivo seleccionado por el dispositivo maestro. El I2C original tenía una velocidad máxima de reloj de 100 kilohercios (kHz), pero con el paso de los años los modos de funcionamiento de mayor velocidad han llevado ese límite a 3.4 megahercios (MHz).

El bus I2C usa dos cables designados como línea de datos en serie, o SDA, y línea de reloj en serie, o SCL. SDA y SCL son líneas bidireccionales abiertas de drenaje/colector y están conectadas al bus de energía positiva a través de una fuente de corriente o una resistencia de arrastre. Se pueden conectar múltiples dispositivos al bus, con el número máximo limitado por la capacidad del bus. Un dispositivo maestro controla el bus y cada dispositivo del bus tiene una dirección única. El dispositivo maestro puede transmitir y recibir datos a través del bus (Figura 1). I2C admite la operación multimaestro con detección de colisiones y arbitraje para evitar que dos o más dispositivos maestros inicien transferencias de datos al mismo tiempo. Sin embargo, este artículo se centrará en las configuraciones maestras individuales.

Esquema de una placa de demostración de Microchip Technology (haga clic para ampliar)Figura 1: Esquema de una placa de demostración de Microchip Technology que implementa el bus I2C y lo conecta a cinco dispositivos diferentes. El dispositivo maestro está fuera de la placa a través del conector P1. Las líneas SCL y SDA están marcadas en verde y las dos resistencias de arranque están marcadas en azul. (Fuente de la imagen: Microchip Technology)

La figura 1 muestra el esquema de una placa de demostración de la tecnología del microchip PKSERIAL-I2C1 I2C. Esta placa implementa el bus I2C utilizando cinco dispositivos diferentes, incluyendo una EEPROM, un sensor de temperatura, un convertidor analógico-digital (ADC) de 12 bits, un convertidor digital-analógico (DAC) de 10 bits y un convertidor serie-paralelo de 8 bits. El dispositivo maestro no está en la placa y se conecta a través del conector P1. Las líneas de bus SDA y SCL están marcadas en verde y las resistencias de arranque están marcadas en azul.

Los niveles de SDA y SCL son, generalmente, un porcentaje fijo del voltaje de suministro positivo, usualmente denotado como VDD. Los niveles de referencia se fijan en el 70% y el 30% del VDDpara el "1" (alto) y el "0" (bajo) lógico, respectivamente.

Las señales de reloj se producen en ráfagas con un reloj por cada bit de datos transferido. Los datos de la línea SDA deben ser válidos mientras el reloj esté en alto. Los datos solo pueden cambiarse cuando el reloj está bajo.

Desde el punto de vista de un diseñador, los nuevos proyectos se simplifican porque las interfaces de I2C se integran en los CI y no hay necesidad de diseñar una interfaz. Cada dispositivo simplemente se conecta directamente al bus. Los CI pueden ser añadidos o quitados del bus sin afectar a los otros circuitos (asumiendo que el número de CI en total no empuja el límite de capacitancia). El simple bus de dos cables minimiza el número de pines en cada CI y el número de carreras en la placa de la PC.

El protocolo I2C

El bus está orientado a 8 bits, comunicándose en bytes. Como se ha mencionado, la máxima velocidad de reloj original era de 100 kHz en lo que ahora se conoce como Modo Estándar. El bus ahora admite 400 kilobits por segundo (kbits/s) en modo Rápido, hasta 1 Mega bit por segundo (Mbit/s) en modo Rápido Plus, y hasta 3.4 Mbits/s en modo de Alta Velocidad (Hs-Mode).

El protocolo I2C se ilustra mejor observando una transferencia típica en el bus (Figura 2). La fuente de la imagen de la pantalla es un osciloscopio Teledyne LeCroy con un disparador de datos en serie de baja velocidad y la opción de decodificación WS4KHD-EMB TD. Esta opción de osciloscopio puede disparar y decodificar hasta 19 interfaces de datos en serie de baja velocidad, incluyendo I2C.

Imagen de un paquete de datos típico de I2C (haga clic para ampliar)Figura 2: Un típico paquete de datos I2C que consiste en un bit de inicio, un campo de dirección, un bit de reconocimiento, 17 bytes de datos cada uno con su propio bit de ACK, y finalmente un bit de parada. Cada campo está identificado por una superposición de colores. El rastro superior (amarillo) es el paquete completo de SDA, debajo está el reloj SCL (rojo). El tercer y cuarto trazo son vistas ampliadas horizontalmente de ambas señales. (Fuente de la imagen: Digi-Key Electronics)

El osciloscopio puede dispararse en eventos seriales específicos, incluyendo inicio, parada, reconocimiento de ausencia (ACK), dirección, datos, dirección más datos, longitud de cuadro y transferencia de datos de EEPROM. Los elementos del protocolo de la norma de datos en serie se identifican mediante una superposición codificada por colores. Cada campo de protocolo se decodifica en binario, hexadecimal o ASCII con el código seleccionado que se muestra en la superposición.

La señal SDA aparece como un trazo amarillo mientras que la señal SCL se muestra como un trazo rojo. El cuadro de superposición gris indica las funciones de inicio y parada. La superposición de bloques rojos marca los datos de dirección, el campo azul es el de los datos de paquete y las cajas superpuestas de color oliva marcan las funciones de ACK.

El rastro superior muestra el paquete completo de SDA de I2C de principio a fin. Directamente debajo de ella está la correspondiente señal SCL. El tercer rastro hacia abajo es un rastro de zoom expandido en el tiempo de la señal SDA, y debajo de eso está la señal SCL sincrónica.

Tanto la línea SDA como la SCL descansan en el estado alto entre las transferencias cuando el bus está libre. La señal SCL consiste en ráfagas de nueve pulsos a la velocidad del reloj, uno por cada bit de datos que se transfiere y uno adicional por el bit ACK.

Todas las transacciones del bus comienzan con un bit de inicio generado por el maestro, indicado en el trazado del SDA con zoom como una caja de superposición de color gris. El inicio se indica cuando el maestro tira de la línea SDA baja mientras que la línea SCL está en estado alto. Una vez que el maestro emite el bit de arranque el bus se considera ocupado. El maestro puede emitir múltiples inicios, situación en la que los inicios subsiguientes suelen denominarse reinicios.

Todas las transferencias de datos tienen una longitud de 8 bits (un byte), cada una seguida de un bit de ACK. Los bits se transmiten primero con el bit más significativo (MSB). Cada transferencia de bytes debe ser reconocida. Si el dispositivo secundario está ocupado y no puede recibir o transmitir datos, puede tirar de la línea SCL a baja altura. Esto fuerza al dispositivo maestro a un estado de espera hasta que el dispositivo secundario libere la línea SCL.

El bit ACK se forma después de que el dispositivo de transmisión libera la línea SDA antes del noveno pulso del reloj de reconocimiento. Si el dispositivo receptor ha recibido el byte de datos, tira de la línea SDA hacia abajo. En la vista de zoom de la SDA de la figura 2, hay un estrecho pico justo antes del noveno pulso del reloj, que es la línea de SDA que se libera para volver al estado alto. El receptor tira de la línea SDA generando la señal ACK, que está marcada simbólicamente por la superposición de la caja color oliva. Si el receptor no tira de la línea SDA hacia abajo antes del noveno pulso del reloj, es una respuesta de no reconocimiento (NACK). Si se produce un NACK, el maestro puede generar una señal de parada y abortar la transferencia o emitir un inicio repetido para intentarlo de nuevo.

Inmediatamente después de la condición de inicio, se emite una dirección secundaria. Esto se indica con una caja de superposición de color rojo ladrillo. Hay dos formatos de dirección posibles; 7 ó 10 bits, siendo la dirección de 7 bits la más común. Los primeros 7 bits después del inicio representan los datos de la dirección. El bit indica la dirección de los datos, ya sea de lectura o de escritura. Una escritura se indica cuando la línea SDA está en un estado bajo, mientras que tener la línea SDA alta en este momento indica una operación de lectura. El direccionamiento de 10 bits utiliza los dos primeros bytes después de la condición de inicio. I2C reserva varias direcciones para funciones internas. Los datos de la dirección decodificada aparecen en el cuadro de la dirección en formato binario, hexadecimal o ASCII.

Los campos superpuestos en azul marcan las transferencias de datos. Cada una tiene ocho bits de largo y va seguida de una respuesta de ACK/NACK. El número de bytes de datos en un paquete I2C es ilimitado, pero la figura 2 contiene 17. Los datos decodificados, como la decodificación de la dirección, aparecen en el cuadro de superposición de datos. El flujo de datos va seguido de un bit de parada generado por el maestro al final de la transferencia de datos, indicado por un cuadro superpuesto gris en el trazado de datos superior. El bit de parada es una transición de bajo a alto en la línea SDA mientras que la línea SCL está en el estado alto. Después de la señal de parada, el bus vuelve a estar libre.

En el cuadro que figura en la parte inferior de la pantalla se resume toda la información sobre el paquete de datos correspondiente, incluido el tiempo transcurrido desde la activación, la longitud de la dirección, la dirección, la operación de lectura o escritura, la longitud del paquete y un resumen del contenido de los datos. El número de entradas en la placa coincide con el número de paquetes de I2C adquiridos por el telescopio, que en este caso es solo una línea.

Si se produce un error de protocolo, se indica mediante un cuadro rojo brillante detrás de los otros cuadros superpuestos de protocolo.

Dispositivos I2C

Una de las mayores ventajas del bus I2C es el gran número de dispositivos que lo han incorporado a su diseño. La placa de demostración de Microchip Technologies proporciona algunos ejemplos de los tipos de CI que incorporan el bus I2C o uno de sus derivados como el SMBus.

El PIC16F677 de Microchip Technology es un microcontrolador de 8 bits que se utiliza en muchos diseños incrustados. Implementa un Puerto serial síncrono que puede ser controlado para comunicarse ya sea con la interfaz periférica serial (SPI) o I2C a otros controladores o dispositivos periféricos (Figura 3).

Diagrama del microcontrolador PIC16F677 de 8 bits de Microchip TechnologyFigura 3: El PIC16F677 de Microchip Technology es un microcontrolador de 8 bits que incluye un Puerto serial síncrono (resaltado en naranja) capaz de ser programado como un bus SPI o I2C. (Fuente de la imagen: Microchip Technology)

Este microcontrolador admite tanto el modo maestro como el esclavo de I2C usando un direccionamiento de 7 o 10 bits. Utiliza el pin SCK/SCL para la señal del reloj SCL de I2C y el pin SDI/SDA para la señal de datos.

Estos dos pines se conectan a las líneas SCL y SDA del bus I2C para permitir la comunicación con otros dispositivos. Una conexión común es con un sensor basado en I2C como el sensor de temperatura de dos cables en serie TCN75AVOA713 de Microchip Technology (Figura 4).

Diagrama del sensor de temperatura TCN75A de Microchip TechnologyFigura 4: El sensor de temperatura TCN75A de Microchip Technology se conecta directamente al microcontrolador PIC16F677 para comunicar los datos de temperatura. (Fuente de la imagen: Microchip Technology)

Al tener capacidad de comunicación en serie, este sensor de temperatura ha aumentado su funcionalidad. Sus registros internos programables por el usuario pueden utilizarse para establecer la resolución de la medición de la temperatura, el modo de apagado de ahorro de energía, e incluso establecer la salida de alerta para indicar cuando el rango de temperatura excede los límites preestablecidos.

También hay una serie de dispositivos que decodifican el flujo de datos en serie de I2C y lo descomponen en datos paralelos. Considere el expansor de E/S de 2 hilos de la serie MIC74YQS-TR y el controlador de ventilador de Microchip Technology (Figura 5).

Diagrama del expansor de E/S MIC74YQS-TR de Microchip TechnologyFigura 5: El expansor de E/S MIC74YQS-TR de Microchip Technology convierte el flujo de datos en serie en ocho líneas de E/S paralelas independientes. (Fuente de la imagen: Microchip Technology)

Este CI es un expansor de E/S totalmente programable que proporciona ocho líneas de E/S independientes. Las líneas de E/S pueden ser programadas individualmente como una entrada o una salida. La figura 5 muestra al MIC74YQS-TR manejando ocho LED bajo el control del bus serial. Esto es similar al uso del MCO23008 en la placa de demostración de I2C en la Figura 1. El MIC74YQS-TR, junto con un regulador de potencia, también puede implementar un control de la velocidad del motor del ventilador usando sus cuatro bits más significativos.

SMBus e I2C

La entrada en serie del expansor de E/S está diseñada para el SMBus, pero también es compatible con el bus I2C. La especificación del SMBus se basa en el I2C y fue definida por Intel y Duracell en 1994. La principal diferencia es que los niveles lógicos de I2C de modo estándar son relativos a VDD y los de SMBus son fijos. En la mayoría de los casos, con VDD entre 3 y 5 voltios, la experiencia ha demostrado que esto no es un problema.

Otra diferencia es que el SMBus está limitado a velocidades de reloj de 100 kHz o menos, mientras que el I2C tiene varios modos que soportan velocidades de reloj más altas. Cuando se trata de la compatibilidad con el bus, esto limita la máxima velocidad de reloj a 100 kHz o el modo de reloj estándar de I2C.

Así que, excepto en situaciones muy especiales, el SMBus y el I2C son compatibles.

Conclusión

El bus I2C y sus derivados están omnipresentes en cientos de CI de todo tipo, lo que facilita su conexión en diseños y aplicaciones multifacéticos. Acoplar la señal mixta y los sensores analógicos amplía el alcance de los sistemas integrados basados en microcontroladores. Todo esto a través de una simple interfaz digital en serie de dos cables.

Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de Digi-Key Electronics o de las políticas oficiales de Digi-Key Electronics.

Acerca de este autor

Art Pini

Arthur (Art) Pini es un autor que contribuye Digi-Key Electronics. Tiene una Licenciatura en Ingeniería eléctrica de la City College of New York, y un Máster en ingeniería eléctrica de la City University of New York. Tiene más de 50 años de experiencia en electrónica y ha trabajado desempeñando funciones de ingeniería y marketing en Teledyne LeCroy, Summation, Wavetek y Nicolet Scientific. Le interesa la tecnología de medición y tiene experiencia con los osciloscopios, analizadores de espectro, generadores de formas de onda arbitrarias, digitalizadores y medidores de potencia.

Acerca de este editor

Editores de Digi-Key de América del Norte