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

14

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?

Batibot323
fuente
El "bit de parada" también podría llamarse "retorno al estado inactivo", pero al hacerlo un poco, tiene una longitud mínima definida, pero después de ese tiempo mínimo garantizado, la línea permanecerá en un estado "1" hasta que viene el siguiente personaje.
Peter Bennett
Podrían cambiar aleatoriamente las velocidades de transmisión comunes hasta que algo funcione XD.
Bradman175
3
Hayes inició una forma de permitir que el UART en sus módems establezca la misma velocidad en baudios que el terminal que le habla utilizando una secuencia de caracteres 'AT' al comienzo de sus comandos. Por lo general, esto no fue decodificado por el UART, sino por un firmware en tiempo real que luego configuraría el UART para recibir el resto de la línea de comando. Básicamente detectó el ancho del bit de inicio y cómo se estableció la paridad.
fijado el
@infix Entonces, si planeo modificar o crear un código Verilog para UART, ¿puedo hacerlo para que detecte esta secuencia 'AT' y ajuste su velocidad de transmisión desde allí? Estaba pensando en inicializarlo a la velocidad de transmisión más alta para que capturara todo y desde allí, encontrara la secuencia 'AT'.
Batibot323
Un protocolo de comunicación basado en UART (llamado LIN) que se puede ver mucho en la industria automotriz tiene un mecanismo de detección de baudios automáticos, pero aún así los nodos maestro y esclavo "tienen que" coincidir en términos de longitud de datos y longitud de bits de parada. Lo que significa que detectar solo la velocidad de transmisión no es suficiente.
Rohat Kılıç

Respuestas:

26

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.

Chris Stratton
fuente
2
¿Mi hipótesis sobre la detección automática de baudios puede ser que un temporizador y un contador funcionen simultáneamente para encontrar bordes y tiempo entre bordes?
ammar.cma
1
El problema es que no existe un algoritmo que pueda tomar una forma de onda arbitraria "serial" y determinar de manera confiable la velocidad de transmisión. Puede encontrar el tiempo mínimo entre las transiciones de manera bastante fácil, pero eso no representa un período de un solo bit.
Peter Green
Existe un algoritmo (he oído que se llama "auto-bauding" en varios lugares) pero cuando se implementa en el ámbito de recursos limitados de un chip UART, a veces la única forma de hacerlo es consumiendo algunos de los datos enviados y usándolo para la calibración que persistirá por el resto de la sesión. Esto a menudo no es deseable. Si se realiza en software y se permite un poco de latencia, es trivial hacerlo sin consumir datos (almacenándolos temporalmente para su análisis) al menos para comunicaciones de baja velocidad (menos de 200 KB / s). Las velocidades más altas presentan más dificultades.
Wossname
8

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.

Ale..chenski
fuente
1
..... para ambos extremos de la interfaz.
Michael Karas
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, 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.

Adam Naber
fuente