stringtranslate.com

Receptor-transmisor asíncrono universal

Diagrama de bloques de un UART

Un receptor-transmisor 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, desde el menos significativo al más significativo, enmarcados por bits de inicio y detención para que el canal de comunicación maneje la sincronización precisa. Los niveles de señalización eléctrica son manejados 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 usaban bucles de corriente .

Fue uno de los primeros dispositivos de comunicación por ordenador, utilizado para conectar teletipos a una consola de operador . También fue uno de los primeros sistemas de hardware para Internet .

Un UART es generalmente un circuito integrado (CI) individual (o parte de un circuito integrado) que se utiliza para comunicaciones en serie a través del puerto serie de un ordenador o dispositivo periférico . Normalmente, en los chips de microcontroladores se integran uno o más periféricos UART . Los UART especializados se utilizan en automóviles , tarjetas inteligentes y tarjetas SIM .

Un dispositivo relacionado, el receptor-transmisor universal sincrónico y asincrónico (USART), también admite el funcionamiento sincrónico.

En términos de nivel OSI , UART vive en la capa 2, la capa de enlace de datos .

Transmisión y recepción de datos en serie

Un UART contiene los siguientes componentes:

El receptor-transmisor asíncrono universal (UART) toma bytes de datos y transmite los bits individuales de manera secuencial. [2] En el destino, un segundo UART vuelve a ensamblar los bits en bytes completos. Cada UART contiene un registro de desplazamiento , que es el método fundamental de conversión entre las formas serial y paralela. La transmisión serial 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.

El UART no suele generar ni recibir 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 del UART hacia y desde los niveles de señalización externa, que pueden ser niveles de tensión estandarizados, niveles de corriente u otras señales.

La comunicación puede ser de tres modos:

Para que UART funcione, las siguientes configuraciones deben ser las mismas tanto en el lado de transmisión como en el de recepción:

Para el nivel de voltaje, 2 módulos UART funcionan bien cuando ambos tienen el mismo nivel de voltaje, por ejemplo, 3 V-3 V entre los 2 módulos UART. Para utilizar 2 módulos UART en diferentes niveles de voltaje, se debe agregar un circuito de conmutación de nivel externamente. [3]

Enmarcado de datos

Ejemplo de una trama UART. En este diagrama, se envía un byte , que consta de un bit de inicio, seguido de ocho bits de datos (D1-8) y dos bits de parada, para una trama UART de 11 bits. La cantidad de bits de datos y de formato, la presencia o ausencia de un bit de paridad, la forma de paridad (par o impar) y la velocidad de transmisión deben ser acordados previamente por las partes que se comunican. El "bit de parada" es en realidad un "período de parada"; el período de parada del transmisor puede ser arbitrariamente largo. No puede ser más corto que una cantidad especificada, generalmente de 1 a 2 tiempos de bit. El receptor requiere un período de parada más corto que el transmisor. Al final de cada trama de datos, el receptor se detiene brevemente para esperar el siguiente bit de inicio. Es esta diferencia la que mantiene sincronizados al transmisor y al receptor. BCLK = Reloj base

Un marco UART consta de 5 elementos:

En las configuraciones más comunes de 8 bits de datos, sin paridad y 1 bit de parada (también conocido como 8N1 ), la eficiencia del protocolo es del 80%. A modo de comparación, la eficiencia del protocolo de Ethernet cuando se utilizan tramas de rendimiento máximo con una carga útil de 1500 bytes es de hasta el 95% y de hasta el 99% con tramas jumbo de 9000 bytes . Sin embargo, debido a la sobrecarga del protocolo de Ethernet y al tamaño mínimo de la carga útil de 42 bytes, si se deben enviar mensajes pequeños de uno o unos pocos bytes, la eficiencia del protocolo de Ethernet cae mucho más bajo que la eficiencia constante 8N1 del UART del 80%.

El estado inactivo, sin datos, es de alto voltaje o de alimentación. Este es un legado histórico de la telegrafía, en la que la línea se mantiene en alto para mostrar que la línea y el transmisor no están dañados.

Cada carácter se presenta como 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 que se encuentra a la izquierda en este diagrama) se transmite primero, pero existen excepciones (como la terminal de impresión IBM 2741 ).

Bit de inicio

El bit de inicio indica al receptor que viene un nuevo carácter.

