stringtranslate.com

Receptor-transmisor asíncrono universal

Diagrama de bloques para una UART

Un receptor-transmisor asíncrono universal ( UART / ˈ juː ɑːr t / ) es un dispositivo periférico para comunicación en serie 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 parada 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 formato [1] para enlaces de depuración cortos. Los primeros teletipos utilizaban bucles de corriente .

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

Un UART suele ser un circuito integrado (IC) individual (o parte de un) que se utiliza para comunicaciones en serie a través de un puerto serie de computadora o dispositivo periférico . Uno o más periféricos UART suelen estar integrados en chips de microcontroladores . Los UART especializados se utilizan para automóviles , tarjetas inteligentes y SIM .

Un dispositivo relacionado, el receptor-transmisor síncrono y asíncrono universal (USART), también admite el funcionamiento síncrono.

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

Transmitir y recibir 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 forma 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 formas seriales y paralelas. La transmisión en serie de información digital (bits) a través de un solo cable u otro medio es menos costosa que la transmisión en paralelo a través de múltiples cables.

La UART generalmente no genera ni recibe directamente las señales externas utilizadas entre diferentes equipos. Se utilizan dispositivos de interfaz separados 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 voltaje estandarizados, niveles de corriente u otras señales.

La comunicación puede ser de 3 modos:

Para que UART funcione, las siguientes configuraciones deben ser las mismas tanto en el lado transmisor como en el receptor:

Para el nivel de voltaje, 2 módulos UART funcionan bien cuando ambos tienen el mismo nivel de voltaje, por ejemplo, 3V-3V entre los 2 módulos UART. Para utilizar 2 módulos UART a diferentes niveles de voltaje, es necesario agregar un circuito de interruptor de nivel externamente. [3]

Encuadre 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. Las partes comunicantes deben acordar previamente el número de datos y bits de formato, la presencia o ausencia de un bit de paridad, la forma de paridad (par o impar) y la velocidad de transmisión. 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 bits. 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 el transmisor y el 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 Ethernet cuando se utilizan tramas de rendimiento máximo con una carga útil de 1500 bytes es de hasta el 95 % y hasta el 99 % con tramas gigantes de 9000 bytes . Sin embargo, debido a la sobrecarga del protocolo de Ethernet y al tamaño mínimo de carga útil de 42 bytes, si se van a enviar mensajes pequeños de uno o unos pocos bytes, la eficiencia del protocolo de Ethernet cae mucho más abajo que la eficiencia constante del 8N1 del UART del 80%.

El estado inactivo, sin datos, es de alto voltaje o está encendido. 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 está enmarcado 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 de la izquierda en este diagrama) se transmite primero, pero hay excepciones (como el terminal de impresión IBM 2741 ).

Bit de inicio

El bit de inicio indica al receptor que viene un nuevo personaje.

bit de datos

Los siguientes cinco a nueve bits, según el 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 bits de parada. Le indican al receptor que el personaje está completo. Dado que el bit de inicio es lógico bajo (0) y el bit de parada es lógico alto (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 tiempo que un 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 se ejecuta 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 del bit, es válido y señala el inicio de un nuevo carácter. En caso contrario, se considera un pulso espurio y se ignora. Después de esperar un poco más, se vuelve a muestrear el estado de la línea y el nivel resultante se registra en un registro de desplazamiento. Una vez transcurrido el número requerido de períodos de bits para la longitud del carácter (de 5 a 8 bits, normalmente), el contenido del registro de desplazamiento se pone a disposición (en paralelo) para el sistema receptor. La UART establecerá una bandera que indica que hay nuevos datos disponibles y también puede generar una interrupción del procesador para solicitar que el procesador host transfiera los datos recibidos.

Los UART en comunicación no tienen ningún 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 envía a una velocidad ligeramente diferente de la que debería. Los UART simplistas no hacen esto; en lugar de eso, 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]

Es una característica estándar de un UART almacenar el carácter más reciente mientras recibe el siguiente. Este "doble almacenamiento en búfer" le da a la computadora receptora un tiempo completo de transmisión de caracteres para recuperar un carácter recibido. Muchos UART tienen una pequeña memoria intermedia de primero en entrar, primero en salir ( FIFO ) 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 el tiempo no tiene que determinarse a partir del estado de la línea, ni está sujeto 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), 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 utilizan 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 tardar mucho tiempo en relación con las velocidades de la CPU, un 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 los siguientes caracteres" también se puede indicar con una interrupción.

