Velocidad de reloj del receptor UART


14

Estaba tratando de entender los fundamentos de UART. Se entiende que

  • Es un protocolo de comunicación asíncrono y, por lo tanto, los relojes TX y RX son independientes entre sí.
  • La recepción de datos está garantizada por el uso del bit de inicio y uno o más bits de parada. Además, el receptor debe conocer la velocidad de datos para generar un reloj adecuado para controlar el registro SIPO utilizado para la recepción.

Las preguntas aquí son

Se menciona que normalmente un reloj de 16X la tasa de bits se utiliza para recuperar los datos. Entonces, ¿cómo es posible la conversión de bps a frecuencia de reloj ? Proporcione algunas referencias para estudiar el mecanismo de sincronización empleado en el receptor UART.

Respuestas:


18

Los relojes del transmisor y el receptor son independientes entre sí, en la forma en que se generan de forma independiente, pero deben coincidir bien para garantizar una transmisión adecuada.

El bit de inicio, que es bajo, y el bit de parada, que es alto, garantizan que entre dos bytes siempre hay una transición de alto a bajo en la que el receptor puede sincronizarse, pero después de eso es independiente: no hay más tiempo señales que puede usar para distinguir partes sucesivas. Todo lo que tiene es su propio reloj. Entonces, lo más simple es comenzar desde la muestra de bits de inicio de cada bit en el medio de su tiempo. Por ejemplo, a 9600 bps, un tiempo de bit es 104 µs, luego muestrearía el bit de inicio en + 52 µs, el primer bit de datos en + 52 µs + 104 µs, el segundo bit de datos en + 52 µs + 2 104 µs, y así sucesivamente. es el flanco descendente del bit de inicio. Si bien el muestreo del bit de inicio no es realmente necesario (ustedT0 0T0 0T0 0×T0 0 que es bajo) es útil determinar que el borde inicial no fue un pico.

ingrese la descripción de la imagen aquí

Para una temporización de 52 µs, necesita el doble de la frecuencia de reloj de 9600 bps, o 19200 Hz. Pero este es solo un método de detección básico. Los métodos más avanzados (léase: más precisos) tomarán varias muestras seguidas, para evitar golpear solo ese pico. Entonces, de hecho, puede necesitar un reloj de 16 9600 Hz para obtener 16 tics por bit, de los cuales puede usar, digamos, 5 más o menos en lo que debería ser la mitad de un bit. Y usa un sistema de votación para ver si debe leerse como alto o bajo.×

Si recuerdo correctamente, el 68HC11 tomó algunas muestras al principio, en el medio y al final de un bit, el primero y el último presumiblemente para volver a sincronizar si hubiera un cambio de nivel (que no está garantizado).

El reloj de muestreo no se deriva de la velocidad de bits, es al revés. Para 9600 bps, deberá configurar el reloj de muestreo en 153 600 Hz, que derivará a través de un preescalador de la frecuencia de reloj del microcontrolador. Entonces el reloj de bits se deriva de eso por otra división por 16.

relojes inigualables
Esto es lo que sucederá si el reloj del receptor no está sincronizado con el transmisor:

ingrese la descripción de la imagen aquí

El reloj del receptor es 6.25% lento, y puede ver que el muestreo para cada bit siguiente será más tarde y más tarde. Una transmisión UART típica consta de 10 bits: 1 bit de inicio, una carga útil de 8 bits de datos y 1 bit de parada. Luego, si toma muestras en el medio de un bit, puede darse el lujo de estar medio bit apagado en el último bit, el bit de parada. Medio bit en diez bits es 5%, así que con nuestra desviación de 6.25% tendremos problemas. Eso se muestra claramente en la imagen: ya en el tercer bit de datos estamos muestreando cerca del borde.


Agradezco la ayuda. ¡Gracias! ¿No debería muestrearse el bit de inicio en T0 + 104us en lugar de T0 + 52us?
Vivek Maran

1
@ Vivek27: no, porque 104 us es la duración del bit de inicio, y luego estarías muestreando al final, en lugar de en el medio. Si me das un par de minutos, actualizaré mis fotos. :-)
stevenvh

1
@Vivek: En realidad, el bit de inicio no está realmente "muestreado" en absoluto. Todo su propósito es proporcionar esa transición inicial desde la línea inactiva que el resto del carácter está cronometrado en relación con. Su "valor" es siempre la línea opuesta inactiva y no contiene ningún dato por sí solo.
Olin Lathrop

77
@Olin - Me gustaría probar el bit de inicio, sólo para comprobar que el borde de partida no era una espiga.
stevenvh

1
@downvoter: si nos diga qué está mal aquí, podría solucionarlo. Pero luego tienes que decirnos algo . (¿Eres el mismo que también rechazó mi otra respuesta hoy?)
stevenvh

11

Retrocedamos un poco y hablemos sobre el protocolo de señalización de bajo nivel utilizado por los UART. TX y RX son líneas de datos, no relojes. Los relojes solo están dentro de cada UART, por lo que debe haber un acuerdo inicial sobre cuál es la velocidad en baudios.

