¿Es necesario que la velocidad de transmisión en comunicación en serie (USB o RS232) sea exacta?

8

En comunicación en serie, ¿significa la velocidad en baudios que tenemos que usar la velocidad exacta del reloj o es un rango de velocidades que podemos usar?

y si es un valor exacto, ¿qué tan exacto debería ser? por ejemplo, ¿puedo usar 555 como el reloj de un circuito de comunicación en serie?

    
pregunta soundslikefiziks

2 respuestas

6

Los tiempos deben ser lo suficientemente precisos para que no se desvíen antes de que el protocolo vuelva a sincronizarse.

La serie UART se resincroniza en cada byte y un byte es de alrededor de 10 bits (8 bits de datos más inicio y parada). Suponemos que nuestro UART apunta a la mitad de cada bit. Si todo está perfecto y solo un extremo es inexacto, lo que permite una diferencia de aproximadamente el 5% entre los dos extremos del enlace.

Sin embargo:

  1. Ambos extremos del enlace pueden ser inexactos en relación con el nominal. En el peor de los casos, un extremo puede estar por debajo del nominal mientras que el otro está por encima del nominal.
  2. Puede haber inexactitudes sistemáticas. Por ejemplo, la mayoría de los UARTS tienen un rango limitado de configuraciones del generador de velocidad en baudios.
  3. Su UART se basa en un reloj maestro con una velocidad finita. Incluso si el generador de velocidad de transmisión y la velocidad en baudios son perfectos, esto resultará en que no llegue a la mitad exacta de cada bit.

La conclusión es que el 1% de error en su reloj es casi seguro que está bien. El error del 5% es casi ciertamente un problema. Entre esas dos cifras puede o no ser un problema dependiendo de la imagen general.

Eso es una tarea difícil para un oscilador RC. Digamos que su R tiene una tolerancia del 1% y su C tiene una tolerancia del 2%. Eso le da aproximadamente un 3% de tolerancia a la constante de tiempo de la red RC y eso es antes de que piense en cualquier error introducido por su chip de controlador.

Entonces, la conclusión es que deberías estar mirando un resonador de cristal o de cerámica.

En cuanto a USB, no tengo la experiencia para analizar los primeros principios, pero enlace dice 1.5% para baja velocidad y 0.25% para máxima velocidad.

    
respondido por el Peter Green
8

Los UARTs que se utilizan en los sistemas en serie del tipo RS232 funcionan muestreando la línea de datos en algún lugar a medio bit de acuerdo con una división del reloj de frecuencia base predefinido en baudios. Como tal, si los datos enviados y el receptor no están en la misma frecuencia, el "punto de muestra" se acercará más al borde del cuadro de bits en bits sucesivos.

Con un UART normal, la longitud de bits para un byte es de 10 u 11 bits. 1 inicio, 8 datos y 1 o 2 bits de parada. La mitad de un desplazamiento en el décimo bit se traduce en un error de 0.5 / 10 = 5%.

Sin embargo, en realidad su tolerancia es menor porque también necesita agregar la latencia de su período de frecuencia base que agregará un desplazamiento desde el borde anterior del bit de inicio. Cuanto mayor sea la frecuencia base, menor será el efecto que tenga.

En cuanto a usar un temporizador 555 para este propósito, no lo recomendaría a menos que planee tener un ajuste manual en el circuito 555.

A USART en la otra parte utiliza un método de control más complejo que intenta sincronizar la transmisión con los datos recibidos. Esto puede ser mediante el uso de un patrón de datos que tiene un reloj incorporado, mediante el uso de un reloj pasado o mediante algún tipo de bloqueo de fase en los bordes de datos recibidos. (Aunque podría decirse que este último es realmente pseudo-síncrono).

    
respondido por el Trevor_G

Lea otras preguntas en las etiquetas