Solicitud

Los UART de transmisión y recepción deben configurarse para la misma velocidad de bits, longitud de caracteres, paridad y bits de parada para un funcionamiento adecuado. El UART receptor puede detectar algunas configuraciones que no coinciden y establecer un bit de indicador de "error de trama" para el sistema host; En casos excepcionales, el UART receptor producirá un flujo errático de caracteres mutilados y los transferirá al sistema anfitrión.

Los puertos serie típicos utilizados con computadoras personales conectadas a módems usan ocho bits de datos, sin paridad y un bit de parada; Para esta configuración, la cantidad de caracteres ASCII por segundo es igual a la velocidad 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 muestreando el estado de un puerto de entrada o manipulando directamente un puerto de salida para la transmisión de datos. Si bien consume mucha CPU (ya que la sincronización de la CPU es crítica), se puede omitir el chip UART, ahorrando dinero y espacio. La técnica se conoce como bit-banging .

Historia

Algunos de los primeros esquemas 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) fueron interruptores mecánicos giratorios ( conmutadores ). Varios códigos de caracteres que utilizaban 5, 6, 7 u 8 bits de datos se hicieron comunes en los teleimpresores y, más tarde, en los periféricos de las computadoras. El teletipo era un excelente dispositivo de E/S de uso general para una computadora pequeña.

Gordon Bell de DEC diseñó el primer UART, que ocupa una placa de circuito completa llamada unidad de línea , para la serie de computadoras PDP que comienza con la PDP-1 . [6] [7] Según Bell, la principal innovación de la UART fue su uso de muestreo para convertir la señal al dominio digital, permitiendo una sincronización más confiable que los circuitos anteriores que usaban dispositivos de sincronización analógicos con potenciómetros ajustados manualmente . [8] Para reducir el costo del cableado, la placa posterior 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 uno de los primeros UART de un solo chip 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 UART de principios de la década de 1980 fue el National Semiconductor 8250 utilizado en la tarjeta adaptadora de comunicaciones asíncronas de la PC IBM original . [9] En la década de 1990, se desarrollaron UART más nuevos con buffers en el chip. Esto permitió una mayor velocidad de transmisión sin pérdida de datos y sin requerir 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 16C550, 16C650, 16C750 y 16C850 .

Dependiendo del fabricante, se utilizan diferentes términos para identificar los dispositivos que realizan las funciones UART. Intel llamó a su dispositivo 8251 "Interfaz de comunicación programable". MOS Technology 6551 se conocía con el nombre de "Asynchronous Communications Interface Adapter" (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íncrono start-stop, que otros llamaban UART. Zilog fabricó varios controladores de comunicaciones 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 todavía necesitan puertos serie RS-232, ahora se utilizan comúnmente puentes externos de USB a UART . Combinan los cables de hardware y un chip para realizar la conversión de 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 brindar a los diseñadores de hardware la capacidad de interactuar con otros chips o dispositivos que usan RS-232 o RS. -485 para comunicación.

Condiciones especiales del transceptor

Error de desbordamiento

Se produce un error de desbordamiento cuando el receptor no puede procesar el carácter que acaba de llegar antes de que llegue el siguiente. Varios dispositivos tienen diferentes cantidades de espacio de búfer para contener los caracteres recibidos. La CPU o el controlador DMA deben dar servicio al UART para eliminar caracteres del búfer de entrada. Si la CPU o el controlador DMA no atiende el 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 insuficiencia de datos

Se produce un error de insuficiencia de datos cuando el transmisor UART ha completado el envío de un carácter y el búfer de transmisión está vacío. En modos asíncronos, esto se trata como una indicación de que no quedan datos por transmitir, en lugar de un error, ya que se pueden agregar bits de parada adicionales. Esta indicación de error se encuentra comúnmente en los USART, ya que una insuficiencia de datos es más grave en los sistemas síncronos.

error de encuadre

Un UART detectará un error de trama cuando no vea un bit de "parada" en el momento esperado del bit de "parada". Como el bit de "inicio" se utiliza para identificar el comienzo de un carácter entrante, su sincronización 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" (de acuerdo con la cantidad de datos y bits de paridad para los cuales está configurado el UART), el UART señalará un error de entramado. Una condición de "interrupción" en la línea también se indica como un error de encuadre.

error de paridad

Se produce un error de paridad cuando la paridad del número de bits no coincide con la especificada por el bit de paridad. La verificació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 ocurrirá si se ha habilitado la verificación de paridad.

condición de rotura

Una condición de interrupción se produce cuando la entrada del receptor está en el nivel de "espacio" (lógico bajo, es decir, '0') durante más tiempo que un cierto período de tiempo, normalmente, durante más de un carácter. Esto no es necesariamente un error, pero al receptor le aparece como un carácter de todos los bits cero con un error de encuadre.

El término "ruptura" deriva de la señalización de bucle actual , 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 cuando no fluye corriente, y un período muy largo sin flujo de corriente a menudo es causado por una rotura u otra falla en la línea. Algunos equipos transmitirán deliberadamente el nivel "espacio" durante más tiempo que 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 "interrupción" larga puede ser una forma útil de llamar la atención de un receptor que no coincide para que haga algo (como reiniciarse). Los sistemas informáticos pueden utilizar el nivel de "descanso" 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 interrupción 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 computadoras 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 enviado con la computadora 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 operaba bajo un sistema multitarea o si manejaba interrupciones. de los controladores de disco. Los módems de alta velocidad utilizaban UART que eran compatibles con el chip original pero que incluían buffers FIFO adicionales, lo que daba al software tiempo adicional para responder a los datos entrantes.

Una mirada a los requisitos de rendimiento a altas velocidades 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 necesaria ] [ dudoso - discutir ] Algunas unidades de disco duro y controladores de video violan esta especificación. 9600 bit/s entregará un carácter aproximadamente cada milisegundo, por lo que un 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. Las tarifas superiores a esta pueden recibir un nuevo personaje antes de que se haya recuperado el anterior y, por lo tanto, el personaje anterior se perderá. Esto se conoce como error de desbordamiento y provoca la pérdida de uno o más caracteres.