Bit de datos

Los siguientes cinco a nueve bits, dependiendo del conjunto de códigos empleado, representan el carácter.

Bit de paridad

Si se utiliza un bit de paridad, se colocará después de todos los bits de datos.

El bit de paridad es una forma que tiene el UART receptor de saber si algún dato ha cambiado durante la transmisión.

Bit de parada

Los siguientes uno o dos bits siempre están en la condición de marca (lógica alta, es decir, '1') y se denominan bit(s) de parada. Le indican al receptor que el carácter está completo. Dado que el bit de inicio es lógica baja (0) y el bit de parada es lógica alta (1), siempre hay al menos dos cambios de señal garantizados entre caracteres.

Si la línea se mantiene en la condición lógica baja durante más de un tiempo de carácter, se trata de una condición de interrupción que puede ser detectada por el UART.

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 prueba el estado de la señal entrante en cada pulso de reloj, buscando el comienzo del bit de inicio. Si el bit de inicio aparente dura al menos la mitad del tiempo de bit, es válido y señala el comienzo de un nuevo carácter. Si no, se considera un pulso espurio y se ignora. Después de esperar un tiempo de bit adicional, se vuelve a muestrear el estado de la línea y el nivel resultante se registra en un registro de desplazamiento. Una vez que ha transcurrido el número requerido de períodos de bits para la longitud del carácter (5 a 8 bits, normalmente), el contenido del registro de desplazamiento se pone a disposición (en forma paralela) del sistema receptor. El UART establecerá un indicador que indica que hay nuevos datos disponibles y también puede generar una interrupción del procesador para solicitar que el procesador anfitrión transfiera los datos recibidos.

Los UART que se comunican no tienen un sistema de sincronización compartido aparte de la señal de comunicación. Normalmente, los UART resincronizan sus relojes internos en cada cambio de la línea de datos que no se considera un pulso espurio. Al obtener información de sincronización de esta manera, reciben de manera confiable cuando el transmisor está enviando a una velocidad ligeramente diferente de la que debería. Los UART simplistas no hacen esto; en cambio, se resincronizan solo en el flanco descendente del bit de inicio y luego leen el centro de cada bit de datos esperado, y 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 manera confiable. [4] [5]

Una característica estándar de un UART es almacenar el carácter más reciente mientras recibe el siguiente. Este "doble almacenamiento en búfer" proporciona a la computadora receptora un tiempo de transmisión de carácter completo para recuperar un carácter recibido. Muchos UART tienen una pequeña memoria intermedia FIFO (primero en entrar, primero en salir ) entre el registro de desplazamiento del receptor y la interfaz del sistema host. Esto permite que el procesador host tenga aún más tiempo para manejar una interrupción del 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á vinculada a ningún intervalo de temporización fijo. Tan pronto como el sistema de envío deposita un carácter en el registro de desplazamiento (después de completar el carácter anterior), el 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 full-duplex requiere que los caracteres se envíen y reciban al mismo tiempo, los UART usan dos registros de desplazamiento diferentes para los caracteres transmitidos y recibidos. Los UART de alto rendimiento podrían contener un búfer de transmisión FIFO (primero en entrar, primero en salir) para permitir que una CPU o un controlador DMA depositen múltiples caracteres en una 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, un UART mantiene una bandera 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 siguiente carácter(es)" también puede señalarse con una interrupción.

Solicitud

Los UART de transmisión y recepción deben estar configurados para la misma velocidad de bits, longitud de caracteres, paridad y bits de parada para que funcionen correctamente. El UART de recepción puede detectar algunas configuraciones no coincidentes y configurar un bit indicador de "error de trama" para el sistema host; en casos excepcionales, el UART de recepción producirá un flujo errático de caracteres mutilados y los transferirá al sistema host.

Los puertos seriales típicos utilizados con computadoras personales conectadas a módems utilizan ocho bits de datos, sin paridad y un bit de detención; para esta configuración, la cantidad de caracteres ASCII por segundo es igual a la tasa de bits dividida por 10.

Algunas computadoras domésticas de muy bajo costo o sistemas integrados que carecen de un UART físico pueden emular el protocolo con software mediante el muestreo del estado de un puerto de entrada o manipulando directamente un puerto de salida para la transmisión de datos. Si bien requiere un uso intensivo de la CPU (ya que la sincronización de la CPU es fundamental), el chip UART se puede omitir, lo que ahorra dinero y espacio. La técnica se conoce como bit-banging .

