
UART: tramas, velocidad en baudios y niveles eléctricos
Comprender la transmisión UART asíncrona: bits de inicio y parada, orden de datos, paridad, velocidad en baudios, tolerancia del reloj, errores y compatibilidad con TTL, CMOS, RS-232 y RS-485.
Escrito y revisado técnicamente porEquipo de ingeniería de ElectroDesignForge
Ver el proceso editorialPunto clave: UART envía bits sin un reloj compartido. El receptor se vuelve a sincronizar en cada bit de inicio y luego muestrea los datos en tiempos calculados. Ambos puntos finales necesitan el mismo formato de trama, una sincronización de baudios suficientemente cercana y niveles eléctricos verdaderamente compatibles.
UART es un formato de cuadro, no una interfaz eléctrica
UART (Receptor/Transmisor Asíncrono Universal) convierte un byte en bits en TX y reconstruye los bytes recibidos en RX. Es asincrónico: a diferencia de SPI, no tiene cable de reloj.
| Capa | lo que define | Ejemplos |
|---|---|---|
| marco UART | inactivo, inicio, datos, paridad, parada, orden de bits, velocidad | 8N1 a 115200 baudios |
| Enlace eléctrico | tensión, polaridad, referencia, corriente, cable | CMOS de 3,3 V, lógica de 5 V, RS-232, RS-485 |
Dos placas pueden "usar UART" y aun así no conectarse directamente: un GPIO de 3,3 V no es una salida RS-232. En la convención lógica habitual, inactivo es alto (marca), un fotograma comienza bajo y termina alto.
Anatomía del marco
La notación habitual es data bits + parity + stop bits. 8N1 significa ocho bits de datos, sin paridad y un bit de parada.
Idle Start D0 D1 D2 D3 D4 D5 D6 D7 Parity Stop Idle
1 | 0 | b0 b1 b2 b3 b4 b5 b6 b7 | P | 1 | 1
<------------- one bit time Tb = 1 / baud ------------->
Inicio, datos, paridad y parada
El bit de inicio está bajo durante un bit. Después de un flanco descendente, el receptor espera aproximadamente medio bit para validarlo y luego toma muestras cerca del centro de cada celda. Los UART modernos suelen sobremuestrear a ×8 o ×16; consulte el manual del periférico para conocer la validación y tolerancia exactas.
Los datos normalmente son LSB-first. El formato hexadecimal 0x53, escrito convencionalmente 0101 0011, se envía como 1 1 0 0 1 0 1 0 para D0 a D7. Ésta es una trampa sencilla de lectura de osciloscopio. El hardware puede ofrecer de 5 a 9 bits de datos; ambos puntos finales deben coincidir.
| Configuración de paridad | Regla para datos más paridad | Limitación |
|---|---|---|
N | no hay nada extra | sin detección de errores |
E | El número total de 1 es par. | pierde un número par de bits modificados |
O | el número total de 1 es impar | Misma capacidad de detección, convención opuesta. |
| marca / espacio | forzado 1 / forzado 0 | modos poco comunes específicos de hardware |
Parity detecta algunos daños pero no puede localizarlos ni repararlos. La integridad del mensaje necesita un CRC o suma de verificación, un número de secuencia y un esquema de reintento por encima de UART. Los bits de parada son altos; un nivel bajo cuando se espera un bit de parada normalmente genera un error de encuadre.
Velocidad de baudios y error de reloj
Baudios son símbolos por segundo. Un UART binario normalmente transporta un bit por símbolo, por lo que 9600 baudios normalmente significa 9600 bit/s. El tiempo de bits es Tb = 1 / baud.
| Tasa | Tb | Tiempo de fotograma 8N1 |
|---|---|---|
| 9.600 baudios | 104,17 µs | 1,042 ms |
| 57.600 baudios | 17,36 µs | 173,6 µs |
| 115.200 baudios | 8,681 µs | 86,81 µs |
| 1.000.000 baudios | 1.000 µs | 10,00 µs |
Una trama 8N1 utiliza tiempos de diez bits, por lo tanto, una tasa de carga útil máxima de baud × 8 / 10: el tráfico continuo de 115200 baudios transporta como máximo 11,520 bytes/s antes de la sobrecarga del protocolo.
El transmisor y el receptor tienen relojes independientes. Su compensación de muestreo se acumula en un cuadro: accumulated timing error ≈ number of bit intervals × total relative frequency error. Manténgalo cómodamente por debajo de medio bit, dejando margen para la fluctuación, la cuantificación del divisor, el ruido y los bordes lentos. Un objetivo de ingeniería común es menos de aproximadamente el 2 % de error relativo combinado, pero no es un límite universal: la longitud del marco, el sobremuestreo y el diseño del receptor deciden la tolerancia real. Dos osciladores de ±1% pueden diferir en un 2% en el peor de los casos. Verifique también el error del divisor de baudios; un reloj del sistema no siempre genera 115200 exactamente.
CMOS, TTL, RS-232 y RS-485
"TTL" y "CMOS" son abreviaturas: utilice siempre los umbrales de entrada del dispositivo real y las clasificaciones máximas absolutas.
| Interfaz | UART inactivo | voltajes típicos | ¿Directo a UART de 3,3 V? |
|---|---|---|---|
| CMOS de 3,3 V | alto | cerca de 0/3,3 V | sí, si los umbrales coinciden |
| Lógica de 5 V | alto | cerca de 0/5 V | sólo con entrada tolerante a 5 V |
| RS-232 | negativo (marca) | a menudo −5 a −12 V / +5 a +12 V | no, utilice un transceptor RS-232 |
| RS-485 | diferencial | A/B pair | no, utilice un transceptor RS-485 |
Para un enlace lógico corto, conecte TX_A a RX_B, TX_B a RX_A y comparta una referencia a tierra. Una salida de 5 V puede dañar una entrada de 3,3 V no tolerante incluso si el enlace inicialmente parece funcionar.
RS-232 utiliza amplitudes diferentes y polaridad invertida: la lógica inactiva 1 es normalmente negativa, el inicio de 0 es positivo. Un transceptor tipo MAX232 maneja la conversión e inversión de voltaje. RS-485 es una capa física diferencial, no un “UART más fuerte”: el UART controla DI y lee RO, mientras que el transceptor controla A/B. El control de habilitación (DE), la terminación, la polarización, la topología del cable y el control de colisiones semidúplex son parte del diseño.
Errores y recuperación
| Indicación | Significado habitual | Causas comunes |
|---|---|---|
| error de paridad | la paridad recibida falla | ruido, configuración incorrecta, sincronización marginal |
| error de encuadre | bit de parada no válido | tasa incorrecta, inversión, ruptura |
| Invadir | Llegó un nuevo byte antes de manejar el anterior. | interrupción bloqueada, DMA faltante, búfer pequeño |
| Romper | línea baja más larga que un marco | rotura intencionada, cortocircuito, dispositivo detenido |
- Registre la configuración completa: por ejemplo
115200, 8N1, LSB primero, sin control de flujo, CMOS de 3,3 V. - Verifique
TX ↔ RX, tierra común y alimentación del transceptor /DE. - Mida una celda: a 115200 baudios es aproximadamente 8,68 µs.
- Envíe
0x55, luego0x00y0xFFcomo patrones de diagnóstico. - Cuente las banderas de paridad, encuadre y desbordamiento; El texto corrupto por sí solo no identifica la causa.
Errores comunes
- Tratando 115200 baudios como 115200 bytes/s:
8N1alcanza un máximo de 11,520 bytes/s. - Cruzar TX/RX dos veces u omitir tierra común en un enlace CMOS.
- Conexión RS-232 directamente a GPIO.
- Usar paridad como protección de mensajes en lugar de un CRC.
- Culpar de cada error a la velocidad en baudios cuando un búfer lleno, un voltaje incompatible, una conexión a tierra ruidosa o una contienda RS-485 pueden parecer similares.