

Un transmisor-receptor asíncrono universal ( UART / ˈ juː ɑːr t / ) es un dispositivo periférico para comunicación serial asíncrona en el que el formato de datos y las velocidades de transmisión son configurables. Envía bits de datos uno por uno, del menos significativo al más significativo, enmarcados por bits de inicio y parada para que el canal de comunicación gestione la sincronización precisa. Los niveles de señalización eléctrica son gestionados por un circuito controlador externo al UART. Los niveles de señal comunes son RS-232 , RS-485 y TTL sin procesar [ 1 ] para enlaces de depuración cortos. Los primeros teletipos utilizaban bucles de corriente .
Fue uno de los primeros dispositivos de comunicación informática, utilizado para conectar teletipos a una consola de operador . También fue uno de los primeros sistemas de hardware para Internet .
Un UART se implementa generalmente en un circuito integrado (CI) y se utiliza para comunicaciones serie a través del puerto serie de un ordenador o dispositivo periférico . Es común que uno o más periféricos UART se integren en chips de microcontroladores . Existen UART especializados para automóviles , tarjetas inteligentes y tarjetas SIM .
Un dispositivo relacionado, el transmisor-receptor síncrono y asíncrono universal (USART), también admite el funcionamiento síncrono.
En términos del modelo OSI , la UART se encuentra dentro de la capa 2, la capa de enlace de datos .
Historia
Algunos de los primeros sistemas telegráficos utilizaban pulsos de longitud variable (como en el código Morse ) y mecanismos de relojería giratorios para transmitir caracteres alfabéticos. Los primeros dispositivos de comunicación en serie (con pulsos de longitud fija) eran interruptores mecánicos giratorios ( conmutadores ). Diversos códigos de caracteres que utilizaban 5, 6, 7 u 8 bits de datos se popularizaron en las teleimpresoras y, posteriormente, como periféricos de ordenador. El teletipo resultó ser un excelente dispositivo de entrada/salida de propósito general para un ordenador pequeño.
Gordon Bell de DEC diseñó el primer UART, que ocupaba una placa de circuito completa llamada unidad de línea , para la serie de computadoras PDP que comenzó con el PDP-1 . [ 2 ] [ 3 ] Según Bell, la principal innovación del UART fue su uso de muestreo para convertir la señal al dominio digital, lo que permitió una sincronización más confiable que los circuitos anteriores que usaban dispositivos de sincronización analógicos con potenciómetros ajustados manualmente . [ 4 ] Para reducir el costo del cableado, el plano posterior y otros componentes, estas computadoras también fueron pioneras en el control de flujo usando caracteres XON y XOFF en lugar de cables de hardware.
DEC condensó el diseño de la unidad de línea en un UART de un solo chip para su propio uso. [ 2 ] Western Digital lo desarrolló hasta convertirlo en el primer UART de un solo chip ampliamente disponible, el WD1402A, alrededor de 1971. Este fue un ejemplo temprano de un circuito integrado de escala media . Otro chip popular fue el SCN2651 de la familia Signetics 2650 .
Un ejemplo de UART de principios de la década de 1980 fue el National Semiconductor 8250 , que se utilizó en la tarjeta adaptadora de comunicaciones asíncronas del IBM PC original . [ 5 ] En la década de 1990, se desarrollaron UART más nuevos con búferes en el chip. Esto permitió una mayor velocidad de transmisión sin pérdida de datos y sin requerir una atención tan frecuente por parte de la computadora. Por ejemplo, el popular National Semiconductor 16550 tiene una FIFO de 16 bytes y generó muchas variantes, incluidas la 16C550, 16C650, 16C750 y 16C850 .
Según el fabricante, se utilizan diferentes términos para identificar los dispositivos que realizan las funciones UART. Intel denominó a su dispositivo 8251 "Interfaz de Comunicación Programable" porque en realidad era un USART y podía operar tanto de forma síncrona como asíncrona. Se presentó en 1979. El MOS Technology 6551 era conocido como "Adaptador de Interfaz de Comunicaciones Asíncronas" (ACIA). El término "Interfaz de Comunicaciones Serie" (SCI) se utilizó por primera vez en Motorola alrededor de 1975 para referirse a su dispositivo de interfaz serie asíncrona de arranque y parada, que otros denominaban UART. Zilog fabricó varios controladores de comunicación serie o SCC.
A partir de la década de 2000, la mayoría de las computadoras compatibles con IBM PC eliminaron sus puertos COM RS-232 externos y comenzaron a usar puertos USB , que permiten una transmisión de datos más rápida. Para los usuarios que aún necesitan puertos serie RS-232, actualmente se utilizan comúnmente puentes USB a UART externos . Estos combinan los cables de hardware y un chip para realizar la conversión USB a UART. Cypress Semiconductor y FTDI son dos de los principales proveedores comerciales de estos chips. [ 6 ] Si bien los puertos RS-232 ya no están disponibles para los usuarios externos en la mayoría de las computadoras, muchos procesadores internos incorporan UART en sus chips para brindar a los diseñadores de hardware la capacidad de interactuar con otros chips o dispositivos que utilizan RS-232 o RS-485 para la comunicación.
Transmisión y recepción de datos en serie
Un UART contiene los siguientes componentes:
- un generador de reloj, generalmente un múltiplo de la velocidad de bits para permitir el muestreo en medio de un período de bits.
- registros de desplazamiento de entrada y salida, junto con los búferes de transmisión/recepción o FIFO
- control de transmisión/recepción
- lógica de control de lectura/escritura
El transmisor-receptor asíncrono universal (UART) recibe bytes de datos y transmite los bits individuales de forma secuencial. [ 7 ] En el destino, un segundo UART recombina los bits para formar bytes completos. Cada UART contiene un registro de desplazamiento , que es el método fundamental de conversión entre formatos serie y paralelo. La transmisión serie de información digital (bits) a través de un solo cable u otro medio es menos costosa que la transmisión paralela a través de múltiples cables.
Por lo general, la UART no genera ni recibe directamente las señales externas que se utilizan entre los distintos equipos. Se utilizan dispositivos de interfaz independientes para convertir las señales de nivel lógico de la UART a los niveles de señalización externos, que pueden ser niveles de voltaje estandarizados, niveles de corriente u otras señales.
La comunicación puede darse en tres modalidades:
- simplex (en una sola dirección, sin posibilidad de que el dispositivo receptor envíe información de vuelta al dispositivo transmisor).
- dúplex completo (ambos dispositivos envían y reciben al mismo tiempo)
- Semidúplex (los dispositivos se turnan para transmitir y recibir)
Para que la UART funcione, los siguientes ajustes deben ser los mismos tanto en el lado transmisor como en el receptor:
- Nivel de voltaje
- Velocidad en baudios
- Bit de paridad
- Tamaño de bits de datos
- Tamaño de los bits de parada
- Control de flujo
En cuanto al nivel de voltaje, dos módulos UART funcionan correctamente cuando ambos tienen el mismo nivel de voltaje, por ejemplo, 3V-3V entre los dos módulos UART. Para usar dos módulos UART con diferentes niveles de voltaje, es necesario agregar externamente un circuito de cambio de nivel. [ 8 ]
Estructura de datos

