Transceptor asíncrono universal

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 19 de agosto de 2022; las comprobaciones requieren 2 ediciones .

El transceptor asíncrono universal (UART, en inglés  Universal Asynchronous Receiver-Transmitter, UART ) es un nodo de dispositivos informáticos diseñado para organizar la comunicación con otros dispositivos digitales. Convierte los datos transmitidos en un formato en serie para que puedan transmitirse a través de una línea digital física a otro dispositivo similar. El método de conversión está bien estandarizado y se usa ampliamente en tecnología informática (especialmente en dispositivos integrados y sistemas en un chip (SoC) ).

Es un circuito lógico, por un lado conectado al bus de un dispositivo informático, y por el otro, que tiene dos o más pines para conexión externa.

El UART puede ser un chip separado (como Intel I8251, I8250) o ser parte de un gran circuito integrado (como un microcontrolador ). Se utiliza para transferir datos a través del puerto serial de la computadora .

Método de transmisión y recepción

La transferencia de datos al UART se lleva a cabo un bit a intervalos regulares. Este intervalo de tiempo está determinado por la velocidad UART especificada y se especifica en baudios para una conexión específica (que en este caso corresponde a bits por segundo). Existe un rango generalmente aceptado de velocidades estándar: 300; 600; 1200; 2400; 4800; 9600; 19200; 38400; 57600; 115200; 230400; 460800; 921600 baudios. La velocidad ( , baudios) y la duración de bits ( , segundos) están relacionadas por . La tasa de baudios a veces se conoce con la palabra de argot boudrate o tasa de bits .

Además de los bits de información, el UART inserta automáticamente marcas de tiempo en el flujo, los llamados bits de inicio y parada . En la recepción, estos bits adicionales se eliminan del flujo. Por lo general, los bits de inicio y parada enmarcan un byte de información (8 bits), mientras que el bit de información menos significativo se transmite primero, inmediatamente después del inicio. Hay implementaciones de UART que transmiten 5, 6, 7 o 9 bits de información. Los bits de inicio y parada enmarcados son la premisa mínima. Algunas implementaciones de UART utilizan dos bits de parada durante la transmisión para reducir la posibilidad de que el receptor y el transmisor se desincronicen durante un tráfico intenso. El receptor ignora el segundo bit de parada y lo trata como una breve pausa en la línea.

Se acuerda que el estado pasivo (en ausencia de flujo de datos) de la entrada y salida del UART es 1 lógico. El bit de inicio siempre es 0 lógico, por lo que el receptor UART espera el borde de 1 a 0 y cuenta desde es un intervalo de tiempo de la mitad de la duración del bit (la mitad de la transmisión del bit de inicio). Si en este momento la entrada sigue siendo 0, entonces se inicia el proceso de recepción del mensaje mínimo. Para ello, el receptor cuenta duraciones de 9 bits seguidas (para datos de 8 bits), y en cada momento captura el estado de la entrada. Los primeros 8 valores son datos recibidos, el último valor es un valor de prueba (bit de parada). El valor del bit de parada siempre es 1. Si el valor real recibido es diferente, el UART corrige un error.

Para formar intervalos de tiempo, los UART de transmisión y recepción tienen una fuente de tiempo precisa (cronometraje). La precisión de esta fuente debe ser tal que la suma de los errores (del receptor y del transmisor) al establecer el intervalo de tiempo desde el comienzo del pulso de inicio hasta la mitad del pulso de parada no exceda la mitad (o mejor que un cuarto). ) del intervalo de bit [1] . Para un mensaje de 8 bits, este valor es 0,5/9,5 ≈ 5%. En la práctica, teniendo en cuenta las posibles distorsiones de la señal en la línea, el error de temporización total no debería ser superior al 3%. Dado que, en el peor de los casos, los errores de los relojes del receptor y del transmisor se pueden sumar, la tolerancia recomendada para la precisión del reloj del UART no supera el 1,5 %.

Dado que los bits de reloj ocupan parte del flujo de bits, el ancho de banda de UART resultante es menor que la velocidad del enlace. Por ejemplo, para paquetes 8-N-1 de 8 bits, los bits de sincronización ocupan el 20% del flujo, lo que a una velocidad de línea física de 115200 baudios significa una velocidad de transferencia de datos útil de 92160 bps o 11520 bytes/s.


