¿Cómo saben dos UARTS qué velocidad de transmisión usar?

14

Estoy leyendo sobre el protocolo estándar para UART y creo que si el UART que recibe no tiene idea de a qué velocidad en baudios se transmitieron los datos, habría muchos problemas. Si la velocidad de transmisión supuesta es inferior a la velocidad de transmisión en la que se transmiten los datos, habrá bits que no serán "vistos" por el UART receptor. Por otro lado, si la velocidad en baudios utilizada por el receptor es mayor que la velocidad en baudios en la que se transmiten los datos, habrá bits que se contarán dos veces y darán como resultado que los datos se 'leen' incorrectamente.

Mi conocimiento sobre UART es que cuando la línea está inactiva, se mantiene en un '1', el bit de inicio es un '0' y el bit de parada es un '1'. Además, el bit de parada que es '1' no tiene ninguna diferencia con el '1' cuando la línea está inactiva o hay una manera de diferenciar?

¿Están de acuerdo dos de UART que se comunican primero sobre qué velocidad de transmisión usarán? Si es así, ¿cómo lo hacen?

    
pregunta Batibot323

3 respuestas

26

Los UART ordinarios deben configurarse previamente con la velocidad en baudios deseada (así como la longitud de palabra, bits de parada, paridad, etc.) tradicionalmente por un humano.

Desde hace varias décadas, aunque se han encontrado implementaciones de detección de "baudios automáticos" en algunas configuraciones, que normalmente funcionan sincronizando las características clave de la forma de onda para deducir la tasa de baudios. Las primeras versiones necesitaban un carácter conocido para ser transmitidas, pero las versiones más sofisticadas podrían encontrar la tasa a partir de datos más arbitrarios.

Por lo general, una UART receptora tiene un reloj local que funciona a una velocidad más rápida, generalmente 8 o 16 veces la velocidad en baudios. Esto se utiliza para muestrear la señal entrante y detectar los bits dentro de una palabra de manera que pueda tolerar un pequeño porcentaje de error. Incluso dos osciladores de cristal no coincidirían perfectamente con las velocidades, pero la tolerancia a errores puede permitir el uso de algunas fuentes menos precisas, a veces incluyendo osciladores de chip recortados, etc. También puede ayudar a acomodar el hecho de que dividir las frecuencias de osciladores populares solo puede producir una aproximación inexacta de ciertas velocidades en baudios: en los viejos tiempos, los relojes maestros de UART a veces necesitaban frecuencias particulares para acceder a las velocidades en baudios populares, por ejemplo, 11.0592 MHz en la familia 8051.

    
respondido por el Chris Stratton
8

Dos UARTS "están de acuerdo" con la velocidad en baudios por medio de la documentación y por el operador / usuario configurando la velocidad en baudios con las manos, incluido el protocolo de intercambio, el tamaño de bit de parada, etc.

    
respondido por el Ale..chenski
2

Sí, todo se configura manualmente, lo que a menudo es un poco molesto, especialmente cuando los sistemas están mal documentados (te estoy mirando a ti, a todos los sistemas integrados).

Sé que los protocolos USB, SATA y la mayoría de los otros protocolos de datos modernos comienzan después de algún evento de reinicio o inicialización a la velocidad más baja con alguna configuración predeterminada estandarizada y negocian con todos los demás (o solo con el maestro, según el protocolo) arriba a velocidades más altas. Algunos también usan resistencias de pull-up o pull-down en sus líneas de datos / energía para indicar las velocidades admitidas.

Consulte este sitio web sobre la negociación de USB si está interesado en profundizar un poco más en otros protocolos .

    
respondido por el Adam Naber

Lea otras preguntas en las etiquetas