RS-232 & UART El protocolo serial que no muere


 

◆ Guía Técnica · Protocolos de Comunicación

RS-232 & UART
El protocolo serial que no muere

Nacido en los años 60, vigente en 2025. Historia completa del estándar serial que conectó al mundo antes de que existiera el USB — y que hoy vive dentro de cada microcontrolador del planeta.

Historia desde 1960 Funcionamiento detallado Variantes y mejoras Uso actual 2025

Cuando abrís el panel de un PLC industrial, conectás un GPS a tu Arduino, configurás un router por consola o flasheás un ESP32, estás usando —en alguna capa— el mismo protocolo estandarizado en 1969. El RS-232 y su contraparte lógica, el UART, son probablemente los protocolos de comunicación serial de propósito general más longevos de la historia de la informática. Esta guía recorre su historia completa, explica cómo funcionan a fondo, detalla todas sus variantes y analiza cuánto se usan realmente hoy y en qué dispositivos.



📡
UART vs RS-232 — No son lo mismo

La confusión más común es usar ambos términos como sinónimos. Son cosas distintas que trabajan juntas:

UART
Universal Asynchronous Receiver/Transmitter

Es un periférico hardware dentro del microcontrolador. Implementa la lógica de comunicación serial asíncrona: serializa bytes, agrega start/stop bits, maneja el baud rate. Opera con niveles lógicos TTL (0V / 3.3V o 5V). Está en prácticamente el 100% de los MCUs modernos.

RS-232
Recommended Standard 232 (EIA/TIA)

Es el estándar eléctrico que define tensiones (±12V típico), conector (DB-9 / DB-25), señales de control (RTS, CTS, DTR, DSR) y distancias máximas. Para conectar un UART a RS-232 se necesita un chip conversor de niveles como el MAX232.

Regla práctica: El ESP32 tiene UART. Tu PC tiene RS-232. Para conectarlos se necesita un MAX232 (o un adaptador USB-serial como el CH340 que hace todo en uno). Son capas distintas del mismo concepto.



📜
Historia — De los teletipos a los microcontroladores

La comunicación serial tiene raíces en el telégrafo del siglo XIX, pero la historia moderna del RS-232 comienza en los laboratorios de Bell cuando la necesidad de conectar terminales a módems telefónicos exigía un estándar común.

1960 — 1962
Orígenes en Bell Labs / EIA

La Electronic Industries Alliance (EIA) inicia los trabajos para estandarizar la interfaz entre equipos terminales de datos (DTE) y equipos de comunicación (DCE). El objetivo es que cualquier terminal pueda hablar con cualquier módem telefónico sin importar el fabricante.

1969
RS-232-B: el estándar original

Se publica la primera versión completa. Define niveles de tensión lógica (±12V típico, ±25V máximo), conector DB-25, velocidades hasta 20 kbps y un conjunto de señales de control (RTS, CTS, DTR, DSR). Era el mundo de las mainframes y los módems de 300 baud.

1975
RS-232-C: la versión más difundida

La revisión C consolida el estándar y se convierte en la más adoptada de toda la historia. Los primeros PC IBM (1981) incluirán puerto COM basado en RS-232-C. Esta es la versión que la mayoría de la gente conoce como “puerto serie”.

1981 — 1990
La era dorada del puerto COM

El IBM PC y sus clones popularizaron el puerto COM (DB-9) en cada escritorio del planeta. Ratones seriales, módems externos, plóteres, impresoras y terminales se conectaban todos por RS-232. El chip UART 8250/16550 de National Semiconductor se volvió omnipresente. Se estima que en este período se fabricaron más de 500 millones de puertos RS-232.

1987
UART 16550A — el FIFO que cambió todo

National Semiconductor introduce el 16550A con buffers FIFO de 16 bytes tanto en TX como en RX. Esto eliminó la pérdida de datos a altas velocidades cuando la CPU no podía atender cada byte individual. El 16550A se convirtió en la referencia de compatibilidad en Linux y Windows hasta el día de hoy.

1991
EIA-232-D — modernización del estándar

El estándar pasa a llamarse EIA-232-D. Se clarifica la definición de tiempos de señal, se ajustan tolerancias y se acepta oficialmente el conector DB-9 como alternativa al DB-25 original, dado que las PCs ya lo usaban de facto desde el AT.

1997 — 2002
La “amenaza” USB y la muerte anunciada

