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

En la comunicación en serie, ¿la tasa de baudios significa que tenemos que usar la velocidad de reloj exacta 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 por lo general puede tolerar una desviación de aproximadamente ~3%. Eso sí, depende de uno en concreto.
Para USB, se especificará en el estándar, que se puede descargar gratis.

Respuestas (2)

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 tiene 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 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 estar por debajo del nominal mientras que el otro está por encima del nominal.
  2. Puede haber imprecisiones sistemáticas. Por ejemplo, la mayoría de los UART 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 reloj y el generador de velocidad en baudios son perfectos, esto dará como resultado que no llegue exactamente a la mitad de cada bit.

La conclusión es que el error del 1% en su reloj es casi seguro que está bien. El error del 5% es casi seguro que es un problema. Entre esas dos cifras 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 da una tolerancia del 3% para la constante de tiempo de la red RC y eso es antes de pensar en los errores introducidos por el chip del controlador.

Entonces, la conclusión es que debería estar mirando 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 máxima velocidad.

Si uno puede programar la tasa de 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á el envío de 0xF8 y 0xF0 repetidamente (baja durante cuatro y cinco tiempos de bits, respectivamente), establecer la velocidad de transmisión un 33% más rápido debería causar que uno reciba constantemente 0xF0 (5,33 tiempos de bits) y 0x80 (6,67 bits). veces). Recibir otros valores le permitirá saber que es más rápido o más lento que esa velocidad "33% superior", mientras que recibir 0xF0 0x80 repetidos indicará que se debe reducir la velocidad en un 25% y comenzar una comunicación real.

Los UART que se utilizan normalmente en los sistemas seriales de tipo RS232 funcionan muestreando 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 tasa de baudios 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 bits de un byte es de 10 u 11 bits. 1 bit de inicio, 8 de datos y 1 o 2 bits de parada. Medio poco de desviación en el décimo bit se traduce en 0,5/10 = 5 % de error.

Sin embargo, en realidad su tolerancia es menor que eso porque también necesita agregar la latencia de su período de frecuencia base que agregará una compensación desde el borde de ataque del bit de inicio. Cuanto mayor sea su frecuencia base, menos efecto tendrá.

En cuanto al uso de 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 integrado, mediante el uso de un reloj pasado o mediante alguna forma de bloqueo de fase en los bordes de datos recibidos. (Aunque podría decirse que este último es realmente pseudosincrónico).

Como sabe de lo que está hablando, pensé en mencionar la abreviatura "U S ART", que debería ser parte de esta respuesta. Bueno, en mi opinión, completaría la respuesta , y después de eso merecería un +1 de mi parte.
@HarrySvensson hmm ... Estoy de acuerdo ... pero tratar de decidir es que solo hace que la respuesta sea más confusa para un OP de embalaje 555.
Un USART es diferente en que puede ser síncrono. Y si se usa como una interfaz síncrona, entonces el reloj es común para ambos extremos y la velocidad del reloj no importa.
Bueno, puede estar en los comentarios, gracias @gbarry. no me importa +1 a Trevor.
@HarrySvensson Agregué una breve explicación ondulada a mano de la diferencia para completar ...