Así es como funciona la comunicación UART en el hardware

La comunicación UART (Universal Asynchronous Receiver-Transmitter) funciona mediante la conversión de datos en paralelo, provenientes del bus del microcontrolador, en un flujo de bits en serie. Estos bits se transmiten uno a uno a través de un solo cable, utilizando un reloj interno predefinido en ambos extremos.
Este protocolo es fundamental en la electrónica embebida. Permite que dos dispositivos intercambien información sin necesidad de un cable de reloj compartido, simplificando el cableado físico y reduciendo el coste de implementación en circuitos impresos.
{inAds}
Mecánica de transmisión y recepción de datos
El proceso de comunicación comienza cuando el transmisor recibe un dato en paralelo. El hardware UART fragmenta este byte y lo envía secuencialmente. Para que el receptor interprete correctamente dónde empieza y termina un dato, se utiliza un formato de trama específico.
Anatomía de una trama UART
Cada paquete de datos sigue una estructura rígida para evitar la pérdida de sincronización:
- Bit de inicio (Start bit): La línea de transmisión suele estar en estado alto (1). Para iniciar la comunicación, el transmisor baja la línea a estado bajo (0) durante un ciclo de reloj.
- Cuerpo de datos (Data frame): Se envían entre 5 y 9 bits de datos. Generalmente, se configuran 8 bits, que representan un byte estándar.
- Bit de paridad (Parity bit): Es un bit opcional utilizado para la detección de errores básicos. Suma los bits 1 para determinar si el total es par o impar.
- Bit de parada (Stop bit): El transmisor devuelve la línea al estado alto (1) durante uno o dos ciclos de reloj para indicar que la trama ha finalizado.
El concepto de Baud Rate
Al ser una comunicación asíncrona, no existe una señal de reloj externa que coordine a los dispositivos. Ambos deben configurarse a la misma velocidad, denominada Baud Rate. Esta cifra indica cuántos bits se transmiten por segundo.
Si el emisor transmite a 9600 baudios y el receptor espera datos a 115200 baudios, el receptor leerá los bits a una velocidad incorrecta, resultando en datos corruptos o caracteres ilegibles.
Especificaciones del enlace físico y señalización
La comunicación UART requiere una conexión mínima de tres cables para operar correctamente. La ausencia de un cable de reloj es lo que define su naturaleza asíncrona.
| Pin / Conexión | Función Principal | Dirección del Flujo |
|---|---|---|
| TX (Transmit) | Envío de datos serializados | Salida $\rightarrow$ Entrada |
| RX (Receive) | Recepción de datos serializados | Entrada $\leftarrow$ Salida |
| GND (Ground) | Referencia de voltaje común | Bidireccional |
La conexión es cruzada: el pin TX del dispositivo A debe conectarse al pin RX del dispositivo B, y viceversa. El GND es crítico; sin una referencia de tierra común, los niveles de voltaje pueden fluctuar, provocando errores de lectura.
Gestión de errores y control de flujo
Cuando el receptor es más lento que el transmisor, puede ocurrir un desbordamiento del búfer, provocando la pérdida de datos. Para evitar esto, se implementan mecanismos de control de flujo.
El método más común es el Hardware Flow Control, que utiliza dos pines adicionales: RTS (Request to Send) y CTS (Clear to Send). El receptor activa el pin CTS para indicar que tiene espacio en su memoria y puede procesar más datos.
Existe también el Software Flow Control, donde se envían caracteres especiales (como XON y XOFF) dentro del flujo de datos para pausar o reanudar la transmisión. Este método es menos fiable ya que depende de que el software procese la señal a tiempo.
UART frente a SPI
Aunque ambos son protocolos seriales, el estándar SPI (Serial Peripheral Interface) es su alternativa más directa en aplicaciones de corto alcance. Mientras que UART es asíncrono, SPI es un protocolo síncrono.
| Característica | UART | SPI |
|---|---|---|
| Líneas de reloj | No posee (Asíncrono) | Posee un cable SCK (Síncrono) |
| Cables mínimos | 2 cables (+ GND) | 4 cables (+ GND) |
| Velocidad | Baja/Media | Alta |
| Topología | Punto a punto (2 dispositivos) | Maestro-Esclavo (Múltiples) |
| Complejidad | Baja configuración | Mayor cableado |
El uso de UART suele preferirse cuando la distancia es ligeramente mayor o cuando se busca minimizar el número de pines utilizados en el microcontrolador. SPI es la opción habitual para memorias Flash o pantallas donde el ancho de banda es crítico.
Consideraciones eléctricas y niveles de voltaje
Un error común es confundir la interfaz UART con el estándar RS-232. UART es el protocolo de comunicación (la lógica), mientras que RS-232 es una especificación física de voltajes.
En un chip UART típico, los niveles son TTL (Transistor-Transistor Logic), donde un '1' lógico es generalmente 3.3V o 5V y un '0' es 0V. En cambio, el RS-232 utiliza voltajes mucho más altos y polaridades invertidas (por ejemplo, -12V para un '1' y +12V para un '0').
Para conectar un microcontrolador UART a un puerto serie de PC antiguo, se requiere un convertidor como el MAX232, que adapta los niveles de tensión para evitar daños permanentes en el hardware.
Dudas comunes sobre el funcionamiento de UART
¿Qué es la comunicación UART?
Es un protocolo de comunicación serial asíncrona que permite la transferencia de datos entre dos dispositivos mediante la conversión de datos paralelos en una secuencia de bits enviados por un único hilo conductor. No utiliza una señal de reloj externa, por lo que depende de una velocidad de baudios preconfigurada en ambos extremos para sincronizar la lectura y escritura de la información.
¿Diferencia entre UART y rs232?
La diferencia radica en que UART es el protocolo lógico que define cómo se empaquetan los bits en tramas, mientras que RS-232 es el estándar eléctrico que define los voltajes y conectores físicos. UART opera normalmente con niveles de voltaje TTL (0V a 5V), mientras que RS-232 emplea voltajes negativos y positivos más elevados para mejorar la inmunidad al ruido en distancias más largas.
¿Qué es el puerto UART y para qué se utiliza?
El puerto UART es el conjunto de pines físicos (TX, RX y GND) integrados en un microcontrolador o periférico que permite implementar la comunicación serial. Se utiliza principalmente para la depuración de código mediante consolas seriales, la comunicación con módulos de GPS, la interfaz con sensores industriales y la conexión entre procesadores en sistemas embebidos sencillos.