I²C

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 26 de septiembre de 2020; las comprobaciones requieren 14 ediciones .

I²C ( IIC , ruso ah-square-si o ah-tu-si , ing.  Inter-Integrated Circuit ) es un bus asimétrico en serie para la comunicación entre circuitos integrados dentro de dispositivos electrónicos . Utiliza dos líneas de comunicación bidireccionales (SDA y SCL), utilizadas para conectar componentes periféricos de baja velocidad a procesadores y microcontroladores (por ejemplo, en placas base , sistemas integrados , teléfonos móviles ).

Historia

Desarrollado por Philips Semiconductors a principios de la década de 1980 como un simple bus de intercomunicación de 8 bits para la electrónica de control de edificios. Fue diseñado para una frecuencia de 100 kHz.

Estandarizado en 1992, en la primera versión se agregó un modo de alta velocidad de 400 kbps ( Fast-mode , Fm ) al modo estándar de 100 kbps ; debido al direccionamiento de 10 bits, es posible conectar más de 1000 dispositivos a un bus, cuyo número está limitado por la capacidad máxima permitida del bus: 400 pF .

La versión 2.0 (1998) introduce un modo de alta velocidad de 3,4 Mbit/s ( Hs ) y requisitos de baja potencia. Ligeramente mejorado en la versión 2.1 (2000).

La versión 3 (2007) agregó el modo de 1 Mbps ( Fast-mode plus , Fm+ ) y el mecanismo de identificación del dispositivo ( ID ).

La versión 4 (2012) introdujo un modo unidireccional de 5 Mbps ( Ultra Fast-mode , UFm ) usando lógica push-pull sin resistencias pull-up , se agregó una tabla de identificadores preestablecidos.

La versión 5 (2012) corrige errores.

En la versión 6 (2014), se han recalculado los gráficos que determinan el valor de las resistencias pull-up en función de la capacitancia del bus y la tensión de funcionamiento [1] .

Principio de conexión

El bus I 2 C es síncrono y consta de dos líneas: datos (SDA) y reloj (SCL). Hay un maestro (master) y esclavos (slave). El iniciador del intercambio es siempre el amo, el intercambio entre dos esclavos es imposible. En total, puede haber hasta 127 dispositivos en un bus de dos hilos.

Los relojes en la línea SCL son generados por el maestro. La línea SDA puede ser controlada por el maestro o el esclavo, según la dirección de transmisión. La unidad de intercambio de información es un paquete enmarcado por condiciones de bus únicas denominadas condiciones de inicio y parada. El maestro al comienzo de cada paquete envía un byte, donde indica la dirección del esclavo y la dirección de transmisión de los datos posteriores. Los datos se transmiten en palabras de 8 bits. Después de cada palabra, el lado receptor transmite un bit de reconocimiento.

Cómo funciona

I²C utiliza dos líneas bidireccionales, conectadas al voltaje de suministro y controladas a través de un colector abierto o drenaje abierto: una línea de datos en serie (SDA, ing.  Serial DAta ) y una línea de reloj en serie ( SCL, ing.  Serial CLock ). Los voltajes estándar son +5 V o +3,3 V, pero se permiten otros.

El direccionamiento clásico incluye un espacio de direcciones de 7 bits con 16 direcciones reservadas. Esto significa que hay disponibles hasta 112 direcciones libres para que los desarrolladores conecten periféricos a un bus.

El principal modo de operación es 100 kbps; 10 kbps en modo de velocidad reducida. También es importante que el estándar permita la suspensión del cronometraje para trabajar con dispositivos lentos.

El proceso de envío de un mensaje. Estado de INICIO y PARADA

El procedimiento de intercambio comienza cuando el maestro genera un estado START : cuando la línea SCL está ALTA, genera una transición de la señal de la línea SDA de ALTA a BAJA. Esta transición es percibida por todos los dispositivos conectados al bus como una señal del inicio del procedimiento de intercambio. La generación del reloj es siempre responsabilidad del maestro; cada maestro genera su propia señal de reloj cuando envía datos por el bus.


Al transmitir paquetes a través del bus I²C, cada maestro genera su propia señal de reloj en la línea SCL. Después de que se forma la condición de INICIO, el maestro reduce el estado de la línea SCL a un estado BAJO y establece el bit más significativo del primer byte del mensaje en la línea SDA. El número de bytes en un mensaje no está limitado. La especificación del bus I²C solo permite cambios en la línea SDA cuando la línea SCL está en BAJO. Los datos son válidos y solo deben permanecer estables durante el estado ALTO del reloj. Para confirmar la recepción de un byte del maestro-transmisor por el esclavo-receptor, se introduce un bit de confirmación especial en la especificación del protocolo de intercambio de bus I²C, que se establece en el bus SDA después de recibir 8 bits de datos.


El procedimiento de intercambio finaliza cuando el maestro genera el estado STOP  : la transición del estado de la línea SDA de un estado BAJO a un estado ALTO cuando la línea SCL es ALTA. Los estados START y STOP siempre son generados por el maestro. Se considera que el bus está ocupado después de que se enclava la condición de INICIO. El autobús se considera libre algún tiempo después de que se solucione la condición de PARADA.