Una trama UART consta de cinco elementos:
- Inactivo (nivel lógico alto (1))
- Bit de inicio (lógica baja (0)): el bit de inicio indica al receptor que se avecina un nuevo carácter.
- Bits de datos: los siguientes cinco a nueve bits, dependiendo del conjunto de códigos utilizado, representan el carácter.
- Bit de paridad: si se utiliza un bit de paridad, este se coloca después de todos los bits de datos. El bit de paridad permite al UART receptor detectar si se ha producido algún cambio en los datos durante la transmisión.
- Parada (nivel lógico alto (1)): los siguientes uno o dos bits siempre están en estado de marca (nivel lógico alto, es decir, 1) y se denominan bits de parada. Indican al receptor que el carácter ha finalizado. Dado que el bit de inicio está en nivel lógico bajo (0) y el bit de parada en nivel lógico alto (1), siempre hay al menos dos cambios de señal garantizados entre caracteres. Si la línea se mantiene en nivel lógico bajo durante más tiempo que la duración de un carácter, se produce una interrupción que puede ser detectada por la UART.
En la configuración más común de 8 bits de datos, sin paridad y 1 bit de parada (es decir, 8N1 ), la eficiencia del protocolo es del 8/10 = 80 %. En comparación, la eficiencia del protocolo Ethernet al usar tramas de máximo rendimiento con una carga útil de 1500 bytes alcanza hasta el 95 %, y hasta el 99 % con tramas jumbo de 9000 bytes . Sin embargo, debido a la sobrecarga del protocolo Ethernet y al tamaño mínimo de carga útil de 42 bytes, si se envían mensajes pequeños de uno o pocos bytes, la eficiencia del protocolo Ethernet cae mucho más allá de la eficiencia constante del 80 % de la UART 8N1.
El estado de reposo, sin datos, corresponde a un alto voltaje o alimentación eléctrica. Esto es una herencia histórica de la telegrafía, en la que la línea se mantenía en alto voltaje para demostrar que ni la línea ni el transmisor estaban dañados.
Cada carácter se compone de un bit de inicio lógico bajo, bits de datos, posiblemente un bit de paridad y uno o más bits de parada. En la mayoría de las aplicaciones, el bit de datos menos significativo (el de la izquierda en este diagrama) se transmite primero, pero existen excepciones (como la terminal de impresión IBM 2741 ).
Receptor
Todas las operaciones del hardware UART están controladas por una señal de reloj interna, que funciona a un múltiplo de la velocidad de datos, normalmente 8 o 16 veces la velocidad de bits. El receptor comprueba el estado de la señal entrante en cada pulso de reloj, buscando el inicio del bit de inicio. Si el bit de inicio aparente dura al menos la mitad del tiempo de bit, es válido e indica el inicio de un nuevo carácter. De lo contrario, se considera un pulso espurio y se ignora. Tras esperar un tiempo de bit adicional, el estado de la línea se muestrea de nuevo y el nivel resultante se registra en un registro de desplazamiento. Una vez transcurrido el número de periodos de bit necesarios para la longitud del carácter (normalmente de 5 a 8 bits), el contenido del registro de desplazamiento se pone a disposición del sistema receptor (de forma paralela). El UART activará un indicador que señala que hay nuevos datos disponibles y también puede generar una interrupción del procesador para solicitar al procesador anfitrión que transfiera los datos recibidos.
Las UART de comunicación no comparten ningún sistema de temporización aparte de la señal de comunicación. Normalmente, las UART resincronizan sus relojes internos con cada cambio en la línea de datos que no se considera un pulso espurio. Al obtener información de temporización de esta manera, reciben de forma fiable cuando el transmisor envía a una velocidad ligeramente diferente a la que debería. Las UART más sencillas no hacen esto; en su lugar, se resincronizan solo con el flanco descendente del bit de inicio y luego leen el centro de cada bit de datos esperado. Este sistema funciona si la velocidad de transmisión de datos es lo suficientemente precisa como para permitir que los bits de parada se muestreen de forma fiable. [ 9 ] [ 10 ]
Es habitual que una UART almacene el carácter más reciente mientras recibe el siguiente. Este "doble búfer" proporciona al ordenador receptor el tiempo de transmisión completo de un carácter para recuperarlo. Muchas UART disponen de una pequeña memoria FIFO (primero en entrar, primero en salir) entre el registro de desplazamiento del receptor y la interfaz del sistema anfitrión. Esto permite al procesador anfitrión disponer de más tiempo para gestionar las interrupciones de la UART y evita la pérdida de datos recibidos a altas velocidades.
Transmisor
La operación de transmisión es más simple ya que la temporización no tiene que determinarse a partir del estado de la línea, ni está sujeta a intervalos de tiempo fijos. Tan pronto como el sistema emisor deposita un carácter en el registro de desplazamiento (después de completar el carácter anterior), la UART genera un bit de inicio, desplaza la cantidad requerida de bits de datos a la línea, genera y envía el bit de paridad (si se usa) y envía los bits de parada. Dado que la operación dúplex completo requiere que los caracteres se envíen y reciban al mismo tiempo, las UART utilizan dos registros de desplazamiento diferentes para los caracteres transmitidos y recibidos. Las UART de alto rendimiento podrían contener un búfer FIFO (primero en entrar, primero en salir) de transmisión para permitir que una CPU o un controlador DMA deposite varios caracteres en ráfaga en el FIFO en lugar de tener que depositar un carácter a la vez en el registro de desplazamiento. Dado que la transmisión de uno o varios caracteres puede llevar mucho tiempo en relación con las velocidades de la CPU, una UART mantiene un indicador que muestra el estado de ocupado para que el sistema host sepa si hay al menos un carácter en el búfer de transmisión o en el registro de desplazamiento; "Listo para el/los siguiente(s) carácter(es)" también puede indicarse con una interrupción.
Solicitud
Para un funcionamiento correcto, las UART de transmisión y recepción deben configurarse con la misma velocidad de bits (velocidad en baudios), longitud de caracteres, paridad y número de bits de parada. La UART receptora puede detectar configuraciones incorrectas y activar un indicador de "error de trama" para el sistema anfitrión; en casos excepcionales, la UART receptora generará una secuencia errática de caracteres distorsionados y los transmitirá al sistema anfitrión.
Los puertos serie típicos que se utilizan con ordenadores personales conectados a módems utilizan un bit de inicio, ocho bits de datos, sin paridad y un bit de parada; para esta configuración, el número de caracteres ASCII por segundo es igual a la velocidad de bits dividida por 10.
Algunos ordenadores domésticos o sistemas embebidos de muy bajo coste que carecen de una UART física pueden emular el protocolo mediante software, muestreando el estado de un puerto de entrada o manipulando directamente un puerto de salida para la transmisión de datos. Si bien esto consume muchos recursos de la CPU (ya que la sincronización de la CPU es crítica), permite prescindir del chip UART, ahorrando dinero y espacio. Esta técnica se conoce como manipulación de bits .
Modelos
La mayoría de los componentes de la siguiente tabla están descatalogados y ya no se fabrican. Un UART dual ( DUART ) combina dos UART en un solo chip. De forma similar, un UART cuádruple ( QUART ) combina cuatro UART en un solo encapsulado, como el NXP 28L194. Un UART óctuple ( OCTART) combina ocho UART en un solo encapsulado, como el Exar XR16L788 o el NXP SCC2698.
Usos
Algunos módems para ordenadores personales que se conectan a una ranura de la placa base incluyen la función UART en la tarjeta. El chip UART 8250 original que venía con el ordenador personal IBM tenía un búfer de un carácter tanto para el receptor como para el transmisor, lo que significaba que el software de comunicaciones funcionaba mal a velocidades superiores a 9600 bit/s , especialmente si operaba en un sistema multitarea o si gestionaba interrupciones de los controladores de disco. Los módems de alta velocidad utilizaban UART compatibles con el chip original, pero que incluían búferes FIFO adicionales, lo que proporcionaba al software más tiempo para responder a los datos entrantes.
Un análisis de los requisitos de rendimiento a altas velocidades de bits muestra por qué la FIFO de 16, 32, 64 o 128 bytes es indispensable. La especificación de Microsoft para un sistema DOS exige que las interrupciones no se desactiven durante más de 1 milisegundo. Algunos discos duros y controladores de vídeo incumplen esta especificación. A 9600 bits/s se entrega un carácter aproximadamente cada milisegundo, por lo que una FIFO de 1 byte debería ser suficiente a esta velocidad en un sistema DOS que cumpla con el tiempo máximo de desactivación de interrupciones. A velocidades superiores, es posible que se reciba un nuevo carácter antes de que se haya recuperado el anterior, lo que provocará la pérdida de este último. Esto se conoce como error de desbordamiento y resulta en la pérdida de uno o más caracteres.
Una FIFO de 16 bytes permite recibir hasta 16 caracteres antes de que el ordenador tenga que atender la interrupción. Esto aumenta la velocidad máxima de bits que el ordenador puede procesar de forma fiable de 9600 a 153 000 bit/s si tiene un tiempo muerto de interrupción de 1 milisegundo. Una FIFO de 32 bytes aumenta la velocidad máxima a más de 300 000 bit/s . Otra ventaja de tener una FIFO es que el ordenador solo tiene que atender entre un 8 % y un 12 % de las interrupciones, lo que permite disponer de más tiempo de CPU para actualizar la pantalla o realizar otras tareas. Por lo tanto, la capacidad de respuesta del ordenador también mejorará.
Emulación
Dado que el protocolo de comunicación de la UART es simple, se puede emular mediante el control de bits de los pines GPIO en software en microcontroladores modernos (por ejemplo, Arduino [ 18 ] o Teensy [ 19 ] ), o en máquinas de estados de E/S programables (por ejemplo, PIO de Raspberry Pi Pico [ 20 ] [ 21 ] o FlexIO de NXP [ 22 ] ).
Véase también
Referencias
- ↑ "Comunicación serie RS-232 vs. TTL - SparkFun Electronics" . www.sparkfun.com . Archivado del original el 12 de mayo de 2023. Consultado el 12 de mayo de 2023 .
- 1 2 C. Gordon Bell, J. Craig Mudge, John E. McNamara, Ingeniería informática: una perspectiva DEC del diseño de sistemas de hardware , Digital Press, 12 de mayo de 2014, ISBN 1483221105pág. 73
- ↑ Allison, David. "Curador, División de Tecnología de la Información y Sociedad, Museo Nacional de Historia Americana, Institución Smithsoniana" . Historias orales y en vídeo de la Institución Smithsoniana . Consultado el 14 de junio de 2015 .
- ↑ Historia oral de Gordon Bell , 2005, consultado el 19 de agosto de 2015.
- ↑ Referencia técnica 6025008 (PDF) . Biblioteca de referencia de hardware para ordenadores personales. IBM. Agosto de 1981. págs. 2–123 .
- ↑ "Productos FTDI" . www.ftdichip.com . Consultado el 22 de marzo de 2018 .
- ↑ Adam Osborne, Introducción a los microordenadores, Volumen 1: Conceptos básicos , Osborne-McGraw Hill, Berkeley, California, EE. UU., 1980 ISBN 0-931988-34-9págs. 116–126
- ↑ Texas Instruments (1 de marzo de 2021). "Transmisor/receptor asíncrono universal (UART)" (PDF) . ti.com . pág. 6, "2.3.1 Traducción de voltaje con UART" . Consultado el 25 de agosto de 2023 .
- ↑ "Determinación de los requisitos de precisión del reloj para comunicaciones UART" (PDF) . an2141 . Maxim Integrated . 7 de agosto de 2003. Consultado el 1 de noviembre de 2021 .
- 1 2 "Transmisor/receptor asíncrono universal (UART)" (PDF) . SCC2691 . Philips NXP . 4 de agosto de 2006. pág. 14. Consultado el 1 de noviembre de 2021 .
- ↑ Interfaz con un PDP-11/05: la UART , blinkenbone.com, consultado el 19 de agosto de 2015.
- ↑ "Especificaciones del producto Zilog Z8440/1/2/4, Z84C40/1/2/3/4. Controlador de entrada/salida serie" (PDF) .090529 zilog.com
- ↑ "Descargar documento de Zilog" (PDF) . www.zilog.com . Consultado el 22 de marzo de 2018 .
- ↑ "Preguntas frecuentes: Controladores UART y TurboCom 16550A 1994" . Servidor FTP ( FTP ) . Consultado el 16 de enero de 2016 .(Para ver los documentos, consulte Ayuda:FTP )
- ↑ T'so, Theodore Y. (23 de enero de 1999). "Re: Comunicación serial con el 16650" . The Mail Archive . Recuperado el 2 de junio de 2013 .
- ↑ Zilog. "Manual de usuario SCC/ESCC UM010901-0601" (PDF) . leocom.kr . Consultado el 13 de mayo de 2023 .
- ↑ bill.herrin.us - Manual del puerto serie mejorado Hayes ESP de 8 puertos , 2 de marzo de 2004
- ↑ "Biblioteca SoftwareSerial | Documentación de Arduino" . Arduino . 5 de octubre de 2022. Archivado del original el 1 de junio de 2023. Consultado el 10 de junio de 2023 .
- ↑ Stoffregen, Paul. "AltSoftSerial Library, para un puerto serie adicional" . www.pjrc.com . Archivado del original el 22 de marzo de 2023. Consultado el 10 de junio de 2023 .
- ↑ "Ejemplo de comunicación serial Pico de Raspberry Pi (MicroPython)" . Electrocredible . 24 de enero de 2023. Archivado del original el 3 de junio de 2023. Consultado el 10 de junio de 2023 .
- ↑ McKinney, Josh (5 de noviembre de 2022). "E/S programable (PIO) para MIDI con la Raspberry Pi Pico" . joshka.net . Archivado del original el 4 de abril de 2023. Consultado el 10 de junio de 2023 .
- ↑ Krenek, Pavel (2015). "Emulando UART usando FlexIO" (PDF) . NXP . Archivado (PDF) del original el 05-10-2022 . Recuperado el 10-06-2023 .
Lecturas adicionales
- Puerto serie completo: Puertos COM, puertos COM virtuales USB y puertos para sistemas embebidos ; 2.ª edición; Jan Axelson; Lakeview Research; 380 páginas; 2007; ISBN 978-1-931-44806-2.
- Puerto serie completo: Programación y circuitos para enlaces y redes RS-232 y RS-485 ; 1.ª edición; Jan Axelson; Lakeview Research; 306 páginas; 1998; ISBN 978-0-965-08192-4.
- Puerto serie y microcontroladores: principios, circuitos y códigos fuente ; 1.ª edición; Grzegorz Niemirowski; CreateSpace; 414 páginas; 2013; ISBN 978-1-481-90897-9.
- Programación en serie (Wikibook) .
Enlaces externos
- El tutorial sobre el uso de la interfaz serie y la UART en FreeBSD incluye definiciones de señales estándar, la historia de los circuitos integrados UART y la distribución de pines para el conector DB25 de uso común.
- El tutorial UART para robótica contiene muchos ejemplos prácticos.
- Transmisión de datos