Comprobación de paridad


bits de información
número de bits individuales de
información
estado del bit
de paridad
en modo:
incluso extraño
00000000 0 0 una
10100010 3 una 0
11010010 cuatro 0 una
11111110 7 una 0

Muchas implementaciones de UART tienen la capacidad de verificar automáticamente la integridad de los datos mediante la paridad de bits. Esta función se activa o desactiva escribiendo la palabra de inicialización adecuada en el registro de control interno de UART. Cuando esta función está habilitada, los bits mínimos de información de envío se rellenan con un bit de paridad final. Al transmitir un mensaje, el dispositivo lógico cuenta la cantidad de bits individuales en la parte de información del mensaje y, utilizando este número, establece el bit de paridad en uno de los estados, según la cantidad de bits individuales y el modo de verificación de paridad actual. especificado.

Hay modos de paridad par y paridad impar .  _ _ Con paridad par, el bit de paridad se establece en tal estado que la suma de los bits individuales en el paquete (incluidos los datos y el bit de paridad en sí) es un número par . Con paridad impar, el bit de paridad se establece de modo que la suma de todos los bits en el envío sea impar, como se muestra en la tabla [2] [3] .  

Cuando se recibe un paquete, el dispositivo lógico UART cuenta automáticamente la cantidad de bits 1 en el paquete, incluido el bit de paridad. Si se viola la paridad en el mensaje recibido, esto es una señal de un error en el canal de transmisión. Los errores en las transferencias binarias se reducen a la inversión de bits, por lo que la lógica de paridad solo puede detectar errores si se corrompe un número impar de bits (en 1, 3, etc.). Si se ha producido una inversión, por ejemplo, 2 bits, dicho error no se detecta. Cuando se detecta un error de paridad, la lógica UART establece un indicador de error en su palabra de estado, que puede ser leído por un dispositivo externo, como un procesador de computadora, y el error se maneja adecuadamente.

Abreviatura de parámetros

Se desarrolló y adoptó una forma breve de escribir parámetros UART, como el número de bits de datos, la presencia y el tipo del bit de paridad, el número de bits de parada. Parece una entrada de número-letra-número, donde:

Por ejemplo, la entrada 8-N-1 significa que el UART está configurado en 8 bits de datos, sin paridad y con un bit de parada. Para completar los parámetros, esta entrada se proporciona con una indicación de la velocidad UART, por ejemplo, 9600/8-N-1.

Romper

Algunos UART tienen la capacidad de enviar y recibir un mensaje especial llamado Break. Consiste en un estado cero continuo de la línea con una duración obviamente mayor que la ráfaga mínima, normalmente 1,5 ráfagas mínimas (para 8N1 esto es intervalos de 15 bits). Algunos protocolos de comunicación usan esta propiedad, por ejemplo, el protocolo LIN usa Break para indicar un nuevo marco.

Control de flujo

Los primeros dispositivos UART podían ser tan lentos que no podían seguir el flujo de datos recibidos. Para resolver este problema, los módulos UART a veces se proporcionaban con salidas y entradas de control de flujo separadas. Cuando el búfer de entrada estaba lleno, la lógica del UART receptor configuraba la salida correspondiente para desactivarla y el UART transmisor suspendía la transmisión.

Más tarde, el control de flujo se asignó a los protocolos de comunicación (por ejemplo, el método XOn/XOff ), y la necesidad de líneas de control de flujo separadas casi desapareció.

En la actualidad, el control de flujo a nivel de hardware todavía se usa, por ejemplo, en microcontroladores (ultra) eficientes energéticamente.

Capa física

El circuito lógico UART tiene circuitos de E/S correspondientes a la tecnología de circuitos semiconductores: CMOS , TTL , etc. Esta capa física se puede usar dentro de un solo dispositivo; sin embargo, como regla, no es adecuada para conexiones largas conmutadas debido a la baja protección. contra la destrucción eléctrica y la interferencia. Se han desarrollado capas físicas especiales para estos casos , como bucle de corriente , RS-232 , RS-485 , LIN y similares.

Un tipo específico de capa física de interfaz asíncrona es la capa física IrDA .

