El UART: Controlador de hardware para comunicaciones por puerto serie

El UART (Universal Asynchronous Receiver/Transmitter) es el circuito de hardware dedicado—ya sea un IC discreto (por ejemplo, 16550, 16C550, SC16IS7xx) o un bloque IP dentro de un microcontrolador/SoC—que implementa el protocolo serial asíncrono (bit de inicio, 5–9 bits de datos, paridad, bits de parada) y gestiona la señalización eléctrica (RS-232, RS-485, TTL, LVTTL).

Funciones principales

  • Paralelo a Serie (TX): Toma byte de CPU/bus de datos → carga en Registro de Desplazamiento TX → saca bits a velocidad de baudios con enmarcado de inicio/parada/paridad.
  • Serie a Paralelo (RX): Detecta bit de inicio → muestrea línea a 16x velocidad de baudios (sobremuestreo) → desplaza bits en Registro RX → verifica paridad/parada → afirma interrupción / establece bandera → CPU lee byte.
  • Generador de velocidad de baudios: Divisor (DLL/DLM) divide el reloj del sistema (1.8432 MHz, 14.7456 MHz, 48 MHz, etc.) a velocidad de baudios objetivo (300–921600+).
  • Búferes FIFO (16550A+): FIFO TX/RX de 16 bytes reducen la carga de interrupciones de CPU. Niveles de disparo programables (1, 4, 8, 14).
  • Control de flujo: Hardware (RTS/CTS, DTR/DSR) o Software (XON/XOFF) a través del registro de control de módem.
  • Estado de módem / Control de línea: Entradas DCD, RI, DSR, CTS; salidas DTR, RTS, OUT1, OUT2, Bucle.

UART vs. «Puerto serie»

  • UART: El motor de hardware (silicio).
  • Puerto serie: La interfaz del sistema (COM1, ttyS0, /dev/ttyUSB0) presentada por SO/controlador, que comprende UART + transceptor (MAX232, MAX485, CP210x, FT232) + conector (DB9, RJ45, USB, encabezado).

Implementaciones comunes

  • PC (Legado): Chip Super I/O (ITE, Nuvoton, SMSC) → UART compatible 16550 → DB9 (RS-232).
  • Adaptador USB-Serie: FTDI FT232R, Silicon Labs CP2102, Prolific PL2303, CH340 — controlador de dispositivo USB + UART integrado + transceptor.
  • Microcontrolador (STM32, ESP32, AVR, PIC, RP2040): Múltiples periféricos UART integrados (USART, LPUART). TTL directo (3.3V/5V).
  • FPGA/ASIC: Núcleo IP soft (Xilinx UARTlite, Intel Avalon UART) o macro endurecido.

Registros clave (Estándar 16550)

Desplazamiento (DLAB=0)RegistroFunción
0x00RBR / THRBuffer de recepción / Registro de retención de transmisión
0x01IERHabilitación de interrupción (RX, TX, Estado de línea, Estado de módem)
0x02IIR / FCRID de interrupción (Lectura) / Control FIFO (Escritura)
0x03LCRControl de línea (Longitud de palabra, Bits de parada, Paridad, DLAB, Interrupción)
0x04MCRControl de módem (DTR, RTS, OUT1, OUT2, Bucle)
0x05LSREstado de línea (DR, OE, PE, FE, BI, THRE, TEMT, FIFOERR)
0x06MSREstado de módem (DCD, RI, DSR, CTS, Bits Delta)
0x07SCRRascunho
0x00/0x01 (DLAB=1)DLL / DLMDivisor de reloj Bajo/Alto (Velocidad de baudios)

Conclusión: El UART es el caballo de batalla de silicio; el puerto serie es la abstracción del SO. Sin UART = sin comunicaciones serie (salvo bit-banging GPIO).