USART, UART, RS232, USB, SPI, I2C, TTL, etc. ¿Qué son todos estos y cómo se relacionan entre sí?

Como aficionado novato a la electrónica, he escuchado estos términos y más en todas partes. En su raíz, entiendo que todos se basan en la comunicación entre dispositivos, computadoras, periféricos, etc.

Tengo una comprensión básica de cómo funcionan todos ellos, pero me confundo cuando veo tantos y tengo dificultades para entender cómo se relacionan entre sí. Por ejemplo, ¿UART es un subconjunto de USART? ¿Cuál es la diferencia entre RS232 y Serie? ¿Cuáles son las principales diferencias entre todos estos métodos de comunicación: confiabilidad, costo, aplicación, velocidad, requisitos de hardware?

Si te puedes imaginar, tengo todos estos términos escritos en tarjetas, esparcidos sobre la mesa de café, y necesito que alguien me ayude a organizar mi comprensión. Perdóneme si esta pregunta es un poco vaga, pero realmente siento que esa es la naturaleza de esta pregunta en conjunto.

pregunta relacionada: ¿ Diferencia entre UART y RS232?

Respuestas (4)

Serial es una palabra general para todo lo que es "multiplexado por división de tiempo", para usar un término costoso. Significa que los datos se envían repartidos en el tiempo, la mayoría de las veces un solo bit tras otro. Todos los protocolos que está nombrando son protocolos seriales.

UART, por Universal Asynchronous Receiver Transmitter, es uno de los protocolos seriales más utilizados. Es casi tan viejo como yo, y muy simple. La mayoría de los controladores tienen un UART de hardware integrado. Utiliza una sola línea de datos para transmitir y otra para recibir datos. La mayoría de las veces se transfieren datos de 8 bits, de la siguiente manera: 1 bit de inicio (nivel bajo), 8 bits de datos y 1 bit de parada (nivel alto). El bit de inicio de nivel bajo y el bit de parada de nivel alto significan que siempre hay una transición de alto a bajo para iniciar la comunicación. Eso es lo que describe UART. Sin nivel de voltaje, por lo que puede tenerlo a 3,3 V o 5 V, lo que use su microcontrolador. Tenga en cuenta que los microcontroladores que desean comunicarse a través de UART deben ponerse de acuerdo sobre la velocidad de transmisión, la tasa de bits, ya que solo tienen el borde descendente de los bits de inicio para sincronizar. Eso se llama comunicación asíncrona.

Para comunicaciones de larga distancia (que no tienen que ser cientos de metros), el UART de 5 V no es muy confiable, por eso se convierte a un voltaje más alto, generalmente +12 V para un "0" y -12 V para un " 1". El formato de datos sigue siendo el mismo. Luego tienes RS-232 (que en realidad deberías llamar EIA-232, pero nadie lo hace).

La dependencia del tiempo es uno de los grandes inconvenientes de UART, y la solución es USART , para transmisor receptor síncrono/asíncrono universal. Esto puede hacer UART, pero también un protocolo síncrono. En sincrónico no solo se transmiten datos, sino también un reloj. Con cada bit, un pulso de reloj le dice al receptor que debe bloquear ese bit. Los protocolos síncronos necesitan un ancho de banda mayor, como en el caso de la codificación Manchester, o un cable adicional para el reloj, como SPI e I2C.

SPI (Serial Peripheral Interface) es otro protocolo serial muy simple. Un maestro envía una señal de reloj, y en cada pulso de reloj desplaza un bit hacia el esclavo y un bit hacia adentro, proveniente del esclavo. Por lo tanto, los nombres de las señales son SCK para reloj, MOSI para Master Out Slave In y MISO para Master In Slave Out. Mediante el uso de señales SS (Slave Select), el maestro puede controlar más de un esclavo en el bus. Hay dos formas de conectar múltiples dispositivos esclavos a un maestro, una se menciona anteriormente, es decir, usar la selección de esclavos, y la otra es la conexión en cadena, usa menos pines de hardware (líneas de selección), pero el software se complica.