Existen capas físicas UART para entornos complejos. En cierto sentido, un módem de teléfono de computadora estándar también puede denominarse una capa física específica de una interfaz asíncrona. Hay microcircuitos especiales para módems cableados hechos específicamente como la capa física de una interfaz asíncrona (es decir, protocolo transparente). La capa física del canal de radio también se produce en forma de módulos de receptores de radio y transmisores de radio.

Controlador de capa física

Para convertir las entradas y salidas lógicas del UART en señales del nivel físico correspondiente, se utilizan circuitos electrónicos especiales, llamados drivers. Para todos los niveles físicos populares, existen controladores integrados en forma de microcircuitos.

Dúplex

La lógica UART suele permitir la transmisión y recepción simultáneas. Esta capacidad a menudo se denomina dúplex en la jerga . Sin embargo, no todas las capas físicas permiten la transferencia simultánea de datos en ambas direcciones. En tales casos, se acostumbra hablar de comunicación semidúplex . También hay soluciones en las que la transferencia de datos es posible físicamente solo en una dirección, luego se habla de comunicación simplex .

Red

Inicialmente, el UART estaba destinado a la comunicación entre dos dispositivos punto a punto. Posteriormente, se crearon capas físicas que permiten conectar más de dos UART según el principio “uno habla, varios escuchan”. Tales capas físicas se denominan red . Hay implementaciones del tipo bus común (cuando todos los transceptores están conectados a un cable) y anillo (cuando los receptores y transmisores están conectados en pares en un anillo cerrado). La primera opción es más simple y más común. La segunda opción es más complicada, pero más confiable y rápida: se garantiza la operatividad de todos los nodos (el nodo transmisor escuchará el eco de su mensaje solo si todos los nodos lo transmiten con éxito); cualquier nodo puede iniciar la transmisión en cualquier momento sin preocuparse por el riesgo de una colisión. Las capas físicas de red más conocidas son RS-485 y LIN .

Compatibilidad con UART en los principales sistemas operativos

El uso generalizado de UART en la tecnología digital predeterminó la integración del soporte para esta interfaz en la API de muchos sistemas operativos. Por regla general, esta interfaz aparece en la documentación del sistema operativo como puerto COM o puerto serie .

Microsoft Windows

Los puertos serie en Win32 se tratan como archivos. La función CreateFile se utiliza para abrir un puerto. Puede haber muchos puertos, por lo que se denominan COM1, COM2, etc. en el orden en que se encuentran los controladores de dispositivo. Los primeros 9 puertos también están disponibles como canalizaciones con nombre para la transferencia de datos (disponibles con los nombres "COM1", "COM2", ...), este método de acceso se considera obsoleto. Se recomienda direccionar todos los puertos como archivos (llamados "\\.\COM1", "\\.\COM2", ... "\\.\COMx").

La búsqueda de nombres de dispositivos PnP en el sistema se realiza llamando a SetupDiGetClassDevs. La clave HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM existe en el registro, que muestra los puertos COM disponibles actualmente.

Hay una sección en el registro para cada puerto. Estas secciones tienen los siguientes nombres:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Serial\Parameters\Serial10000,

donde el último valor "Serial10000" es un número único para cada nuevo puerto COM agregado al sistema, para el segundo - "Serial10001", etc.

UNIX

Los puertos COM en el sistema operativo Unix ( Linux ) son archivos de dispositivo de caracteres. Estos archivos generalmente se encuentran en el directorio /dev y se denominan

Para el acceso programático al puerto COM, debe abrir el archivo correspondiente para leer/escribir y realizar llamadas a las funciones especiales tcgetattr (para conocer la configuración actual) y tcsetattr (para establecer una nueva configuración). También puede ser necesario realizar llamadas ioctl con ciertos parámetros. Después de eso, al escribir en un archivo, los datos se enviarán a través del puerto y, al leer, el programa recibirá los datos ya recibidos del búfer del puerto COM.

Los dispositivos llamados "ttyxx" se utilizan como dispositivos de servidor, es decir, la aplicación que abrió este dispositivo generalmente espera una llamada entrante del módem. La aplicación predeterminada clásica es getty , que espera una llamada entrante, luego configura el puerto COM de acuerdo con los archivos de configuración, genera "login:" allí, acepta un nombre de usuario y ejecuta el comando "loginUserName" como un niño, con entrada estándar y salida redirigida al puerto COM. Este comando, a su vez, solicita y verifica la contraseña y, si tiene éxito, inicia (no como un elemento secundario, sino en lugar de llamar a execve en el mismo proceso) el shell de usuario predeterminado especificado en el archivo /etc/passwd.

