velocidad del reloj del receptor UART

13

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 de bit de inicio y uno o más bits de parada .Además, el receptor debe conocer la velocidad de datos para generar reloj para conducir el registro SIPO utilizado para la recepción.

Las preguntas aquí son

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

    
pregunta Vivek Maran

3 respuestas

16

Los relojes del transmisor y del 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 que el receptor puede sincronizar, pero después de eso está solo: hay no hay más señales de tiempo que pueda usar para diferenciar los bits sucesivos. Todo lo que tiene es su propio reloj. Entonces, lo más simple que se puede hacer es comenzar desde la muestra de bits de inicio de cada bit en el medio de su tiempo. Por ejemplo, a 9600 bps, el tiempo de bit es de 104 µs, luego se muestrearía el bit de inicio en \ $ T_0 \ $ + 52 µs, el primer bit de datos en \ $ T_0 \ $ + 52 µs + 104 µs, el segundo dato bit en \ $ T_0 \ $ + 52 µs + 2 \ $ \ veces \ $ 104 µs, y así sucesivamente. \ $ T_0 \ $ es el flanco descendente del bit de inicio. Aunque el muestreo del bit de inicio no es realmente necesario ( sabes es bajo) es útil para determinar que el borde de inicio no fue un pico.

Paraunatemporizaciónde52µsnecesitaeldobledelafrecuenciaderelojde9600bps,o19200Hz.Peroestoessólounmétododedetecciónbásico.Losmétodosmásavanzados(leer:másprecisos)tomaránvariasmuestrasseguidas,paraevitargolpearsoloesepico.Entonces,esposiblequenecesiteunrelojde16\$\veces\$9600Hzparaobtener16ticsporbit,deloscualespuedeusar,porejemplo,5omásenloquedeberíaserlamitaddeunbit.Yelusodeunsistemadevotaciónparaversidebeleersecomoaltoobajo.

Sirecuerdocorrectamente,el68HC11tomóalgunasmuestrasalprincipio,enelmedioyalfinaldeunbit,laprimeraylaúltimaprobablementeparasincronizarsihubierauncambiodenivel(locualnoestágarantizado).

Elrelojdemuestreonosederivadelatasadebits,esalrevés.Para9600bps,deberáconfigurarelrelojdemuestreoa153600Hz,queobtendráatravésdeunpreescaladorapartirdelafrecuenciadelrelojdelmicrocontrolador.Entonceselrelojdebitssederivadeesoporotradivisiónpor16.

relojesincomparables
Estoesloqueocurrirásielrelojdelreceptornoestásincronizadoconeldeltransmisor:

El reloj del receptor es un 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 realiza una muestra en el medio de un bit, puede darse el lujo de estar a la mitad de un bit en el último bit, el bit de parada. La mitad de un bit en diez bits es del 5%, por lo que con nuestra desviación del 6.25% tendremos problemas. Eso se ve claramente en la imagen: ya en el tercer bit de datos que estamos muestreando cerca del borde.

    
respondido por el 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 tiene que haber un acuerdo por adelantado sobre cuál es la velocidad en baudios.

Cuando no se transmite, la línea se deja en estado inactivo. Para transmitir un byte (por ejemplo, son posibles otros anchos de datos), el transmisor envía primero el bit de inicio . El receptor utiliza el tiempo del borde anterior 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 de tiempo es 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 del transmisor sean los mismos, esto podría continuar para siempre. Sin embargo, nunca serán exactamente iguales por lo que no puede durar para siempre. Para permitir que se vuelva a sincronizar el reloj del receptor con el reloj del transmisor, el carácter de los datos finaliza, la línea permanece inactiva durante un bit y luego se repite el proceso. Los errores de tiempo se acumulan comenzando en el borde anterior del bit de inicio, por lo que la deriva máxima se encuentra en el último bit. Una vez que se termina ese carácter, el receptor se reinicia esperando el siguiente bit de inicio y el proceso se repite.

Con 8 bits de datos, el peor caso para la temporización es muestrear el último bit. Eso es 8,5 bits de tiempo de la referencia de tiempo, que es el borde delantero del bit de inicio. Si el receptor está apagado por 1/2 bit o más, muestreará el último bit durante un bit diferente. Claramente eso es malo. Esto sucede en 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 el desajuste. Para mayor confiabilidad, usualmente 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 anterior del bit de inicio. En teoría, esto podría hacerse en electrónica analógica, pero sería complicado y costoso y no sería fácilmente integrable en chips digitales. En cambio, la mayoría de las implementaciones de UART digitales tienen un reloj interno que funciona a 16 veces la velocidad de bits esperada. El "cronómetro" cuenta estos ciclos 16x. Eso significa que hay un posible error adicional de 1/16 bit agregado a todos los tiempos de muestreo de bits, que es como otra diferencia de reloj del .7% en el último bit.

Esperemos que esto aclare qué es el bit de parada, cómo funciona la temporización de bits y de qué se trata el reloj 16x. En su mayoría me salté los bits de parada, pero tal vez pueda ver por sí mismo por qué se requiere al menos un bit de parada. Básicamente, los bits de parada son el tiempo mínimo de inactividad de línea entre caracteres. Este es el tiempo durante el cual el receptor ha terminado de recibir un carácter y está listo para el siguiente borde de avance de un bit de inicio. Si no hubiera un bit de parada, entonces el último bit de datos podría ser de la misma polaridad que el bit de inicio y el receptor no tendría borde para iniciar su cronómetro.

Hace mucho tiempo este protocolo fue decodificado por levas, palancas y ruedas giratorias. Se usaron dos bits de parada para permitir que el mecanismo se reinicie. Hoy en día, todo se hace en lógica digital y 1 bit de parada se usa de manera bastante universal. A menudo se ve la taquigrafía escrita del protocolo de bajo nivel como 8-N-1, que significa 8 bits de datos, no hay bits de paridad (olvídese de estos, rara vez se utilizan en la actualidad) 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 toma 10 bits para enviar. Esta es una razón por la que hay una distinción entre "velocidad de bits" y "velocidad de transmisión". La velocidad de transmisión se refiere a los tiempos de señalización de bits individuales, incluidos los bits de inicio y parada. A 100 kBaud, cada bit que se transmite toma 10 µs, incluidos los bits de inicio y parada. Por lo tanto, todo el personaje toma 100 µs, pero solo se transfieren 8 bits de datos reales. La velocidad en baudios es de 100 k, pero la tasa de bits de transferencia de datos desde el punto de vista de niveles más altos es de solo 80 kBits / s.

    
respondido por el Olin Lathrop
5

La velocidad de bits para la transmisión es la velocidad de reloj dividida por (como suele decir) 16. También tiene algunos bits que no son de datos para los bits de trama (inicio, paridad, parada). Por lo tanto, para un reloj de 16000Hz, obtienes 1000 bits por segundo, pero después de un mínimo de bits de encuadre se insertan 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 las muestras de la línea llama lo que ve "primer bit de datos". repite este conteo y muestra la cantidad de veces suficiente para leer todo el símbolo, 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 llegará a las partes correctas de la señal transmitida.

    
respondido por el Jasen

Lea otras preguntas en las etiquetas