Historia

Algunos de los primeros sistemas telegráficos utilizaban pulsos de longitud variable (como en el código Morse ) y mecanismos de relojería rotatorios para transmitir caracteres alfabéticos. Los primeros dispositivos de comunicación en serie (con pulsos de longitud fija) eran conmutadores mecánicos rotatorios ( conmutadores ). Varios códigos de caracteres que utilizaban 5, 6, 7 u 8 bits de datos se hicieron comunes en los teletipos y, más tarde, como periféricos de ordenador. El teletipo era un excelente dispositivo de E/S de uso general para un ordenador pequeño.

Gordon Bell de DEC diseñó el primer UART, ocupando una placa de circuito completa llamada unidad de línea , para la serie de computadoras PDP comenzando con el PDP-1 . [6] [7] 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 temporización más confiable que los circuitos anteriores que usaban dispositivos de temporización analógicos con potenciómetros ajustados manualmente . [8] Para reducir el costo del cableado, la placa base y otros componentes, estas computadoras también fueron pioneras en el control de flujo utilizando 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 temprano para su propio uso. [6] Western Digital desarrolló esto 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 un UART de principios de la década de 1980 fue el National Semiconductor 8250 utilizado en la tarjeta adaptadora de comunicaciones asincrónicas del IBM PC original . [9] En la década de 1990, se desarrollaron UART más nuevos con búferes en 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 un FIFO de 16 bytes y generó muchas variantes, incluidas las 16C550, 16C650, 16C750 y 16C850 .

Según el fabricante, se utilizan distintos términos para identificar los dispositivos que realizan las funciones UART. Intel denominó a su dispositivo 8251 "Interfaz de comunicación programable". MOS Technology 6551 se conocía con el nombre de "Adaptador de interfaz de comunicaciones asíncronas" (ACIA). El término "Interfaz de comunicaciones en serie" (SCI) se utilizó por primera vez en Motorola alrededor de 1975 para referirse a su dispositivo de interfaz en serie asíncrona de arranque y parada, que otros llamaban UART. Zilog fabricó varios controladores de comunicación en 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 utilizaron puertos USB que pueden enviar datos más rápido. Para los usuarios que aún necesitan puertos seriales RS-232, ahora se utilizan comúnmente puentes USB a UART externos . Combinan los cables de hardware y un chip para realizar la conversión USB y UART. Cypress Semiconductor y FTDI son dos de los proveedores comerciales importantes de estos chips. [10] Aunque los puertos RS-232 ya no están disponibles para los usuarios en el exterior de la mayoría de las computadoras, muchos procesadores internos tienen UART integrados en sus chips para brindarles a los diseñadores de hardware la capacidad de interactuar con otros chips o dispositivos que usan RS-232 o RS-485 para la comunicación.

Condiciones especiales del transceptor

Error de desbordamiento

Un error de desbordamiento ocurre cuando el receptor no puede procesar el carácter que acaba de ingresar antes de que llegue el siguiente. Los distintos dispositivos tienen diferentes cantidades de espacio en el búfer para almacenar los caracteres recibidos. La CPU o el controlador DMA deben atender al UART para eliminar caracteres del búfer de entrada. Si la CPU o el controlador DMA no atienden al UART con la suficiente rapidez y el búfer se llena, se producirá un error de desbordamiento y se perderán los caracteres entrantes.

Error de subdesbordamiento

Un error de falta de datos ocurre cuando el transmisor UART ha terminado de enviar un carácter y el búfer de transmisión está vacío. En los modos asíncronos, esto se considera una indicación de que no quedan datos por transmitir, en lugar de un error, ya que se pueden agregar bits de detención adicionales. Esta indicación de error se encuentra comúnmente en los USART, ya que una falta de datos es más grave en los sistemas síncronos.

Error de encuadre

Un UART detectará un error de tramado cuando no vea un bit de "parada" en el momento de bit de "parada" esperado. Como el bit de "inicio" se utiliza para identificar el comienzo de un carácter entrante, su tiempo es una referencia para los bits restantes. Si la línea de datos no está en el estado esperado (alto) cuando se espera el bit de "parada" (según la cantidad de bits de datos y paridad para los que está configurado el UART), el UART indicará un error de tramado. Una condición de "interrupción" en la línea también se indica como un error de tramado.