Esta tecnología surgió históricamente en la década de 1970, cuando computadoras como PDP-11 (en la URSS la serie se llamaba SM EVM ) o VAX se usaban bajo sistema operativo UNIX , permitiendo la conexión de muchos terminales para el trabajo de muchos usuarios. Los terminales, y por lo tanto toda la interfaz de usuario, se conectaban a través de puertos serie, con la capacidad de conectar un módem en lugar de un terminal y luego llamar a la computadora por teléfono. Hasta ahora, los sistemas operativos similares a UNIX tienen una pila de terminales y, por lo general, 3 implementaciones de terminales: un puerto serie, una pantalla en modo texto + consola de teclado y un "bucle invertido" a uno de los archivos abiertos de la aplicación de control (así es como se implementan telnetd, sshd y xterm).

Los dispositivos de cliente de puerto serie para realizar llamadas al exterior se denominan cuaxx en muchos (pero no en todos) los UNIX.

Dado que solo se puede acceder al puerto serie en UNIX a través de la pila de terminales, puede ser un terminal de control para procesos y grupos (envíe SIGHUP al desconectarse del módem y SIGINT en Ctrl-C), admita la edición de la última línea ingresada con las teclas de flecha en el nivel del kernel, etc. Deshabilitar esta función para convertir el dispositivo en una "tubería" para un flujo de bytes requiere llamadas ioctl.

OS/2

El controlador COM.SYS disponible solo admite 4 puertos COM, cada uno de los cuales debe tener su propia línea de interrupción. Para dar servicio a los puertos COM con una línea de interrupción común, debe usar el controlador SIO [4] .

androide

Dado que Android se ejecuta en el kernel de Linux, trabajar con puertos COM en Android es básicamente lo mismo que trabajar en Linux. Pero tenga en cuenta que para trabajar con puertos COM en Android, necesita derechos de root.

Puertos virtuales

Actualmente, las interfaces físicas basadas en UART prácticamente han desaparecido de los equipos digitales de consumo. Sin embargo, la facilidad de uso y la abundancia de software que utilizaba el acceso a dispositivos externos a través de un puerto COM obligó a los desarrolladores de dispositivos conectados a computadoras a crear controladores para puertos COM virtuales ( VCP  - puerto COM virtual). Es decir, puertos COM para los que no existe un UART de hardware correspondiente.

Protocolos de comunicación

Solo en tareas muy raras es aceptable enviar un flujo de datos directo a través del UART. Como regla, es necesario indicar el comienzo y el final del bloque de datos; garantizar el control de la integridad de los datos y restaurar los elementos perdidos; controlar el flujo de datos para evitar sobrecargar el búfer de entrada, etc. Para estos y muchos otros propósitos , se inventan protocolos de comunicación  : acuerdos sobre conjuntos de datos especiales que se intercambian entre ambos sistemas informáticos para completar con éxito la tarea de establecer comunicación y transferir datos básicos. Los algoritmos de protocolo dependen de las tareas establecidas para el sistema y las características de la capa física UART. El algoritmo de protocolo generalmente se implementa en software en lugar de hardware.

Hay una amplia variedad de protocolos de comunicación disponibles para usar con UART. El más famoso:

Estandarización

La idea de la transferencia de datos asíncrona apareció en aquellos lejanos tiempos, cuando aún se cuidaba poco la estandarización y lo mejor que se podía esperar de vendedores de soluciones dispares era la publicación abierta de algoritmos para el funcionamiento de sus productos. En realidad, por lo tanto, no existe un estándar UART como tal, pero la lógica de funcionamiento de UART se describe como parte del producto en muchos otros estándares: bucle de corriente , RS-232 , ISO/IEC 7816 , etc.

Véase también

Notas

  1. Determinación de los requisitos de precisión del reloj para las comunicaciones UART . Consultado el 22 de septiembre de 2016. Archivado desde el original el 19 de septiembre de 2011.
  2. Corrección de errores y códigos de detección
  3. Detección y corrección de errores
  4. Instalación de una placa de puerto COM en una computadora (enlace inaccesible) . Consultado el 8 de junio de 2014. Archivado desde el original el 15 de mayo de 2011. 

Enlaces