Un FIFO de 16 bytes permite recibir hasta 16 caracteres antes de que la computadora tenga que atender la interrupción. Esto aumenta la velocidad de bits máxima que la computadora puede procesar de manera confiable 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 la computadora solo tiene que atender entre un 8 y un 12 % de interrupciones, lo que permite más tiempo de CPU para actualizar la pantalla o realizar otras tareas. De este modo, las respuestas del ordenador también mejorarán.

Emulación

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

Ver también

Referencias

  1. ^ "Comunicación serie RS-232 frente a 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. 
  3. ^ Instrumento de Texas (1 de marzo de 2021). "Receptor/transmisor asíncrono universal (UART)" (PDF) . ti.com . pag. 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 comunicaciones UART" (PDF) . an2141 . Máxima Integrada . 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. pag. 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 de DEC del diseño de sistemas de hardware, Digital Press, 12 de mayo de 2014, ISBN 1483221105 , p. 73 
  7. ^ Allison, David. "Curador, División de Sociedad y Tecnología de la Información, Museo Nacional de Historia Estadounidense, Institución Smithsonian". Historias orales y en vídeo del Instituto Smithsonian . 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 , flashenbone.com, consultado el 19 de agosto de 2015
  12. ^ "Especificación de producto Zilog Z8440/1/2/4, Z84C40/1/2/3/4. Controlador de entrada/salida serie" (PDF) .090529 zilog.com
  13. ^ "Descarga de documentos Zilog" (PDF) . www.zilog.com . Consultado el 22 de marzo de 2018 .
  14. ^ Así es, Theodore Y. (23 de enero de 1999). "Re: Comunicación serie con el 16650". El Archivo de Correo . Consultado el 2 de junio de 2013 .
  15. ^ "Preguntas frecuentes: controladores 16550A UART y TurboCom 1994" . Consultado el 16 de enero de 2016 .
  16. ^ Zilog. "Manual de 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 ESP de Hayes, 2 de marzo de 2004
  18. ^ "Biblioteca SoftwareSerial | Documentación de Arduino". Arduino . 2022-10-05. Archivado desde el original el 1 de junio de 2023 . Consultado el 10 de junio de 2023 .
  19. ^ Stoffregen, Paul. "Biblioteca AltSoftSerial, para un puerto serie 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 en serie Raspberry Pi Pico (MicroPython)". Electrocreíble . 2023-01-24. 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). "IO programable (PIO) para MIDI con Rasberry 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). "Emulación de UART mediante FlexIO" (PDF) . NXP . Archivado (PDF) desde el original el 5 de octubre de 2022 . Consultado el 10 de junio de 2023 .

Otras lecturas

enlaces externos