Error de paridad

Un error de paridad ocurre cuando la paridad de la cantidad de bits uno no coincide con la especificada por el bit de paridad. La comprobación de paridad se utiliza a menudo para detectar errores de transmisión. El uso de un bit de paridad es opcional, por lo que este error solo se producirá si se ha habilitado la comprobación de paridad.

Condición de rotura

Una condición de interrupción ocurre cuando la entrada del receptor está en el nivel de "espacio" (lógica baja, es decir, '0') durante más de un período de tiempo, típicamente, durante más de un tiempo de carácter. Esto no es necesariamente un error, pero aparece para el receptor como un carácter de todos los bits cero con un error de trama.

El término "break" deriva de la señalización de bucle de corriente , que era la señalización tradicional utilizada para los teletipos . La condición de "espaciado" de una línea de bucle de corriente se indica mediante la ausencia de flujo de corriente, y un período muy largo sin flujo de corriente suele deberse a una interrupción u otro fallo en la línea. Algunos equipos transmitirán deliberadamente el nivel de "espacio" durante más de un carácter como señal de atención. Cuando las velocidades de señalización no coinciden, no se pueden enviar caracteres significativos, pero una señal de "break" larga puede ser una forma útil de llamar la atención de un receptor no coincidente para que haga algo (como reiniciarse). Los sistemas informáticos pueden utilizar el nivel de "break" largo como una solicitud para cambiar la velocidad de señalización, para admitir el acceso telefónico a múltiples velocidades de señalización. El protocolo DMX512 utiliza la condición de break para señalar el inicio de un nuevo paquete.

Modelos UART

Un UART dual, o DUART , combina dos UART en un solo chip. De manera similar, un UART cuádruple o QUART , combina cuatro UART en un solo paquete, como el NXP 28L194. Un UART octal u OCTART combina ocho UART en un solo paquete, como el Exar XR16L788 o el NXP SCC2698.

UART en módems

Los módems para ordenadores personales que se conectan a una ranura de la placa base también deben incluir la función UART en la tarjeta. El chip UART 8250 original que se entregaba con el ordenador personal IBM tenía un búfer de un carácter para el receptor y el transmisor cada uno, lo que significaba que el software de comunicaciones funcionaba mal a velocidades superiores a 9600 bit/s, especialmente si se operaba en un sistema multitarea o si se gestionaban interrupciones de controladores de disco. Los módems de alta velocidad utilizaban UART que eran compatibles con el chip original pero que incluían búferes FIFO adicionales, lo que daba al software tiempo adicional para responder a los datos entrantes.

Un vistazo a los requisitos de rendimiento a altas tasas de bits muestra por qué el FIFO de 16, 32, 64 o 128 bytes es una necesidad. La especificación de Microsoft para un sistema DOS requiere que las interrupciones no se deshabiliten durante más de 1 milisegundo a la vez. [ cita requerida ] [ dudosodiscutir ] Algunas unidades de disco duro y controladores de video violan esta especificación. 9600 bit/s entregarán un carácter aproximadamente cada milisegundo, por lo que un FIFO de 1 byte debería ser suficiente a esta tasa en un sistema DOS que cumpla con el tiempo máximo de deshabilitación de interrupciones. Las tasas superiores a esta pueden recibir un nuevo carácter antes de que se haya obtenido el anterior, y por lo tanto el carácter anterior se perderá. Esto se conoce como un error de desbordamiento y da como resultado uno o más caracteres perdidos.

Un 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. Un FIFO de 32 bytes aumenta la velocidad máxima a más de 300.000 bit/s. Un segundo beneficio de tener un FIFO es que el ordenador sólo tiene que atender entre un 8 y un 12 % de las interrupciones, lo que permite más tiempo de CPU para actualizar la pantalla o realizar otras tareas. Por tanto, las respuestas del ordenador también mejorarán.

Emulación

Dado que el protocolo de comunicación del UART es simple, se puede emular mediante el bit banging de los pines GPIO en el software de microcontroladores modernos (por ejemplo, Arduino [18] o Teensy [19] ), o en máquinas de estado de E/S programables (por ejemplo, PIO de Raspberry Pi Pico [20] [21] o FlexIO de NXP [22] ).