Confirmación

Por lo tanto, la transmisión de 8 bits de datos del transmisor al receptor se completa con un ciclo adicional (la formación del noveno pulso de reloj de la línea SCL), en el que el receptor establece el nivel de señal en la línea SDA bajo como un señal de recepción exitosa del byte.

El reconocimiento durante la transferencia de datos es obligatorio, excepto cuando la transferencia la completa el lado esclavo. El pulso de sincronización correspondiente es generado por el maestro. El transmisor libera (pone ALTO) la línea SDA durante la duración del reloj de reconocimiento. El receptor debe mantener la línea SDA durante el estado ALTO del reloj de reconocimiento en un estado BAJO estable.

En el caso de que el receptor esclavo no pueda reconocer su dirección (por ejemplo, cuando esté realizando alguna función en tiempo real), la línea de datos debe dejarse en estado ALTO. El maestro puede entonces emitir una condición de PARADA para interrumpir la transferencia de datos. Si un maestro-receptor está involucrado en la transferencia, entonces debe informar el final de la transferencia al esclavo-transmisor al no reconocer el último byte. El transmisor esclavo debe liberar la línea de datos para permitir que el maestro emita una condición de PARADA o repita una condición de ARRANQUE.

Sincronización

La sincronización se realiza mediante una conexión AND por cable a la línea SCL, lo que significa que el maestro no tiene control exclusivo sobre la transición de la línea SCL de BAJO a ALTO. En caso de que el esclavo necesite tiempo adicional para procesar el bit recibido, tiene la capacidad de mantener baja la línea SCL hasta que esté listo para recibir el siguiente bit. Por lo tanto, la línea SCL estará en BAJO durante el período de reloj BAJO más largo.

Los dispositivos con un período BAJO más corto entrarán en un estado de suspensión por un tiempo hasta que finalice el período largo. Cuando todos los dispositivos habilitados hayan pasado el período de reloj BAJO, la línea SCL pasará a ALTO. Todos los dispositivos comenzarán a funcionar ALTO en sus relojes. El primer dispositivo que venza este período hará que la línea SCL vuelva a estar BAJA. Por lo tanto, el período BAJO de la línea de reloj SCL está determinado por el período de reloj más largo de todos los dispositivos involucrados, y el período ALTO está determinado por el período de reloj más corto de los dispositivos.

Los receptores pueden utilizar el mecanismo de sincronización como un medio para controlar la transferencia de datos a nivel de bytes y bits.

A nivel de bytes, si un dispositivo puede recibir bytes de datos a una velocidad alta, pero tarda cierto tiempo en almacenar el byte recibido o prepararse para recibir el siguiente, entonces puede mantener la línea SCL BAJA después de recibir y reconocer un byte. byte, poniendo así el transmisor en un estado inactivo.

A nivel de bits, un dispositivo como un microcontrolador sin circuitos de hardware I²C incorporados o con circuitos limitados puede ralentizar la velocidad del reloj al extender su período BAJO. De esta forma, la tasa de baudios de cualquier maestro se adapta a la velocidad del dispositivo lento.

Direccionamiento en el bus I²C

Cada dispositivo conectado al bus se puede direccionar mediante programación a una dirección única. Para seleccionar el destinatario del mensaje, el maestro utiliza un componente de dirección único en el formato del paquete. Cuando se utiliza el mismo tipo de dispositivos, los circuitos integrados suelen tener un selector de dirección adicional, que se puede implementar como entradas digitales adicionales del selector de dirección y como entrada analógica. En este caso, las direcciones de dichos dispositivos del mismo tipo se separan en el espacio de direcciones de los dispositivos conectados al bus.

El modo normal utiliza direccionamiento de 7 bits.

El procedimiento de direccionamiento en el bus I²C es que el primer byte después de la señal de INICIO determina a qué esclavo se dirige el maestro para el ciclo de intercambio. La excepción es la dirección de "Llamada general", que se dirige a todos los dispositivos del bus. Cuando se utiliza esta dirección, todos los dispositivos deberían, en teoría, enviar una señal de reconocimiento. Sin embargo, los dispositivos que pueden manejar "llamadas generales" son raros en la práctica.

Los primeros siete bits de los primeros dos bytes forman la dirección del esclavo. El octavo, el bit menos significativo, determina la dirección de la transferencia de datos. "Cero" significa que el maestro enviará información al esclavo seleccionado. "Uno" significa que el maestro recibirá información del esclavo.

Después de enviar la dirección, cada dispositivo del sistema compara los primeros siete bits después de la señal de INICIO con su dirección. Si hay una coincidencia, el dispositivo se considera seleccionado como receptor-esclavo o transmisor-esclavo, según el bit de dirección.

