¿Una velocidad de transmisión en baudios en comunicación serie (USB o RS232) debe ser exacta?


8

En la comunicación en serie, ¿la tasa de baudios significa 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 reloj de un circuito de comunicación en serie?


Un UART generalmente puede tolerar una desviación de aproximadamente ~ 3%. Sin embargo, depende de uno específico.
Eugene Sh.

Para USB, se especificará en el estándar, que se puede descargar gratis.
The Photon

Respuestas:


6

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


La serie UART se resincroniza en cada byte y un byte tiene alrededor de 10 bits (8 bits de datos más inicio y parada). Asumimos que nuestro UART apunta a la mitad de cada bit. Si todo es perfecto y solo un extremo es inexacto, eso 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 ser inferior al nominal mientras que el otro es inferior al nominal.
  2. Puede haber imprecisiones sistemáticas. Por ejemplo, la mayoría de los UARTS tienen una gama limitada de configuraciones de generador de velocidad de transmisión.
  3. Su UART se basa en un reloj maestro con una velocidad finita. Incluso si el reloj y el generador de velocidad en baudios son perfectos, esto no hará que 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 seguro un problema. Entre esas dos figuras puede o no ser un problema dependiendo de la imagen general.

Esa 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 un 3% de tolerancia a la constante de tiempo de la red RC y eso es antes de pensar en cualquier error introducido por su chip controlador.

Entonces, la conclusión es que debería mirar un resonador de cristal o cerámica.


En cuanto a USB, no tengo la experiencia para analizar desde los primeros principios, pero https://www.silabs.com/community/interface/knowledge-base.entry.html/2004/03/15/usb_clock_tolerance-gVai dice 1.5% para baja velocidad y 0.25% para velocidad máxima.


Si uno puede programar la velocidad en baudios en pasos del 3% o más finos y puede usar una secuencia de "entrenamiento" adecuada, la precisión de RC puede no ser un problema. Si uno sabe que el otro extremo alternará enviando 0xF8 y 0xF0 repetidamente (bajo para tiempos de cuatro y cinco bits, respectivamente), establecer la velocidad en baudios un 33% más rápido debería hacer que uno reciba constantemente 0xF0 (5.33 bits veces) y 0x80 (6.67 bits veces). Recibir otros valores le permitirá a uno saber que uno es más rápido o más lento que esa velocidad "33% superior", mientras que la recepción de 0xF0 0x80 repetido indicará que uno debe reducir la velocidad en un 25% y comenzar una comunicación real.
supercat

8

Los UART que se usan típicamente en los sistemas seriales de tipo RS232 funcionan al muestrear la línea de datos en algún lugar a mitad de bit de acuerdo con una división del reloj de frecuencia base de velocidad de transmisión predefinida. Como tal, si los datos enviados y el receptor no están en la misma frecuencia, el "punto de muestra" se acercará al borde de la trama de bits en bits sucesivos.

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

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 inicial del bit de inicio. Cuanto mayor sea su frecuencia base, menos efecto tendrá.

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.

Un USART, por otro lado, 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 incrustado, mediante el uso de un reloj pasado, o mediante alguna forma de bloqueo de fase a los bordes de datos recibidos. (Aunque podría decirse que este último es realmente pseudo-sincrónico).


Como sabes de lo que estás hablando, pensé en mencionar la abreviatura "U S ART", que debería ser parte de esta respuesta. Bueno, completaría la respuesta en mi opinión, , y después de eso merecería un +1.
Harry Svensson

1
@HarrySvensson hmm ... Estoy de acuerdo ... pero tratar de decidir es que eso hace que la respuesta sea más confusa para un OP de embalaje 555.
Trevor_G

1
Un USART es diferente en que puede ser sincrónico. Y si se usa como una interfaz síncrona, entonces el reloj es común en ambos extremos, y entonces la velocidad del reloj no importa.
gbarry

1
Oh, bueno, puede estar en los comentarios, gracias @gbarry. No me importa +1 a Trevor.
Harry Svensson

@HarrySvensson Agregué una breve explicación ondulada de la diferencia por completo ...
Trevor_G
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.