La llegada del USB 1.0 (1996) y su adopción masiva con Windows 98 empieza a desplazar el puerto COM de las PCs domésticas. Intel y Microsoft lo excluyen del estándar PC 2001. Los titulares de la época proclamaban la muerte del puerto serie. No murió — simplemente cambió de contexto.

2005 — presente
Resurrección en embebidos — la era Arduino/ESP

La explosión de los microcontroladores y el movimiento maker devuelven al UART al primer plano. Cada Arduino, PIC, STM32, ESP8266, ESP32, Raspberry Pi y cientos de módulos GPS, GSM, Bluetooth y WiFi se comunican por UART. En 2025, con el IoT industrial y el edge computing, el UART tiene más instancias activas que en cualquier momento de su historia.



⚙️
Cómo funciona el UART en detalle

El UART es un protocolo asíncrono: no existe una línea de reloj separada. El transmisor y el receptor deben acordar de antemano la velocidad (baud rate) y el formato del frame. Cada byte se encapsula en un frame con la siguiente estructura:

Anatomía del frame UART

START bit

Siempre nivel 0 (LOW), duración de 1 bit. Avisa al receptor que comienza una transmisión rompiendo el estado IDLE que es nivel alto. El receptor detecta el flanco descendente y sincroniza su reloj interno.

DATA bits

Normalmente 8 bits, transmitidos LSB (bit menos significativo) primero. Puede configurarse en 5, 6, 7 u 8 bits según el protocolo. El receptor muestrea cada bit en el centro de su período para mayor confiabilidad.

PARITY bit

Opcional. Puede ser: par (Even), impar (Odd), siempre 0 (Space), siempre 1 (Mark) o ausente (None). Solo detecta errores de 1 bit. La configuración más común es N (ninguno). Si se usa, agrega 1 bit entre los datos y el stop.

STOP bit(s)

Siempre nivel 1 (HIGH). Puede ser 1, 1.5 o 2 bits. Marca el fin del frame y da tiempo al receptor para procesar el byte antes del siguiente START bit. La configuración estándar moderna es 1 stop bit.

Baud rate — velocidades estándar

El baud rate indica la cantidad de símbolos (bits) por segundo. En UART, 1 baud = 1 bit. Las velocidades estándar más comunes son:

Baud rate Uso típico Bytes/segundo útiles (8N1)
300 Módems históricos, teletipos 30 B/s
9600 GPS NMEA, equipos industriales, consolas de red 960 B/s
19200 Modbus RTU, equipos médicos legacy 1920 B/s
57600 Módulos Bluetooth clásico 5760 B/s
115200 Arduino IDE, ESP32 debug, módulos GSM/GPS modernos 11520 B/s
230400 STM32, algunos módulos WiFi 23040 B/s
921600 Flash de ESP32/ESP8266, STM32 alta velocidad 92160 B/s
1M — 4M UART hardware moderno (STM32, RP2040), límite PCB hasta 400 KB/s

⚠ Tolerancia de baud rate: El error máximo aceptable entre transmisor y receptor es de ±2–3%. Con un cristal de 16 MHz en un AVR y 115200 baud el error es ~0.2%, perfectamente confiable. Con osciladores RC internos puede llegar a 2–3%, que es el límite. Más error → bits corruptos → garbage en el monitor serie.



🔌
Conector DB-9 — Las 9 señales del RS-232

El conector DB-9 (técnicamente DE-9) reemplazó al DB-25 original en la era del IBM PC/AT. Sus nueve pines cubren los datos y las señales de handshaking para control de flujo con módems:

Pin DB-9 Señal Nombre completo Dir. Función
1 DCD Data Carrier Detect ← IN El módem detectó portadora en la línea telefónica
2 RXD Received Data ← IN Datos recibidos del equipo remoto
3 TXD Transmitted Data → OUT Datos enviados por el DTE (terminal)
4 DTR Data Terminal Ready → OUT El terminal está encendido y listo para operar
5 GND Signal Ground Tierra de señal — referencia común obligatoria
6 DSR Data Set Ready ← IN El módem está listo para operar
7 RTS Request To Send → OUT El terminal solicita permiso para transmitir (flow control)
8 CTS Clear To Send ← IN El módem da permiso para transmitir (flow control)
9 RI Ring Indicator ← IN Indica llamada entrante en la línea telefónica

Para makers: En el 99% de los proyectos embebidos solo se usan TXD (pin 3), RXD (pin 2) y GND (pin 5). Los pines de control (RTS/CTS, DTR/DSR) se pueden conectar en loopback (7↔8 y 4↔6) si el software los requiere pero el hardware no los usa realmente.


