• En este espacio, encontrarás una amplia gama de contenido relacionado con los campos de la ingeniería electrónica, telecomunicaciones, programación y temas afines.
  • Si eres un estudiante, encontrarás una gran cantidad de recursos educativos para fortalecer tus conocimientos y habilidades.
  • Sigueme en mi redes sociales. ¡Únete a nuestra comunidad de entusiastas de la ingeniería y la tecnología! Estamos emocionados de compartir nuestro conocimiento y experiencia contigo..
Mostrando entradas con la etiqueta ingeniería electrónica. Mostrar todas las entradas
Mostrando entradas con la etiqueta ingeniería electrónica. Mostrar todas las entradas

miércoles, 11 de enero de 2023

Interfaz serial I2C

 Vamos a estudiar los conceptos básicos de la comunicación I2C.Otra de las formas de comuncación serial usadas en microcontroladores y microprocesadores para conectar diferentes periféricos Da clic para ampliar la información y aprender más.

Historia









C al cuadrado, a menudo llamado I2C, significa el protocolo Inter Integrated Circuit. I2C fue inventado en 1982 por Philips Semiconductor, ahora conocido como NXP, como un protocolo de comunicación de baja velocidad para conectar dispositivos controladores de microprocesador con dispositivos de destino periféricos de menor velocidad. Desde 2006, la implementación del protocolo I2C no requiere una licencia y muchas empresas de dispositivos de semiconductores, han introducido dispositivos compatibles con I2C.

 

Caracteristicas

I2C es un protocolo ampliamente utilizado por muchas razones. Requiere sólo dos líneas para las comunicaciones. Al igual que otros protocolos de comunicación en serie, existe una línea de datos en serie y una línea de reloj en serie (Figura 1).


Figura 1. 

 

I2C puede conectarse a múltiples dispositivos con solo dos líneas. El dispositivo controlador (maestro) puede comunicarse con cualquier dispositivo de destino (esclavo) a través de una dirección I2C enviada a través de la línea de datos en serie. I2C es simple y económico de implementar para los fabricantes de dispositivos.

I2C tiene varios modos de velocidad, comenzando con el modo estándar, que es un protocolo en serie que llega hasta los 100 kilobits por segundo. A esto le sigue el modo rápido, que alcanza un máximo de 400 kilobits por segundo. Ambos protocolos son ampliamente compatibles y pueden ser utilizados por el controlador si la capacitancia del bus y la capacidad del variador permiten una velocidad más rápida. El modo rápido plus permite una comunicación de hasta 1 megabit por segundo. Para lograr esta velocidad, los conductores pueden requerir fuerza adicional (energía) para cumplir con tiempos de subida y bajada más rápidos (Figura 2).


Figura 2.

Estos tres modos son relativamente similares y utilizan una estructura de comunicación que es la misma. Sin embargo, todos tienen diferentes especificaciones de tiempo para cada uno de los modos, y la implementación de hardware de I2C en los dispositivos es diferente para adaptarse a las diferentes velocidades. I2C también tiene otros dos modos para velocidades de datos más altas.

El modo de alta velocidad tiene una velocidad de datos de hasta 3,4 megabits por segundo. En este modo, el dispositivo controlador primero debe usar un código de controlador para permitir la transferencia de datos a alta velocidad. Esto habilita el modo de alta velocidad en el dispositivo de destino. Este modo también puede requerir una resistencia de  pull-up para impulsar las líneas de comunicación a una velocidad de datos más alta. Ultra-rápido es el modo de operación más rápido y transfiere datos hasta 5 megabits por segundo. Este modo es de solo escritura y omite algunas funciones I2C en el protocolo de comunicación.

Una de las razones por las que I2C es un protocolo común es porque solo se utilizan dos líneas para las comunicaciones. La primera línea es SCL, que es un reloj en serie controlado principalmente por el maestro. SCL se utiliza para sincronizar la entrada y salida de datos del dispositivo de destino. La segunda línea es SDA, que es la línea de datos en serie. SDA se utiliza para transmitir datos entre los dispositivos maestros y los dispositivos de destino (esclavos).

En comparación, la Interfaz Periférica Serial, o protocolo SPI, requiere cuatro líneas para la comunicación. Además del reloj en serie, la línea de selección del chip SPI selecciona el dispositivo para la comunicación, y hay dos líneas de datos, una que se usa para la entrada y otra para la salida del dispositivo de destino.