I2C(Circuito interintegrado, pronunciado "I al cuadrado C") también es un protocolo síncrono, y es el primero que vemos que tiene algo de "inteligencia"; los otros cambiaron tontamente bits dentro y fuera, y eso fue todo. I2C usa solo 2 cables, uno para el reloj (SCL) y otro para los datos (SDA). Eso significa que el maestro y el esclavo envían datos por el mismo cable, nuevamente controlado por el maestro que crea la señal del reloj. I2C no usa selecciones de esclavos separadas para seleccionar un dispositivo en particular, pero tiene direccionamiento. El primer byte enviado por el maestro tiene una dirección de 7 bits (para que pueda usar 127 dispositivos en el bus) y un bit de lectura/escritura, que indica si los próximos bytes también vendrán del maestro o deberían venir del esclavo. Después de cada byte, el receptor debe enviar un "0" para acusar recibo del byte, que el maestro enclava con un noveno pulso de reloj. Si el maestro quiere escribir un byte, se repite el mismo proceso: el maestro pone bit tras bit en el bus y cada vez da un pulso de reloj para indicar que los datos están listos para ser leídos. Si el maestro quiere recibir datos solo genera los pulsos de reloj. El esclavo debe tener cuidado de que el siguiente bit esté listo cuando se dé el pulso de reloj. Este protocolo está patentado por NXP (anteriormente Phillips), para ahorrar costos de licencia, Atmel usa la palabra TWI (interfaz de 2 hilos) que es exactamente lo mismo que I2C, por lo que cualquier dispositivo AVR no tendrá I2C pero tendrá TWI. Si el maestro quiere recibir datos solo genera los pulsos de reloj. El esclavo debe tener cuidado de que el siguiente bit esté listo cuando se dé el pulso de reloj. Este protocolo está patentado por NXP (anteriormente Phillips), para ahorrar costos de licencia, Atmel usa la palabra TWI (interfaz de 2 hilos) que es exactamente lo mismo que I2C, por lo que cualquier dispositivo AVR no tendrá I2C pero tendrá TWI. Si el maestro quiere recibir datos solo genera los pulsos de reloj. El esclavo debe tener cuidado de que el siguiente bit esté listo cuando se dé el pulso de reloj. Este protocolo está patentado por NXP (anteriormente Phillips), para ahorrar costos de licencia, Atmel usa la palabra TWI (interfaz de 2 hilos) que es exactamente lo mismo que I2C, por lo que cualquier dispositivo AVR no tendrá I2C pero tendrá TWI.

Dos o más señales en el mismo cable pueden causar conflictos y tendría un problema si un dispositivo envía un "1" mientras que el otro envía un "0". Por lo tanto, el bus está cableado en OR: dos resistencias llevan el bus a un nivel alto y los dispositivos solo envían niveles bajos. Si quieren enviar un nivel alto simplemente sueltan el bus.

TTL (Transistor Transistor Logic) no es un protocolo. Es una tecnología más antigua para la lógica digital, pero el nombre se usa a menudo para referirse al voltaje de suministro de 5 V, y a menudo se refiere incorrectamente a lo que debería llamarse UART.


Sobre cada uno de estos se puede escribir un libro, y parece que voy por buen camino. Esta es solo una breve descripción general, háganos saber si algunas cosas necesitan aclaración.

+1 solo en TTL, supongo que el OP significa Serial TTL que, en mi experiencia, describe las señales UART antes del transceptor/controlador de bus RS232.
@Kenny, pero no existe tal cosa como "TTL en serie". Eso es UART. ¿Qué pasa si el voltaje es de 3,3 V? El TTL solo se refiere a los 5 V.
de eso es de lo que estoy hablando, las E / S de UART a menudo se denominan en mi experiencia TTL Serial.
¡Increíble respuesta! Lo leeré unas cuantas veces más y les haré saber si tengo preguntas. Gracias, Steven.
"Es casi tan viejo como yo,..."; ¿Cuantos años tienes? :)
@Vaibhav - Puedes encontrar eso en mi perfil . Por supuesto que no sabes si esa es mi verdadera edad... ;-)
Entonces, una mejor apuesta sería pescar la edad de Uart :-)
Agregar la explicación de maestro y esclavo en SPI sería genial para hacerlo autónomo.
¿Puede dar un ejemplo de un protocolo serial no binario?
A veces veo que se utiliza el término serie de nivel lógico en lugar de serie TTL. Esto puede no ser lo suficientemente preciso, pero al menos no es realmente incorrecto.
@stevenvh pero también hay un TTL de bajo voltaje (o LVTTL) que funciona en el rango de 3.3 V, así que tal vez por eso se usa a veces el término "TTL en serie" como lo menciona kenny, aunque es algo obsoleto

Esto está muy cerca del territorio de algo donde sería mejor leer artículos que hacer preguntas para obtener respuestas personalizadas, pero para abordar un punto importante que los fabricantes a veces desdibujan:

Hay dos tipos básicos de interfaces seriales: síncronas y asíncronas.

Las interfaces síncronas tienen los datos transmitidos con su temporización relativa a un reloj explícito, que también se proporciona. El ejemplo clásico de esto es SPI, pero también existen formas especiales como I2S para convertidores de audio, JTAG, interfaces de configuración FPGA, etc. Muchos canales de comunicaciones paralelos son solo esta idea extendida para mover más bits a la vez. A menudo, pero no siempre, estos envían primero el bit más significativo.

Las interfaces asíncronas tienen el tiempo codificado en el propio flujo de datos. Para "puertos seriales" y estándares relacionados como RS232, el tiempo de la palabra es relativo al bit de inicio, y el receptor simplemente muestrea la línea en los intervalos correctos a partir de entonces. Otras interfaces pueden ser un poco más complicadas y requieren una recuperación de reloj más sofisticada utilizando bucles y algoritmos de bloqueo de fase. Un UART es un "transmisor receptor asíncrono universal", en realidad el nombre de un bloque funcional que se usa a menudo para implementar un "puerto serie" con cierta flexibilidad para la longitud de palabra, la velocidad y las condiciones de inicio/finalización. Cosas como RS232, RS422, etc. son estándares para la señalización eléctrica externa de los datos que obtendría de estos: voltaje, un solo extremo o diferencial, si un 1 es alto o bajo, etc.

El "USART" puede ser una fuente de confusión legítima, ya que es una especie de dispositivo híbrido, un "transmisor receptor síncrono/asíncrono universal". generar (o considerar) un reloj separado sincronizado con los datos, y puede invertir el orden de los bits. Por lo general, se puede configurar para interoperar con SPI, pero es posible que no pueda eliminar el tiempo dedicado a los bits de inicio/parada, por lo que es posible que no pueda operar con algo como I2S, que puede esperar que los datos fluyan continuamente sin espacios entre palabras.

Muy buena explicación (Y) Me encantó la brevedad. Gracias @chris

RS-232 es un protocolo serial muy simple que se usó originalmente para módems y teletipos. Es lo que comúnmente se llama puerto serie (o puerto COM en MS-Windows). En la línea utiliza nominalmente niveles de ±12V, pero pueden variar ampliamente ya que la detección se especifica en ±3V. Siempre hay un controlador de línea (hoy en día generalmente de la familia MAX232) que convierte estos niveles hacia y desde los niveles de señal digital interna de una computadora o microcontrolador.

TTL significa Transistor-Transistor-Logic y tiene su nivel para el cero lógico cerca de 0V y para el uno lógico cerca de 5V. A menudo, cualquier lógica de 5 V se llama TTL, aunque la mayoría de los circuitos hoy en día se construyen como CMOS. Hoy en día también hay muchos circuitos que funcionan a 3,3V, que ya no es TTL.

Con respecto a los niveles internos, los niveles en la línea RS-232 están invertidos, +12V corresponde a lógico bajo y -12V corresponde a lógico alto, lo que puede resultar confuso.

Para describir el formato de datos, generalmente se muestra la señal lógica. Cuando la línea está inactiva es alta. Una transmisión comienza con un bit de inicio bajo, los bits de datos con el bit menos significativo primero, un bit de paridad opcional y uno o dos bits de parada (1 lógico). Esto se denomina transmisión asíncrona, porque los bits de inicio y parada sincronizan los datos de cada byte por separado.

Un UART (Universal Asynchronous Receiver Transmitter) es un dispositivo en una computadora o microcontrolador que realiza este tipo de comunicación asíncrona.

Un USART (Universal Asynchronous Synchronous Receiver Transmitter) es un dispositivo que además puede hacer algún tipo de transmisión síncrona, de ahí la S adicional. El tipo varía, debe buscarlo en la hoja de datos.

SPI, I²C y USB son historias diferentes (y en el caso de USB muy largas).

Las señales TTL se definen por los niveles altos y bajos de >2,<0,8. True TTL se ofrece en implementaciones de 3,3 V y 5 V.

Estoy de acuerdo con lo que se ha mencionado sobre los protocolos SPI y CAN. Para mejorar el rendimiento, se ha diseñado el protocolo CAN. En este Arbitraje se utiliza el concepto de que dos dispositivos están listos para comunicarse, luego dependiendo de su prioridad se realiza la transmisión o recepción. CAN es ampliamente utilizado en muchas industrias.