Niveles eléctricos — RS-232 vs TTL vs RS-485

Mezclar niveles eléctricos sin conversión es el error más destructivo que puede cometer un maker. Conectar directamente un microcontrolador (TTL/LVTTL) a un puerto RS-232 físico puede dañar el MCU permanentemente:

Estándar Lógico “1” (MARK) Lógico “0” (SPACE) Distancia máx. Nodos
RS-232 −3V a −25V +3V a +25V 15 m @ 20 kbps 1 a 1
TTL 5V > 2.4V < 0.8V corta (PCB) 1 a 1
LVTTL 3.3V > 2.0V < 0.8V corta (PCB) 1 a 1
RS-422 Diferencial A−B > +2V Diferencial A−B < −2V 1200 m @ 100 kbps 1 TX / 10 RX
RS-485 Diferencial A−B > +0.2V Diferencial A−B < −0.2V 1200 m @ 100 kbps 32 nodos (bus)

Para convertir entre TTL y RS-232 se usan chips MAX232 (o SP3232 para 3.3V), que generan ±12V internamente con una bomba de carga. Para conversión a USB, los más usados son el CH340G (económico, muy común en clones Arduino), el CP2102 (Silicon Labs) y el FT232RL (FTDI, el más robusto).



🔀
Evolución y variantes — 60 años de mejoras

RS-485
El estándar dominante de automatización industrial

Señalización diferencial sobre par trenzado, half-duplex, multi-punto con hasta 32 nodos en un bus compartido (más con repetidores). Inmune al ruido electromagnético en entornos industriales. Soporta distancias de hasta 1200 metros a 100 kbps, o 10 metros a 10 Mbps. Es la capa física de Modbus RTU, DMX512 y PROFIBUS — los protocolos de automatización más usados del mundo.

RS-422
Diferencial unidireccional de largo alcance

Versión diferencial del RS-232 pero solo en un sentido (full-duplex con 2 pares). Hasta 10 Mbps en distancias cortas, o 100 kbps a 1200 m. Muy usado en equipos de audio/video profesional, maquinaria CNC y sistemas de medición de precisión donde el ruido eléctrico es una preocupación.

LIN Bus
UART simplificado para la electrónica automotriz

Evolución de UART para el mercado automotriz. Un solo hilo de datos más masa (sin par diferencial), topología maestro/esclavo, velocidad máxima de 20 kbps. Está presente en decenas de nodos por vehículo moderno: espejos eléctricos, ventanas, asientos, sensores de temperatura de cabina, LEDs interiores y más. Económico de implementar al no necesitar tranceivers diferenciales.

USART — Modo síncrono
UART con clock externo opcional

El USART (Universal Synchronous/Asynchronous Receiver/Transmitter) agrega un pin de reloj externo para operar en modo síncrono. Disponible en AVR (ATmega), STM32, PIC y otros. En modo síncrono puede operar como maestro SPI sobre los mismos pines TX/RX, lo que da mucha flexibilidad de diseño al programador de firmware.

USB-CDC Virtual COM Port
UART sobre USB — el bridge moderno universal

La clase USB CDC-ACM (Communications Device Class – Abstract Control Model) permite que un dispositivo USB se presente al sistema operativo como un puerto COM virtual. Es lo que hacen el CH340, CP2102, FT232 y los STM32 Nucleo con su ST-Link. El Arduino IDE ve un “COMx” o “/dev/ttyUSBx” como si fuera un puerto serie real. El protocolo subyacente sigue siendo UART, simplemente encapsulado en USB.

Control de flujo HW y SW
Mecanismos para evitar pérdida de datos

Hardware (RTS/CTS): El receptor baja RTS cuando su buffer está casi lleno. El transmisor detiene el envío hasta que CTS vuelva a estar activo. Totalmente transparente a la aplicación. Software (XON/XOFF): El receptor envía el byte 0x13 (XOFF) para pausar la transmisión y 0x11 (XON) para reanudarla. No requiere pines adicionales pero consume ancho de banda.



💻
Código práctico — Tres plataformas


 

📊
¿Cuánto se usa hoy? — El estado en 2025

La respuesta corta es: enormemente. Es uno de los protocolos más utilizados del planeta si se suman todas sus formas. La confusión viene de que en muchos casos está “escondido” dentro de otro protocolo o producto.

Microcontroladores

~98%