Para I2C, el dispositivo maestro controla el reloj serial SCL, mientras que SDA se usa para enviar datos en ambas direcciones. El SDA es bidireccional, lo que significa que los dispositivos controladores (maestros) y los dispositivos de destino (esclavos) pueden enviar datos en la línea. Por ejemplo, el dispositivo controlador puede enviar datos de configuración al dispositivo de destino y el dispositivo de destino puede enviar datos medidos por un conversor análogo a digital, de regreso al dispositivo controlador. La comunicación es semidúplex donde solo un maestro o un dispositivo esclavo envía datos en el bus a la vez.

Figura 3.

Un dispositivo controlador I2C inicia y detiene la comunicación, lo que elimina el problema potencial de la contención del bus. Además, la comunicación con el dispositivo de destino se envía a través de una dirección única en el bus. Esto permite tanto múltiples maestros como múltiples dispositivos esclavos en el bus I2C (Figura 3). Las líneas SDA y SCL tienen una conexión de drenaje abierto a todos los dispositivos en el bus. Esto requiere una resistencia pull-up conectada a un suministro de voltaje común (VDD).

Las conexiones de drenaje abierto se usan en líneas SDA y SCL y se conectan a un transistor NMOS. En la figura 4, se muestra un dispositivo I2C conectado a una línea SDA o SCL con una resistencia pull-up a VDD. Esta conexión de drenaje abierto controla la línea de comunicación I2C y la baja o la libera cuando está alta. Para configurar el nivel de voltaje de la línea SDA o SCL, el NMOS se activa o desactiva. Cuando el NMOS está encendido, el dispositivo extrae corriente a través de la resistencia a tierra. La velocidad de la transición está determinada por la velocidad de conmutación del transistor NMOS y la capacitancia del bus en SDA o SCL.

Figura 4.

 Cuando el transistor NMOS está apagado (Figura 5), el dispositivo deja de extraer corriente y la resistencia pull-up atrae la línea SDA o SCL a VDD. Esto hace que la línea este un nivel lógico alto. A través del control de esta conexión de drenaje abierto, tanto SDA como SCL se pueden configurar alto o bajo, lo que permite la comunicación I2C.

Figura 5.

Debido a la capacitancia en la línea de comunicación I2C, la línea SDA o SCL se descarga con una constante de tiempo RC exponencial según el tamaño de la resistencia pull-up y la capacitancia en el bus I2C. Por lo general, las resistencias pull-up se configuran entre 1 kiloohmio y 10 kiloohmios. La velocidad del bus puede ayudar a determinar el tamaño de la resistencia. Con valores resistivos más altos, el bus I2C puede volver los cambios entre niveles lógicos más lentos y limitar la velocidad del bus.

La capacitancia en las líneas de buses también tiene un impacto en la comunicación. Una capacitancia más alta limita la velocidad de la comunicación I2C, la cantidad de dispositivos y la distancia física entre los dispositivos en el bus. Una resistencia pull-up más pequeña tiene un tiempo de subida más rápido pero requiere más potencia para la comunicación. Una resistencia pull-up más grande tiene un tiempo de subida más lento, lo que lleva a una comunicación más lenta, pero requiere menos energía.

Uno de los beneficios de I2C usando un colector abierto es que la contención del bus no lo pondrá en un estado destructivo. Con una salida de drenaje abierto, se pueden conectar muchos dispositivos juntos. Para cualquier salida en esa conexión, si cualquiera de las salidas baja la línea, la línea estará baja. Este tipo de conexión se denomina OR cableado. La salida es el OR lógico de todas las salidas cuando se unen.

Si las salidas fueran del tipo push-pull, no podrían unirse sin la posibilidad de un estado destructivo. Una salida push-pull tiene transistores NMOS y PMOS complementarios que elevan o bajan la salida. Unidos, si una salida es alta y la otra salida es baja, esta contención del bus tendría un estado indeterminado, posiblemente estableciéndose en el punto medio de suministro.

Además, un dispositivo tiene corriente conductora NMOS y otro dispositivo tiene corriente conductora PMOS. Esto generaría corriente de VDD a tierra a través de una ruta de muy baja impedancia, conduciendo tanta corriente como permitieran los transistores. Esto podría ser una cantidad significativa de corriente que podría dañar los dispositivos.

La comunicación I2C se inicia desde el dispositivo controlador con una condición de inicio I2C (Figura 6). Si el bus está abierto, un controlador I2C puede reclamar el bus para comunicación enviando una condición de inicio I2C. Para hacer esto, el dispositivo controlador primero baja el SDA (nivel lógico cero) y luego baja el SCL. Esta secuencia indica que el dispositivo controlador reclama el bus I2C para la comunicación, lo que obliga a otros dispositivos controladores en el bus a detener cualquier intento de comunicación.

Figura 6.

Cuando el dispositivo controlador ha completado su comunicación, libera el SCL alto y luego libera el SDA alto. Esto indica una condición de parada I2C. Esto libera el bus para permitir que otros controladores se comuniquen o para permitir que el mismo controlador se comunique con otro dispositivo.