La dirección del esclavo puede constar de una parte fija y una parte programable. A menudo sucede que hay varios dispositivos del mismo tipo en el sistema (por ejemplo, IC de memoria o controladores de indicadores LED ), por lo tanto, utilizando la parte programable de la dirección, es posible conectar la mayor cantidad posible de dichos dispositivos. al autobús. El número de bits programables en la dirección depende del número de pines de chip libres. A veces, se usa una sola salida con una configuración analógica del rango de direcciones programables [2] . En este caso, dependiendo del potencial en este pin de dirección del IC, es posible cambiar el espacio de direcciones del controlador para que el mismo tipo de IC no entre en conflicto entre sí en un bus común.

Todos los circuitos integrados especializados que admiten el funcionamiento en el estándar de bus I²C tienen un conjunto de direcciones fijas, cuya lista indica el fabricante en las descripciones de los controladores.

La combinación de bits 11110XX de la dirección está reservada para el direccionamiento de 10 bits.

Como se desprende de la especificación del bus, tanto los formatos de intercambio simples como los combinados están permitidos, cuando en el intervalo entre el estado INICIO y el estado DETENCIÓN, el maestro y el esclavo pueden actuar como receptor y transmisor de datos. Los formatos combinados se pueden utilizar, por ejemplo, para gestionar la memoria secuencial.

Durante el primer byte de datos, se puede transmitir una dirección de memoria, que se escribe en un pestillo interno . Después de repetir la señal de INICIO y la dirección del esclavo, se envían los datos de la memoria. Todas las decisiones de incrementar o disminuir automáticamente una dirección a la que se accedió previamente las toma el constructor específico del dispositivo. Por lo tanto, en cualquier caso, la mejor manera de evitar una situación descontrolada en el bus antes de usar un IC nuevo (o que no se haya usado anteriormente) es estudiar cuidadosamente la hoja de datos del producto o el manual de referencia.

En cualquier caso, de acuerdo con la especificación del bus, todos los dispositivos en desarrollo deben restablecer la lógica del bus al recibir una señal de INICIO o REINICIO y prepararse para recibir la dirección.

Sin embargo, los principales problemas con el uso del bus I²C surgen precisamente del hecho de que los desarrolladores que "comienzan" a trabajar con el bus I²C no tienen en cuenta el hecho de que el maestro (a menudo un microprocesador) no tiene derechos exclusivos sobre ninguno de los líneas de autobús. .

Aplicación

I²C se utiliza en dispositivos que brindan facilidad de desarrollo y bajo costo de fabricación con una velocidad relativamente buena.

Lista de posibles aplicaciones:

Ejemplos de sistemas con bus I²C

En la imagen: (a) TV
altamente integrada

  1. microcontrolador
  2. sintetizador PLL
  3. Memoria flash
  4. Decodificador de crominancia multisistema
  5. Decodificador de audio estéreo
  6. Potenciador de señal de imagen
  7. Procesador de audio de alta fidelidad
  8. Procesador de video analógico
  9. decodificador de teletexto
  10. Circuito integrado de señal OSD

(b) estación base de radiotelefonía DECT

  1. generador DTMF
  2. Interfaz de línea telefónica
  3. Códec ADPCM
  4. Controlador de lotes
  5. microcontrolador

Beneficios

Beneficios para los diseñadores

Desventajas

Desarrollo

Cada sistema electrónico incluye 3 tipos diferentes de nodos:

En dispositivos económicos, I²C a menudo se emula en el software utilizando la tecnología Bit-banging .

Soporte del sistema operativo

Tecnologías derivadas

Sobre la base de I²C, se han desarrollado buses para conectar periféricos de computadora ACCESS.bus , buses de intercambio de datos entre una computadora y un monitor DDC , buses de control de funciones del sistema SMBus y otros. En estas tecnologías, es posible utilizar diferentes voltajes, tipos de cambio y líneas de interrupción separadas .

SMBus , propuesto por Intel en 1995, es un subconjunto de I²C que define un uso más estricto. Uno de los objetivos de SMBus es mejorar la confiabilidad y la interoperabilidad. En consecuencia, los sistemas I²C modernos incluyen algunas políticas y reglas de SMBus, que a veces admiten tanto I²C como SMBus, lo que requiere una reconfiguración mínima, ya sea a través de un comando o mediante un pin.

El bus IPMB , basado en el uso de dos I²C para redundancia y siendo la base de la interfaz IPMI , se utiliza en sistemas altamente confiables de los estándares AdvancedTCA y MicroTCA .

TWI (interfaz de dos cables) o TWSI (interfaz serial de dos cables) es esencialmente el mismo bus I²C, pero usa un nombre diferente por razones de licencia (las patentes de I²C ya se cancelaron, el 1 de octubre de 2006, las regalías por usar el protocolo I²C fueron Sin embargo, se mantienen las deducciones para asignar una dirección esclava exclusiva en el bus I²C).

El protocolo compatible con I²C utiliza el bus de cámara Serial Camera Control Bus ( SCCB ) de OmniVision.

Véase también

Notas

  1. Especificación del bus I²C y manual de usuario. Rvdo. 6 — 4 de abril de 2014 Archivado el 11 de mayo de 2013 en Wayback Machine  NXP Semiconductors NV
  2. cómo, por ejemplo, se implementa en el SAA1064 IC

Enlaces