Estoy leyendo sobre el protocolo estándar para UART y creo que si el UART receptor no tiene idea de qué velocidad de transmisión se transmitieron los datos, habría muchos problemas. Si la velocidad en baudios supuesta es menor que la velocidad en baudios en la que se transmiten los datos, habrá bits que el UART receptor no 'vería'. 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 que los datos se 'leerán' incorrectamente.
Mi conocimiento acerca de 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 detención que es '1' no tiene ninguna diferencia con el '1' cuando la línea está inactiva o ¿hay alguna manera de diferenciar?
¿Dos de los UART que se comunican primero acuerdan qué velocidad de transmisión usarán? Si es así, ¿cómo lo hacen?
fuente
Respuestas:
Los UART ordinarios tienen que ser preconfigurados con la velocidad de transmisión 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 "auto baudios" en algunas configuraciones, que generalmente funcionan sincronizando las características clave de la forma de onda para deducir la velocidad en baudios. Las primeras versiones necesitaban que se transmitiera un carácter conocido, pero las versiones más sofisticadas podrían encontrar la velocidad de datos más arbitrarios.
Un UART receptor generalmente tiene un reloj local que funciona a una velocidad más rápida, generalmente 8 o 16 veces la velocidad en baudios. Esto se usa para muestrear la señal entrante y detectar los bits dentro de una palabra de una manera que pueda tolerar un pequeño porcentaje de error. Incluso dos osciladores de cristal no coincidirían perfectamente con las tasas, pero la tolerancia a errores puede permitir el uso de algunas fuentes menos precisas, que a veces incluyen osciladores recortados en chip, etc. También puede ayudar a acomodar el hecho de que dividir las frecuencias de osciladores populares solo puede producir Una aproximación inexacta a ciertas velocidades de transmisión: en los viejos tiempos, los relojes maestros UART a veces necesitaban frecuencias particulares para acceder a velocidades de transmisión populares, por ejemplo 11.0592 MHz en la familia 8051.
fuente
Dos UARTS "acuerdan" la velocidad en baudios por medio de la documentación y el operador / usuario configurando la velocidad en baudios manualmente, incluido el protocolo de protocolo de enlace, el tamaño del bit de parada, etc.
fuente
Sí, todo se configura manualmente, lo que a menudo es un poco molesto, especialmente cuando los sistemas están mal documentados (te estoy mirando, todos los sistemas integrados).
Sé que USB, SATA y la mayoría de los otros protocolos de datos modernos comienzan después de un 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 el maestro, según el protocolo) hasta velocidades más altas . Algunos también usan resistencias pull-up o pull-down en sus líneas de datos / energía para indicar las velocidades admitidas.
Consulte este sitio web sobre negociación USB si está interesado en profundizar un poco más en otros protocolos.
fuente