I2C utiliza una secuencia de 1 y 0 para su comunicación en serie. SDA se usa para los bits de datos, mientras que SCL es el reloj en serie que cronometra la secuencia de bits. Se envía un 1 lógico cuando el SDA libera la línea, lo que permite que la resistencia pull-up lleve la línea a un nivel alto. Se envía un 0 lógico cuando SDA tira hacia abajo la línea (nivel lógico bajo), estableciendo un nivel bajo cerca de GND. Los 1 y 0 se reciben cuando se SCL oscila.


Para considerar un bit válido (Figura 7), el valor de SDA no debe cambiar entre un flanco ascendente y un flanco descendente de SCL para ese bit. Si SDA cambia entre los flancos ascendente y descendente del SCL, esto puede interpretarse como una condición de inicio o parada en el bus I2C.


 Figura 7.

 El protocolo I2C se divide en marcos. La comunicación comienza desde el dispositivo controlador con un marco de dirección. El marco de dirección es seguido por uno o más marcos de datos que consisten en 1 byte. Cada cuadro también tiene un bit de reconocimiento para garantizar que el dispositivo objetivo o el dispositivo controlador hayan recibido comunicación (Figura 8).

Figura 8.

Al comienzo de la trama de dirección, el dispositivo controlador envía la petición para iniciar una comunicación. Primero, el dispositivo controlador baja SDA y luego baja SCL para comenzar. Esto permite que el dispositivo controlador reclame el bus sin disputa de los otros dispositivos controladores en el bus. Cada dispositivo de destino I2C tiene una dirección I2C asociada. Cuando el dispositivo controlador quiere comunicarse con un dispositivo en particular, usa su dirección de dispositivo para enviar o recibir datos en los siguientes marcos I2C.

La dirección I2C consta de 7 bits y todos los dispositivos en el bus I2C deben tener una dirección única (Figura 9). Una dirección de 7 bits normalmente implicaría 2 elevado a la siete, o 128 direcciones únicas. Sin embargo, hay varias direcciones I2C reservadas, lo que limita la cantidad de dispositivos posibles. La dirección se envía con SDA como datos y SCL como reloj serial. Con esta información, debería poder leer la comunicación I2C del dispositivo y comprender lo que se envía y recibe desde el dispositivo controlador y el dispositivo de destino.

Figura 9.

 

Dentro del marco de dirección se encuentra el bit de lectura-escritura (Figura 10). Si este bit es un 1, entonces el controlador quiere leer datos del dispositivo esclavo. Si este bit es un 0, entonces el controlador solicita escribir datos en el dispositivo de destino (esclavo).

Figura 10.

Después de cualquier byte de comunicación entre el dispositivo controlador y el dispositivo de destino, se usa un bit más para verificar que la comunicación fue exitosa. Al final de la comunicación del byte de dirección, el dispositivo de destino baja el SDA durante el pulso SCL para indicar que entendió que el controlador lo estaba contactando Figura 11. Esto se conoce como ACKT, o acuse de recibo para el objetivo. Si este bit es alto, entonces ningún dispositivo de destino entendió que estaba siendo contactado y la comunicación no tuvo éxito. Si el bit es alto, esto se conoce como NACK y no hubo bit reconocido.

 

Figura 11

El marco de dirección va seguido de uno o más marcos de datos (Figura 12). Estos marcos se envían un byte a la vez. Después de que se transfiere el byte de datos, hay otro ACKT, o reconocimiento del objetivo (Figura 13). Si el byte de datos es una escritura en el dispositivo, entonces el dispositivo de destino baja el SDA para reconocer la transferencia. Si el byte de datos es una lectura del dispositivo, el controlador baja el SDA para un ACKC, o reconocimiento del controlador, para acusar recibo de los datos.

Figura 12

 

Figura 13

 

Una vez completada la comunicación, el controlador emite una condición de parada I2C. Primero se lanza SCL y luego se lanza SDA. Este es el controlador que indica que la comunicación se completó y se liberó el bus I2C. Esta es la configuración básica para cualquier comunicación I2C entre el dispositivo controlador y el dispositivo de destino. La comunicación puede estar compuesta por más de 1 byte de datos, y puede requerir una escritura y una lectura del dispositivo para leer cualquier registro de dispositivo dado.

 

martes, 9 de agosto de 2022

Interfaz Periférica en Serie - SPI

En este articulo describimos las comunicaciones digitales y los conceptos básicos de la interfaz periférica en serie , o comunicación SPI (Serial Peripheral Interface) La cual es muy usada en los sistemas embebidos para controlar multiples dispositivos con muy pocos pines.