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


166

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, pero me confundo cuando los veo y tengo dificultades para comprender cómo se relacionan entre sí. Por ejemplo, ¿UART es un subconjunto de USART? ¿Cuál es la diferencia entre RS232 y Serial? ¿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, dispersos en la mesa de café, y necesito que alguien me ayude a organizar mi comprensión. Perdóname si esta pregunta es un poco vaga, pero realmente siento que esa es la naturaleza de esta pregunta en conjunto.


Respuestas:


253

Serial es una palabra general para todo lo que es "Time Division Multiplexed", para usar un término costoso. Significa que los datos se envían a lo largo del tiempo, la mayoría de las veces un bit tras otro. Todos los protocolos que está nombrando son protocolos seriales.

UART, para 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 a bordo. Utiliza una sola línea de datos para transmitir y una 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 a UART. Sin nivel de voltaje, por lo que puede tenerlo a 3.3 V o 5 V, cualquiera que sea el uso de su microcontrolador. Tenga en cuenta que los microcontroladores que desean comunicarse a través de UART deben acordar la velocidad de transmisión, la velocidad de bits, ya que solo tienen los bits de inicio del borde descendente para sincronizar. Eso se llama comunicación asincrónica.

Para la comunicación a larga distancia (eso no tiene que ser cientos de metros), el UART de 5 V no es muy confiable, por eso se convierte a un voltaje más alto, típicamente +12 V para un "0" y -12 V para un " 1 ". El formato de datos sigue siendo el mismo. Luego tiene RS-232 (que en realidad debería 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 el Transmisor receptor síncrono / asíncrono universal. Esto puede hacer UART, pero también un protocolo síncrono. En sincronía no solo hay datos, sino también un reloj transmitido. Con cada bit, un pulso de reloj le dice al receptor que debe enganchar ese bit. Los protocolos síncronos necesitan un mayor ancho de banda, como en el caso de la codificación Manchester, o un cable adicional para el reloj, como SPI e I2C.

SPI (interfaz periférica en serie) es otro protocolo en serie muy simple. Un maestro envía una señal de reloj, y con cada pulso de reloj se 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, uno se menciona anteriormente, es decir, usar el esclavo select, y otro es encadenar, usa menos pines de hardware (líneas de selección), pero el software se complica.

I2C(Circuito Inter-Integrado, pronunciado "I cuadrado C") también es un protocolo sincrónico, y es el primero que vemos que tiene algo de "inteligencia"; los otros movieron tontamente los 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 a través del mismo cable, nuevamente controlado por el maestro que crea la señal del reloj. I2C no utiliza selecciones esclavas separadas para seleccionar un dispositivo en particular, pero tiene direccionamiento. El primer byte enviado por el maestro contiene una dirección de 7 bits (para que pueda usar 127 dispositivos en el bus) y un bit de lectura / escritura, que indica si el próximo byte (s) también vendrá del maestro o debería venir del esclavo. Después de cada byte, el receptor debe enviar un "0" para confirmar la recepción del byte, que el maestro se engancha 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 desea recibir datos, solo genera los pulsos de reloj. El esclavo debe asegurarse de que el siguiente bit esté listo cuando se le dé el pulso de reloj. Este protocolo está patentado por NXP (anteriormente Phillips), para ahorrar costos de licencia, Atmel utiliza la palabra TWI (interfaz de 2 hilos) que es exactamente igual a I2C, por lo que cualquier dispositivo AVR no tendrá I2C pero tendrá TWI. Si el maestro desea recibir datos, solo genera los pulsos de reloj. El esclavo debe asegurarse de que el siguiente bit esté listo cuando se le dé el pulso de reloj. Este protocolo está patentado por NXP (anteriormente Phillips), para ahorrar costos de licencia, Atmel utiliza la palabra TWI (interfaz de 2 hilos) que es exactamente igual a I2C, por lo que cualquier dispositivo AVR no tendrá I2C pero tendrá TWI. Si el maestro desea recibir datos, solo genera los pulsos de reloj. El esclavo debe asegurarse de que el siguiente bit esté listo cuando se le dé el pulso de reloj. Este protocolo está patentado por NXP (anteriormente Phillips), para ahorrar costos de licencia, Atmel utiliza la palabra TWI (interfaz de 2 hilos) que es exactamente igual a 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 usted 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á conectado por cable: dos resistencias tiran del bus a un nivel alto, y los dispositivos solo envían niveles bajos. Si quieren enviar un alto nivel, simplemente liberan el autobús.

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


Sobre cada uno de estos puedes escribir un libro, y parece que estoy en camino. Esta es solo una descripción muy breve, 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

44
@ Kenny, pero no existe el "TTL en serie". Eso es UART. ¿Qué pasa si el voltaje es 3.3 V? El TTL solo se refiere a los 5 V.
stevenvh

de eso es de lo que estoy hablando, las E / S de UART a menudo se llaman TTL Serial.
Kenny

Respuesta asombrosa! Lo leeré unas cuantas veces más y le haré saber si tengo preguntas. Gracias Steven.
capcom

8
Una mejor apuesta sería pescar para la edad de Uart entonces :-)
Vaibhav Garg

11

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

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

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

Las interfaces asincrónicas tienen el tiempo codificado en el flujo de datos en sí. 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 elegante utilizando bucles y algoritmos de fase bloqueada. Un UART es un "Transmisor receptor asíncrono universal", realmente el nombre de un bloque funcional que a menudo se usa para implementar un "puerto serie" con cierta flexibilidad en cuanto a longitud de palabra, velocidad y 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, terminación única 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" Esencialmente, esto es y se usa más comúnmente como UART, pero también se puede configurar para generar (o considerar) un reloj separado sincronizado con los datos, y puede revertir el orden de los bits. Por lo general, es configurable para interoperar con SPI, pero es posible que no pueda eliminar el tiempo dedicado a iniciar / detener bits, 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
Avi Mehenwal

8

RS-232 es un protocolo en serie muy simple que se utilizó originalmente para módems y teletipos. Es lo que comúnmente se llama un puerto serie (o un puerto COM en MS-Windows). En la línea, nominalmente usa niveles de ± 12V, pero pueden variar ampliamente ya que la detección se especifica a ± 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 cero lógico cerca de 0V y para uno lógico cerca de 5V. A menudo, cualquier lógica de 5V se llama TTL, aunque la mayoría de los circuitos hoy en día se construyen como CMOS. Hoy 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, +12 V corresponde a nivel lógico bajo y -12 V corresponde a nivel lógico alto, lo cual puede ser 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 llama transmisión asíncrona, porque los bits de inicio y parada sincronizan los datos para cada byte por separado.

Un UART (Transmisor receptor asíncrono universal) es un dispositivo en una computadora o microcontrolador que realiza este tipo de comunicación asíncrona.

Un USART (Transmisor receptor asíncrono asíncrono universal) es un dispositivo que además puede realizar algunos tipos de transmisión síncrona, de ahí la S. adicional. Qué 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).


1

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