Cuando no se transmite la línea queda en estado inactivo. Para transmitir un byte (por ejemplo, otros anchos de datos son posibles), el transmisor primero envía el bit de inicio . El receptor utiliza el tiempo del borde inicial del bit de inicio y la velocidad de transmisión conocida para decodificar el resto del carácter. Digamos por simplicidad que se están utilizando 100 kBaud. Eso significa que cada bit es de 10 µs de largo. Esto incluye el bit de inicio, los bits de datos y los bits de parada. Por lo tanto, la mitad del primer bit de datos estará a 15 µs después del borde inicial del bit de inicio, el segundo a 25 µs, etc.

Mientras los relojes del receptor y el transmisor sean iguales, esto podría durar para siempre. Sin embargo, nunca serán exactamente lo mismo, por lo que no puede continuar para siempre. Para permitir la resincronización del reloj del receptor con el reloj del transmisor, el carácter de datos finaliza, la línea se deja inactiva por un momento y luego se repite el proceso. Los errores de tiempo se acumulan comenzando en el borde delantero del bit de inicio, por lo que la deriva máxima está en el último bit. Una vez que el personaje ha terminado, el receptor se restablece esperando el siguiente bit de inicio y el proceso se repite.

Con 8 bits de datos, el peor de los casos es el muestreo del último bit. Eso es 8,5 bits de la referencia de temporización, que es el borde de ataque del bit de inicio. Si el receptor está apagado en 1/2 bit o más, muestreará el último bit durante un bit diferente. Claramente eso es malo. Esto sucede con una falta de coincidencia de frecuencia de reloj de 1/2 bit en 8 1/2 bits, o 5.9%. Esa es la garantía de fallar desajuste. Para mayor confiabilidad, generalmente desea asegurarse de que el receptor coincida con el transmisor dentro de la mitad de eso, o 2.9%. Eso representa un error de tiempo de 1/4 bit en el último bit.

Sin embargo, no es tan simple. En el escenario descrito anteriormente, el receptor esencialmente inicia un cronómetro en el borde delantero del bit de inicio. En teoría, eso podría hacerse en electrónica analógica, pero sería complicado y costoso y no fácilmente integrable en chips digitales. En cambio, la mayoría de las implementaciones digitales de UART tienen un reloj interno que funciona a 16 veces la velocidad de bits esperada. El "cronómetro" luego cuenta estos 16 ciclos. Eso significa que hay un posible error adicional de 1/16 bit agregado a todos los tiempos de muestreo de bits, que es como otro desajuste de reloj de .7% en el último bit.

Esperemos que esto deje en claro cuál es el bit de parada, cómo funciona el tiempo de bits y de qué se trata el reloj 16x. Sobre todo omití los bits de parada, pero tal vez puedas ver por ti mismo ahora por qué se requiere al menos un bit de parada. Básicamente, los bits de parada son el tiempo de inactividad mínimo de línea forzada entre caracteres. Este es el tiempo durante el cual el receptor ha terminado de recibir un personaje y está listo para el próximo borde inicial de un bit de inicio. Si no hubiera un bit de parada, entonces el último bit de datos podría tener la misma polaridad que el bit de inicio y el receptor no tendría borde para encender su cronómetro.

Hace mucho tiempo, este protocolo fue decodificado por levas, palancas y ruedas giratorias. A menudo se usaban dos bits de parada para permitir que el mecanismo se reiniciara. Hoy en día, todo se hace en lógica digital y 1 bit de parada se usa de manera bastante universal. A menudo ve el protocolo de bajo nivel escrito de forma abreviada como 8-N-1, lo que significa 8 bits de datos, sin bits de paridad (olvídese de estos, rara vez se usan hoy) y 1 bit de parada. El bit de inicio está implícito ya que no hay opción allí.

Usando 8-N-1, un byte de datos de 8 bits en realidad tarda 10 bits en enviarse. Esta es una razón por la que hay una distinción entre "tasa de bits" y "tasa de baudios". La velocidad en baudios se refiere a los tiempos de señalización de bits individuales, incluidos los bits de inicio y parada. A 100 kBaudios, cada bit que se transmite tarda 10 µs, incluidos los bits de inicio y parada. Por lo tanto, el carácter completo tarda 100 µs, pero solo se transfieren 8 bits de datos reales. La velocidad en baudios es de 100 k, pero la velocidad de transferencia de datos desde el punto de vista de los niveles superiores es de solo 80 kBits / s.


5

La tasa de bits para la transmisión es la tasa de reloj dividida por (como usted dice, típicamente) 16. También tiene algunos bits que no son de datos para los bits de trama (inicio, paridad, parada). Entonces, para un reloj de 16000Hz, obtienes 1000 bits por segundo, pero después de insertar un mínimo de bits de encuadre, solo 800 bits de datos o 100 bytes por segundo.

Para recibir, el receptor cuenta desde la mitad de los relojes del bit de inicio 16 y muestrea que la línea llama lo que ve "primer bit de datos". repite este recuento y muestra suficientes veces para leer el símbolo completo, luego confirma la presencia del bit de parada y comienza a esperar el siguiente bit de inicio.

Mientras el reloj del receptor esté cerca de la velocidad del reloj del transmisor, el muestreo alcanzará las partes correctas de la señal transmitida.

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.