3.18. Fundamentos de UART

Un UART (Universal Asynchronous Receiver-Transmitter, transmisor-receptor asíncrono universal) es la forma más antigua y sencilla de mover bytes entre dos microcontroladores, o entre un microcontrolador y un PC anfitrión. Dos cables transportan los datos – uno para cada dirección – y una tierra compartida devuelve la señal. Ninguno de los dos extremos usa un reloj compartido; acuerdan de antemano una velocidad en baudios y recuperan la temporización de los bits a partir de la propia línea de datos.

3.18.1. La trama

Cada carácter en el cable se envuelve en una trama: un bit de inicio, los bits de datos, un bit de paridad opcional y uno o dos bits de parada.

Forma de onda de una trama UART. La señal permanece inactiva en alto a la izquierda, baja a bajo durante un tiempo de bit (el bit de inicio), luego transporta ocho bits de datos en secuencia, y después vuelve a alto durante un tiempo de bit (el bit de parada) antes de volver al estado inactivo.

Una trama UART: un bit de inicio, ocho bits de datos y un bit de parada, cada uno con un ancho de un periodo de bit (1 / baudrate segundos).

La línea permanece inactiva en alto. El receptor vigila un flanco descendente, que marca el inicio de una nueva trama. A continuación muestrea la línea de datos una vez por periodo de bit – normalmente en el centro de cada bit – y reensambla los bits en un carácter. El bit de parada devuelve la línea al estado inactivo para que pueda detectarse el siguiente bit de inicio.

3.18.2. La velocidad en baudios

El periodo de bit – y la velocidad del enlace – lo establece la velocidad en baudios, el número de bits por segundo. 9600, 19200, 38400, 57600, 115200, 230400, 460800 y 921600 son los valores estándar; 115200 es el valor predeterminado más común. Ambos extremos deben coincidir en la velocidad en baudios con un margen de unos pocos por ciento, o de lo contrario el receptor muestrea los bits en los puntos equivocados y los datos llegan corruptos.

Las velocidades en baudios más altas mueven más datos por segundo pero son más sensibles a la longitud del cable, la capacitancia y la precisión de los relojes en cada extremo. Para enlaces cortos entre dos placas sobre la misma mesa de trabajo, de 115200 a 921600 funciona cómodamente.

3.18.3. Cableado

Un enlace UART usa tres cables:

Dos placas etiquetadas A y B, conectadas por tres cables. El pin TX de la placa A se conecta al pin RX de la placa B; el pin TX de la placa B se conecta al pin RX de la placa A; y los pines de tierra de ambas placas se conectan entre sí.

Cableado de UART: el TX de una placa va al RX de la otra, y ambas tierras se conectan entre sí.

  • TX → RX, en ambos sentidos. El pin de transmisión de cada placa es el pin de recepción de la otra. Un error habitual de los principiantes es cablear TX → TX – dos salidas luchando entre sí, sin datos en ninguno de los receptores.

  • Tierra compartida. Los niveles de señal se referencian a tierra, por lo que las dos placas deben tener una tierra común o de lo contrario el receptor verá el voltaje equivocado en la línea.

3.18.4. Niveles de voltaje y capas físicas

Los niveles de señal en los pines UART de la cámara son CMOS de 3,3 V: tierra para un cero lógico, 3,3 V para un uno lógico. Cualquier cosa que hable UART CMOS de 3,3 V – otro microcontrolador, un adaptador USB-a-serie configurado a 3,3 V, un módulo GPS de 3,3 V – puede cablearse directamente.

Nota

Los dispositivos UART CMOS de 5 V (microcontroladores antiguos, ciertos módulos GPS, algunas placas de sensores más antiguas) hablan la misma trama UART con niveles lógicos de 5 V. Cablearlos directamente a la cámara no es seguro: un TX de 5 V que controla el RX de la cámara excede el voltaje de entrada máximo absoluto en las cámaras que no toleran 5 V, y el TX de 3,3 V de la cámara puede no alcanzar el umbral alto del dispositivo de 5 V para un uno lógico limpio.

Traducir entre los dos voltajes requiere un controlador de línea activo – un circuito integrado dedicado de conversión de nivel bidireccional con sus propios transistores de excitación en ambos lados de cada línea. Los conversores pasivos de MOSFET y resistencia pull-up de Adaptación de niveles no bastan aquí: sus flancos de subida dependen de cargar la línea a través de una resistencia, lo cual está bien a velocidades de conmutación pero es demasiado lento para UART. A 115200 baudios cada bit dura unos 8 µs, y el retardo RC del conversor pasivo difumina un bit sobre el siguiente.

Un controlador de línea activo produce flancos limpios en ambas direcciones a velocidades UART plenas. Elige un componente con una clasificación adecuada para la velocidad en baudios a la que funcionará el enlace, cablea el TX y el RX de la cámara al lado de 3,3 V del conversor, y cablea el TX y el RX del dispositivo de 5 V al lado de 5 V del conversor.

Tres capas físicas más antiguas usan la misma trama pero voltajes diferentes, y necesitan un conversor de nivel entre ellas y un microcontrolador de 3,3 V:

  • RS-232. Usado por los puertos serie de los PC de sobremesa y algunos equipos industriales. La línea oscila entre aproximadamente ±5 V y ±15 V, con el estado inactivo en el riel negativo. Polaridad invertida y voltaje alto en comparación con CMOS; un chip de la familia MAX232 / MAX3232 (o similar) se encarga de la conversión.

  • RS-422. Un estándar de señalización diferencial para enlaces punto a punto (un controlador, hasta diez receptores). El controlador transmite por un par equilibrado de cables; el receptor ve la diferencia entre ellos e ignora el ruido en modo común a lo largo del camino. Los enlaces full-duplex usan dos pares – uno para cada dirección. RS-422 alcanza desde decenas de metros hasta un kilómetro según la velocidad en baudios, y un chip transceptor RS-422 se sitúa entre el TX / RX de la cámara y el par equilibrado.

  • RS-485. El primo multipunto de RS-422 – la misma señalización diferencial, pero diseñado para poner hasta 32 controladores y receptores en un mismo bus. La mayoría de los enlaces son half-duplex sobre un solo par, con el controlador y el receptor de cada nodo compartiendo los mismos cables y el software arbitrando quién habla. Usado en buses de automatización industrial (Modbus, DMX512, Profibus) donde los cables recorren grandes distancias y el ruido es intenso; un chip transceptor RS-485 se sitúa entre el TX / RX de la cámara y el par diferencial.

Ambos siguen enviando tramas UART a nivel de bit subyacente. La configuración de machine.UART de la cámara (velocidad en baudios, bits, paridad, bits de parada) es la misma independientemente de qué capa física transporte la señal al otro lado del transceptor.