UART (Receptor/Transmisor Asíncrono Universal) es un protocolo de comunicación en serie de uso común que se usa ampliamente en la comunicación entre microcontroladores o varios dispositivos integrados. Este artículo presentará en detalle los principios básicos, los modos de trabajo, el cálculo de la velocidad en baudios y los métodos de uso comunes de la comunicación UART para ayudar a las personas con ciertas capacidades de desarrollo de microcontroladores a comprender y aplicar mejor la comunicación UART.
referencia rápida:
Principios básicos de la comunicación UART
Proceso de transferencia de datos
Bit de parada y verificación de paridad en comunicación asíncrona aUART
Transceptor de sondeo UART y transceptor de interrupción
Transceptor UART con caché de datos
Aplicaciones UART en microcontroladores y sistemas integrados.
UART (Receptor/Transmisor Asíncrono Universal) es un protocolo de comunicación en serie y una interfaz de hardware que se utiliza para transmitir datos en serie entre computadoras y dispositivos externos. La comunicación UART es un protocolo de comunicación asíncrono, lo que significa que los bits de datos se envían en un intervalo de tiempo específico sin la necesidad de mantener una señal de reloj compartida entre el envío y la recepción.
Principios básicos de la comunicación UART
La comunicación UART es un método de comunicación en serie asíncrono y su principio básico es transmitir bits de datos binarios a través de líneas de datos. El sistema de comunicación UART se compone principalmente de dos partes: el extremo emisor y el extremo receptor, y los datos se transmiten entre ellos a través de líneas de datos. El extremo emisor convierte los datos que se enviarán en señales paralelas, luego convierte las señales paralelas en señales en serie a través del circuito impulsor y envía las señales en serie a la línea de datos a través del circuito emisor. El extremo receptor restaura la señal en la línea de datos a una señal paralela a través del circuito receptor y luego convierte la señal paralela en el bit de datos original a través del circuito de decodificación.
La comunicación UART adopta un método de comunicación asíncrona, es decir, la transmisión de datos se realiza a través de líneas de datos entre el extremo emisor y el extremo receptor. En la comunicación asincrónica, no es necesario que el remitente y el receptor estén activos al mismo tiempo, sino que los bits de inicio y parada se utilizan para identificar el inicio y el final de la trama de datos. Específicamente, cuando el extremo emisor genera el bit de inicio, envía un bit de datos; luego espera el bit de inicio del extremo receptor. Si se recibe el bit de inicio, continúa enviando el siguiente bit de datos; si el bit de inicio es no recibido, entonces se considera que la transmisión de la trama de datos falló. De manera similar, cuando el extremo receptor genera un bit de parada, envía un bit de verificación, luego espera el bit de parada del extremo emisor. Si se recibe el bit de parada, la transmisión de la trama de datos se considera exitosa.
Proceso de transferencia de datos
El extremo transmisor envía los bits de datos a la línea TX según el formato acordado.
El extremo receptor recibe datos a través de la línea RX y analiza los datos según el bit de inicio, el bit de datos, el bit de verificación y el bit de parada.
El proceso de transmisión de datos se implementa mediante lógica de hardware y generalmente no requiere intervención activa.
La velocidad en baudios representa el número de bits de datos binarios transmitidos a través de la línea por unidad de tiempo, generalmente expresado en bps (bits por segundo). Por ejemplo, si la velocidad en baudios es de 9600 bps, se pueden transmitir 9600 bits de datos por segundo.
La velocidad en baudios de los datos de transmisión del puerto serie es generada por el sistema de reloj del microcontrolador, por lo que tiene una relación matemática con el reloj del sistema del microcontrolador.
Velocidad de baudios = (16 * frecuencia de reloj) / (32 * tiempo de muestreo) + (1 * frecuencia de reloj) / (32 * tiempo de muestreo) - (1 * frecuencia de reloj) / (64 * tiempo de muestreo)
Entre ellos, el tiempo de muestreo se refiere al intervalo de tiempo desde el último bit de inicio hasta el bit de inicio actual. Por ejemplo, si el tiempo de muestreo es de 10 ns, la velocidad en baudios es de 9600 bps.
Las velocidades de baudios comunes son 2400, 4800, 9600, 19200, 38400, 57600, 115200... Todas son múltiplos enteros de 2400, por lo que se pueden generar diferentes velocidades de baudios a través de divisores de frecuencia. Aunque los microcontroladores actuales tienen diferentes frecuencias, las más comunes son 32 MHz, 48 MHz y 144 MHz. Generalmente tienen un reloj de sistema externo que proporciona una frecuencia de reloj básica (como 1 MHz) para los dispositivos periféricos del microcontrolador. También se genera la velocidad en baudios UART. desde este reloj Generar señal de reloj.
Cabe señalar que en el uso real, la frecuencia del reloj puede verse afectada por algunos factores, como la deriva del oscilador de cristal, el ruido de la fuente de alimentación, etc. Por lo tanto, para garantizar la precisión y confiabilidad de la transmisión de datos, se recomienda utilizar un oscilador de cristal externo o un generador de reloj y calibrarlo y compensarlo al diseñar un sistema de comunicación UART.
Bits de parada y paridad en comunicación asíncrona UART
En la comunicación asíncrona UART, el bit de parada se utiliza para indicar el final de la trama de datos. El bit de parada puede ser de 1 o 2 bits. Cuando el bit de parada es de 1 bit, se agrega un intervalo de tiempo adicional después de cada byte de datos para compensar los errores causados por la fluctuación del reloj y otros factores. Por ejemplo, si la velocidad en baudios es 9600 bps, el intervalo de tiempo entre cada byte es 4 ms, por lo que el intervalo de tiempo entre cada bit de parada es 4 ms/8 = 0,5 ms.
Cuando el bit de parada es de 2 bits, se agregan dos intervalos de tiempo adicionales después de cada byte de datos, es decir, el intervalo de tiempo para cada byte es 4 ms/(8 + 4) = 0,3125 ms. Este modo es adecuado para escenarios de transmisión de datos que requieren mayor precisión.
La verificación de paridad es un método de detección de errores comúnmente utilizado para detectar errores y pérdidas durante la transmisión de datos. En la comunicación UART, la precisión y confiabilidad de la transmisión de datos se pueden mejorar configurando el bit de paridad.
Cabe señalar que el bit de paridad solo puede detectar errores y pérdidas durante la transmisión de datos, pero no puede garantizar la integridad y corrección de los datos. Por lo tanto, cuando se utiliza la comunicación UART, se deben tomar otras medidas para garantizar la exactitud y confiabilidad de la transmisión de datos.
Transceptor de sondeo UART y transceptor de interrupción
Como mencionamos antes, la comunicación UART consiste en dividir un byte de datos en varios bits y luego enviarlos uno por uno. Cuando se envía un byte de datos al transmisor UART, el byte se convierte en bits. Después de que el UART envía este byte, se genera un bit de parada. En este momento, el transmisor UART está inactivo y puede continuar enviando el siguiente byte. . Por lo general, el transmisor UART generará un estado inactivo después de enviar un byte. La transmisión de sondeo consiste en esperar este estado inactivo y enviar el siguiente byte.
Lo mismo ocurre con la recepción UART. Cuando el receptor UART termina de recibir un byte y recibe la señal del bit de parada, guardará los datos recién recibidos en el registro de datos UART del microcontrolador y generará un bit de bandera de recepción. Este byte de datos se puede recibir.
Sin embargo, en los sistemas de microcomputadoras de un solo chip, a menudo hay más que solo aplicaciones de transceptor UART y se deben utilizar transceptores de interrupción. Por lo general, el transceptor UART del microcontrolador tiene una interrupción de recepción de RX y una interrupción de finalización de TX. Al interrumpir la transmisión, el transmisor UART está en estado inactivo. En este momento, el primer byte se escribe en el transmisor. Después de transmitir el byte, se genera una interrupción de finalización de TX. Los bytes posteriores se completan en la función de servicio del TX. interrupción de finalización Y generar la siguiente interrupción, y finalmente hasta que se transmitan todos los bytes que deben transmitirse. Al interrumpir la recepción, el receptor UART generará una interrupción de recepción RX después de recibir un byte. El byte recibido se lee en la función de servicio de interrupción de recepción RX. El byte recibido se lee durante cada interrupción.
Transceptor UART con caché de datos
En muchos sistemas de microcontroladores, se proporcionan funciones de interfaz como UART Read y UART Write. Algunos microcontroladores avanzados incluso tienen funciones de devolución de llamada, como UART Read Callback y UART Write Callback para enviar y recibir datos. Por lo general, las capacidades de procesamiento de datos de muchos microcontroladores son mucho más rápidas que la comunicación UART, por lo que los sistemas de microcontroladores que utilizan las funciones de interfaz anteriores utilizan la memoria caché de datos para ayudar al transceptor UART. Los métodos comunes de envío y recepción de UART incluyen los siguientes:
1、Envío y recepción de cola de datos (Cola)
Este método es adecuado para la mayoría de los microcontroladores, siempre que haya interrupciones. Cuando se utiliza UART Write para enviar datos, los datos no se escriben directamente en el transmisor UART, sino que se colocan en un búfer de anillo. Luego lea el búfer de anillo en la función de servicio de interrupción completa de transmisión UART TX y envíe el byte leído al transmisor UART, y luego espere a que se ejecute nuevamente la función de servicio de interrupción de finalización de transmisión TX para enviar el siguiente byte hasta que el búfer de anillo esté hasta Se envían los datos del área. Un búfer de anillo generalmente tiene una variable que marca la cabeza y la cola, siempre que los valores de las variables de la cabeza y la cola no sean iguales, significa que el búfer tiene datos. Cuando se utiliza UART Read para recibir datos, los datos no se obtienen directamente del receptor UART, sino del búfer en anillo. En la función de servicio de interrupción UART RX, los bytes recibidos por el receptor UART se envían al búfer de anillo. Los datos obtenidos cuando el microcontrolador ejecuta la lectura UART son los datos en el búfer de anillo. Esto garantiza que el programa del microcontrolador no tenga que esperar. para el receptor UART. .
La ventaja de este diseño es que puede procesar eficazmente datos en tiempo real y evitar la pérdida de datos. Sin embargo, si el tamaño de la cola no se establece correctamente, es posible que se produzca un desbordamiento de datos. Por lo tanto, debemos establecer el tamaño de la cola de manera razonable de acuerdo con el escenario de la aplicación real.
2、Transceptor UART con hardware FIFO
Muchos microcontroladores avanzados utilizan hardware FIFO para el transceptor UART. Un microcontrolador sin hardware FIFO ejecutará una función de interrupción cada vez que envíe y reciba datos. Cuando se comunica a una alta velocidad de baudios, el microcontrolador ingresará interrupciones con frecuencia, lo que afectará el procesamiento de la tarea principal del microcontrolador. El hardware FIFO puede aliviar esta contradicción. Por ejemplo, el UART FIFO de una microcomputadora de un solo chip es de 16 bytes. Al enviar datos, la computadora de un solo chip puede transmitir hasta 16 bytes de datos a la vez. La interrupción de finalización de la transmisión UART TX no se generará hasta el 16 Se envían datos de bytes. Al recibir datos, generalmente hay interrupciones "medio llenas" e interrupciones de "tiempo de espera", es decir, el número de bytes en el FIFO de recepción excede los 8 bytes, o el FIFO de recepción no está vacío pero no se reciben nuevos bytes por más de 1 byte de datos, generando una interrupción de recepción UART RX. Por lo general, se utiliza UART con hardware FIFO en combinación con una cola de datos, y la eficiencia de transmisión es mayor en comunicaciones de alta velocidad de baudios.
3、Transceptor UART con DMA
DMA (Acceso directo a la memoria) es una tecnología que puede asignar directamente un área de almacenamiento determinada de la computadora al espacio de direcciones de la memoria, logrando así un acceso unificado a la memoria y otros periféricos. Cuando la UART recibe datos, los datos se escribirán directamente en el área de memoria controlada por DMA y luego activarán una interrupción. En la rutina del servicio de interrupción, podemos recuperar los datos del área de memoria controlada por DMA, realizar el procesamiento necesario y luego enviarlos a través de UART.
El uso de DMA para la transmisión UART es particularmente útil para transmitir múltiples datos consecutivos, como las funciones de devolución de llamada de lectura UART y devolución de llamada de escritura UART mencionadas anteriormente. Al enviar múltiples flujos de datos continuamente, los flujos de datos se pueden colocar en varios búferes diferentes del microcontrolador, y luego el DMA apunta directamente a la dirección del búfer. Una vez completada la transmisión del DMA, se genera una devolución de llamada de escritura UART y luego el DMA apunta hacia abajo en la devolución de llamada de escritura UART.Una dirección de búfer. Al recibir datos, también puede reservar un búfer de recepción. Los datos transferidos por DMA se transfieren al búfer. Cuando la transferencia está llena, se genera una devolución de llamada de lectura UART y apunta al siguiente búfer de recepción. Al mismo tiempo, el microcontrolador El programa principal puede procesar el contenido del área del buffer que ha recibido datos completos.
La comunicación UART se utiliza comúnmente en diversas aplicaciones, como sistemas integrados, sensores, módulos inalámbricos, consolas de depuración, etc.
Es un método de comunicación simple y confiable adecuado para comunicaciones de corta distancia, punto a punto o punto a multipunto.
RS232 es un estándar de capa física común utilizado en comunicaciones en serie que define niveles de voltaje, conectores y distribución de señales. UART se utiliza a menudo con RS232, pero no necesariamente.
Cuando se utiliza un UART para la comunicación RS232, se requiere un adaptador o convertidor para convertir los niveles lógicos a niveles RS232.
Aplicaciones UART en microcontroladores y sistemas integrados.
Los microcontroladores suelen incluir módulos UART para comunicarse con dispositivos externos.
UART se puede utilizar para conectarse a la computadora a través del puerto serie para depurar y descargar programas.
También se puede utilizar para comunicarse con dispositivos externos como sensores, pantallas LCD, módulos GPS, etc.
Este artículo presenta en detalle los principios básicos de la comunicación UART, el cálculo de la velocidad en baudios, el modo de trabajo, los campos de aplicación y los métodos de uso comunes, ayudando a las personas con ciertas capacidades de desarrollo de microcontroladores a comprender y aplicar mejor la comunicación UART. Dominar la tecnología de comunicación UART puede aportar una gran comodidad al diseño y aplicación de sistemas de control de microcontroladores.