Véase también

Referencias

  1. ^ "Comunicación serial RS-232 vs. TTL - SparkFun Electronics". www.sparkfun.com .
  2. ^ Adam Osborne, Introducción a las microcomputadoras, volumen 1: conceptos básicos , Osborne-McGraw Hill, Berkeley, California, EE. UU., 1980, ISBN 0-931988-34-9 , págs. 116-126 
  3. ^ Texas Instrument (1 de marzo de 2021). "Receptor/transmisor asíncrono universal (UART)" (PDF) . ti.com . p. 6, "2.3.1 Traducción de voltaje con UART" . Consultado el 25 de agosto de 2023 .
  4. ^ "Determinación de los requisitos de precisión del reloj para las comunicaciones UART" (PDF) . an2141 . Maxim Integrated . 2003-08-07 . Consultado el 1 de noviembre de 2021 .
  5. ^ ab "Receptor/transmisor asíncrono universal (UART)" (PDF) . SCC2691 . Philips NXP . 2006-08-04. p. 14 . Consultado el 1 de noviembre de 2021 .
  6. ^ ab C. Gordon Bell, J. Craig Mudge, John E. McNamara, Ingeniería informática: una visión DEC del diseño de sistemas de hardware, Digital Press, 12 de mayo de 2014, ISBN 1483221105 , pág. 73 
  7. ^ Allison, David. "Curator, Division of Information Technology and Society, National Museum of American History, Smithsonian Institution" . Historias orales y en video del Instituto Smithsoniano . Consultado el 14 de junio de 2015 .
  8. ^ Historia oral de Gordon Bell , 2005, consultado el 19 de agosto de 2015
  9. ^ Referencia técnica 6025008 (PDF) . Biblioteca de referencia de hardware de computadoras personales. IBM. Agosto de 1981. págs. 2–123.
  10. ^ "Productos FTDI". www.ftdichip.com . Consultado el 22 de marzo de 2018 .
  11. ^ Interfaz con un PDP-11/05: el UART , blinkenbone.com, consultado el 19 de agosto de 2015
  12. ^ "Especificación del producto Zilog Z8440/1/2/4, Z84C40/1/2/3/4. Controlador de entrada/salida en serie" (PDF) .090529 zilog.com
  13. ^ "Descargar documento Zilog" (PDF) . www.zilog.com . Consultado el 22 de marzo de 2018 .
  14. ^ T'so, Theodore Y. (23 de enero de 1999). "Re: Comunicación en serie con el 16650". The Mail Archive . Consultado el 2 de junio de 2013 .
  15. ^ "Preguntas frecuentes: Los controladores 16550A UART y TurboCom 1994" . Consultado el 16 de enero de 2016 .
  16. ^ Zilog. "Manual del usuario de SCC/ESCC UM010901-0601" (PDF) . leocom.kr . Consultado el 13 de mayo de 2023 .
  17. ^ bill.herrin.us - Manual del puerto serie mejorado de 8 puertos Hayes ESP, 2 de marzo de 2004
  18. ^ "Biblioteca SoftwareSerial | Documentación de Arduino". Arduino . 2022-10-05. Archivado desde el original el 2023-06-01 . Consultado el 2023-06-10 .
  19. ^ Stoffregen, Paul. "Biblioteca AltSoftSerial, para un puerto serial adicional". www.pjrc.com . Archivado desde el original el 22 de marzo de 2023. Consultado el 10 de junio de 2023 .
  20. ^ "Ejemplo de comunicación serial Raspberry Pi Pico (MicroPython)". Electrocredible . 24 de enero de 2023. Archivado desde el original el 3 de junio de 2023. Consultado el 10 de junio de 2023 .
  21. ^ McKinney, Josh (5 de noviembre de 2022). "E/S programable (PIO) para MIDI con Raspberry Pi Pico". joshka.net . Archivado desde el original el 4 de abril de 2023 . Consultado el 10 de junio de 2023 .
  22. ^ Krenek, Pavel (2015). "Emulando UART mediante FlexIO" (PDF) . NXP . Archivado (PDF) desde el original el 2022-10-05 . Consultado el 2023-06-10 .

Lectura adicional

Enlaces externos