Módulos GPS / GNSS

~95%

Equipos industriales

~90%

Automotriz (LIN bus)

~85%

Routers / Networking

~80%

PCs desktop/laptop

~20%

Puerto RS-232 físico

~12%

* % de dispositivos de cada categoría que incluyen UART en alguna forma. Estimaciones basadas en cobertura de datasheets y reportes de mercado de semiconductores 2024.

Dónde lo encontramos hoy

🤖
Microcontroladores

Prácticamente el 100% de los MCUs modernos incluye al menos un UART. Arduino (ATmega), ESP32, STM32, PIC, RP2040, nRF52840, RISC-V GD32… todos tienen UART hardware. Es la interfaz de debug universal.

📍
Módulos GPS / GNSS

El protocolo NMEA-0183 de los módulos GPS (NEO-6M, NEO-8M, u-blox M10, L80) se transmite por UART a 9600 baud por defecto. Es el estándar desde los años 80. Cada tracker vehicular, drone y barco lo usa.

📶
Módulos GSM / LTE

SIM800, SIM7600, EC21, A7670 y prácticamente todos los módulos celulares se controlan por UART con comandos AT (Hayes Command Set, también de los 80s). ESP32 + SIM800L es un diseño de producción actual.

🌡️
Sensores inteligentes

PM2.5/PM10 (PMS5003, SDS011), CO2 (MH-Z19, SCD41), distancia ultrasónica, balanzas industriales, lectores de código de barras, pantallas Nextion. UART es la interfaz estándar para sensores con salida digital.

🏭
Modbus RTU / Industrial

Modbus RTU corre sobre RS-485 (capa física) con tramas de formato UART (capa lógica). Es el protocolo de automatización más usado del mundo, con cientos de millones de dispositivos activos en fábricas y edificios.

🌐
Consola de red

Todos los routers, switches y firewalls profesionales (Cisco, MikroTik, Juniper) tienen un puerto de consola RS-232 o USB-serial. El estándar sigue siendo 9600 8N1 con cable rollover para configuración de emergencia.

🚗
Electrónica automotriz

El bus LIN (UART simplificado de un solo hilo) controla subsistemas de bajo costo en cada auto moderno: asientos, espejos, ventanas, sensores de lluvia, climatización. Hasta 80 nodos LIN por vehículo de alta gama.

🏥
Equipos médicos e industriales

Balanzas analíticas, glucómetros de laboratorio, impresoras de tickets fiscales (AFIP), controladores POS, lectores biométricos, sistemas de control de acceso. RS-232 y RS-485 dominan por su robustez y certificación.



⚖️
Ventajas y limitaciones

✦ Por qué sigue siendo relevante
Solo 2 cables — TX, RX y GND. Sin reloj, sin pull-ups, sin protocolo de bus complejo
Debug nativo — Serial.print() es la ventana directa al firmware. El primer periférico en cualquier bring-up
Determinismo — Un byte tarda exactamente 10 tiempos de bit (8N1). Útil en tiempo real
Ecosistema inmenso — 60 años de documentación, librerías y soporte en todo compilador y RTOS
Bajo consumo — Sin terminaciones de bus ni lógica de arbitraje adicional
✦ Cuándo no usarlo
Solo punto a punto — Sin multi-nodo nativo. Para bus usar RS-485
Detección de error básica — El bit de paridad solo detecta errores de 1 bit. Para más confiabilidad agregar CRC (Modbus, HDLC)
Sincronización crítica — Ambos extremos deben usar exactamente el mismo baud rate. Error >3% → datos corruptos
Sin direccionamiento — Los protocolos de capa superior (Modbus, AT commands) deben agregarlo
Velocidad moderada — Para >4 Mbps usar SPI o USB


Conclusión: El RS-232/UART es el ejemplo más claro de un protocolo que “nunca muere” porque encontró su nicho natural: la comunicación simple, confiable y ubicua entre un microcontrolador y el mundo exterior. En 2025 tiene más instancias activas que en cualquier otro momento de su historia gracias al IoT y la automatización industrial. Mientras existan microcontroladores, existirá el UART.

Fuentes: EIA/TIA-232 Standard · Datasheets MAX232, FT232RL, CH340G · u-blox NEO-M8 Integration Manual · Modbus.org Protocol Specification · NMEA 0183 Standard · STM32 HAL Documentation · Espressif ESP32 Technical Reference Manual
Artículo publicado en rogerbit.com — Argentina, 2025.

Deja una respuesta