bits de inicio en comunicaciones en serie asíncronas

5

Comprendo conceptualmente la comunicación en serie sincrónica, pero tengo problemas con el funcionamiento asíncrono. Específicamente en esta situación:

Digamos que quiero enviar un byte: 0x03. Tenemos un bit de inicio y parada, que son bajos y altos, respectivamente. ¿Cómo sabe el dispositivo receptor que estoy enviando un bit de inicio seguido de 6 0s? ¿Cómo sabe que eso no es solo un bit de inicio largo?

Seguimiento: ¿qué exactamente es un UART? Estoy preguntando cuál es el uso común, ya que he visto varios lugares referirse a él como un estándar y otros como una pieza de hardware.

    
pregunta brenzo

5 respuestas

13
¿Cómo sabe el dispositivo receptor que estoy enviando un bit de inicio seguido de 6 0s? ¿Cómo sabe que eso no es solo un bit de inicio largo?

Debido a que con este tipo de comunicación, tanto el remitente como el receptor tienen que ponerse de acuerdo con anticipación en algunos parámetros. Los dos parámetros clave aquí son la velocidad en baudios y el número de bits de datos.

La línea comienza en el nivel inactivo. El transmisor primero envía el bit de inicio, que se encuentra en el nivel opuesto. A continuación, envía los bits de datos, seguido del bit de parada.

A diferencia de lo que otros han dicho, el bit de parada no es una suma de comprobación. Es necesario para que siempre haya una transición en el borde inicial del bit de inicio. De lo contrario, si el último bit de datos sobre el carácter anterior resultó ser de la misma polaridad que un bit de inicio, el receptor no podrá ver el bit de inicio si se envía un nuevo carácter de inmediato. El bit de parada es esencialmente un tiempo de inactividad de línea forzada entre caracteres. Ese tiempo también se usa para absorber cierta discrepancia entre el remitente y el receptor.

Cuando está inactivo, el receptor monitorea la línea en busca de que cambie al estado no inactivo. Cuando eso sucede, se inicia un cronómetro. Dado que está configurado para la misma tasa de bits que el transmisor, sabe cuándo se envía cada bit de datos, si difiere de un bit anterior o no. La mitad del primer bit de datos se encuentra a 1½ bits del borde anterior del bit de inicio. El segundo en tiempos de 2½ bits, etc.

Una vez que se recibe el último bit de datos, el receptor espera a que la línea regrese al estado inactivo y luego espera el siguiente bit de inicio nuevamente.

Un UART es un dispositivo que realiza todo este tiempo de transmisión y recepción por usted. Configura el UART para la velocidad en baudios que usará, el número de bits de datos y algunos otros parámetros. Después de eso, por lo general solo le das bytes completos y se encarga de extraer los bits. Para la recepción, detecta el bit de inicio, realiza la sincronización, toma los bits y le da un byte en una bandeja de plata, a menudo con información de estado opcional adicional.

    
respondido por el Olin Lathrop
4

Bueno, funciona así. Con la comunicación asíncrona, el extremo receptor generalmente ya debe conocer la velocidad en baudios, que es lo suficientemente cercana como para significar simplemente "bits por segundo" para nuestra discusión. Por lo tanto, tenemos un estado "normal" o "en reposo" de la línea de comunicación con referencia a tierra, que en realidad será el mismo estado que el bit de "parada" (esto tendrá más sentido en un minuto).

Ahora, si usted, como receptor, "sabe" cuál es la velocidad (Baud o BPS) que se espera que sea, entonces puede organizar un circuito que se active cuando detecte una transición a un nuevo estado. Bueno, dado que este nuevo estado es lo opuesto al estado "en reposo", ahora SABES que se está transmitiendo un byte. A continuación, ya que "sabe" la velocidad, puede calcular el tiempo que debería tardar en completarse, ¿no? Entonces, cuando el receptor detecta esta transición, debe esperar 1-1 / 2 el tiempo de un bit, y luego mirar el nuevo estado. El primer tiempo de bit "1" para esperar hasta que se complete el bit de inicio "1", y el segundo tiempo de bit "1/2" es para garantizar que, al observar el estado de su primer bit de datos, esté "muestreando" justo en el medio de ese bit.

Entonces, en este punto, su receptor muestreará el estado, almacenará el bit en un registro de desplazamiento, esperará otro tiempo de bit completo, muestreará el estado nuevamente. En ese punto, cambiaría el último bit grabado en una posición y almacenaría el nuevo bit. Este proceso continúa hasta que se haya completado un número de bits previamente acordado. (Probablemente 8, ¡pero no tiene que ser!) En ese momento, ha grabado todo el byte (o palabra) entrante.

Puede haber o no un bit de "paridad" adicional, nuevamente dependiendo de los parámetros acordados entre el transmisor y el receptor. Si hay un bit de paridad, el proceso de cambio / muestra continúa una vez más. Luego se realiza un cálculo simple para contar el número de "1" bits en la palabra grabada y ver si el total es impar o par, y comparar el resultado con el bit de paridad detectado. (como es lógico, la respuesta correcta depende de si la paridad "impar" o "par" es el formato acordado).

Ahora el bit de "parada" es menos de una ciencia exacta, por eso a veces ves opciones para bits de "parada" que van desde "1" (como mínimo) hasta 2, a veces incluyendo un 1-1 / 2 como una opción. El bit de parada (o bits) es simplemente la cantidad de tiempo que el receptor espera tener para mover el último byte al búfer de bytes que recibe, y se reinicia y está listo para recibir otro byte. Entonces, esta es la razón por la cual el bit de "parada" es simplemente un retorno al estado "en reposo".

Finalmente, un UART (receptor y transmisor asíncrono universal) es un circuito, que a menudo se proporciona como una parte separada o como una función incorporada a un microprocesador. Por lo general, le permitirá programar todos esos parámetros "esperados", velocidad de transmisión, bits de inicio y parada, opciones de paridad y es capaz de manejar toda la secuencia de detección de estado, muestreo y un registro de desplazamiento para recibir o enviar un byte. También tendrá características interesantes que le permitirán controlar la velocidad de muestreo de bits. Normalmente, un UART también proporcionará una interrupción y un programa "vector", de modo que cuando se recibe un byte, el procesador de control puede responder y almacenar el byte inmediatamente.

Finalmente, aunque no lo pidió, también hay dispositivos USART, que básicamente ofrecen todas las características de un UART, pero además agregan las capacidades necesarias para la comunicación de SYNCHRONUS.

    
respondido por el Randy
2

La comunicación asíncrona se basa en que la velocidad de transmisión es correcta. El bit de inicio le dice al receptor que verifique el nivel de bit cada tiempo BIT definido por la velocidad en baudios.

Por lo tanto, el bit de inicio interrumpe básicamente el receptor y comienza a sondear la línea de señal cada poco tiempo para recibir los bits subsiguientes.

El bit de parada es como una suma de comprobación y también garantiza una brecha entre cada byte de datos. Esperará ver eso o esos bits en un estado definido. Si no, se genera una condición de error.

Un UART , receptor / transmisor asíncrono universal, es el hardware de la máquina de estado que abarca toda esa funcionalidad.

Si selecciona una velocidad en baudios o un formato diferentes a los que espera el receptor, la comunicación fallará.

    
respondido por el Trevor_G
0

Tienes razón en que hay patrones que parecen muchos bits de inicio o bits de parada. La parada para comenzar es una transición conocida (como Olin lo señaló como la causa del bit de parada) pero si los datos se mueven a la velocidad de la línea y un receptor se encuentra en el medio, puede tomar muchos símbolos antes de que el receptor pueda encontrar una parada para comenzar. Transición de bits que el número de bits acordado más tarde termina en otro bit de parada. Es fácil crear patrones que, si envía repetidamente a la velocidad de línea, el receptor podría estar bloqueando en la parada incorrecta para iniciar la transición y descodificar los datos incorrectamente. Los bits de paridad ayudan con esto, pero no son infalibles, solo se resuelven realmente haciendo que los datos varíen a lo largo del tiempo o forzando períodos de inactividad de vez en cuando.

Si tiene demasiados bits de inicio seguidos, se trata de una "interrupción", que es un error de trama, pero un error de trama específico que a veces se usa intencionalmente.

Se considera asíncrono en el sentido de que cada lado tiene su propio reloj, los mensajes son lo suficientemente cortos como para que pueda desconectarse un poco y aún así extraer los 8-10 bits. Los uarts típicos tendrán una sobreexplotación de 8 o 16 veces, por lo que dicen que son 8x sobre muestreados, por lo que hay 8 periodos de reloj por tiempo de bit, y si el borde de inicio está en el recuento 2 de la sobreexplotación, entonces para los siguientes bits. muestrea en el conteo 6, que sería una celda de bit de oferta, solo tiene que ser bueno para 10 o más celdas de bit. Incluso podría hacer que su lógica se ajuste si hay transiciones si no son todas o solo ceros, si obtiene la mitad y ve una ventaja en la cuenta 1 en lugar de la cuenta 2 en su lógica de sobremuestreo, entonces puede probar las siguientes celdas. cuente 5 en lugar de 6 para ajustar la mitad de la celda de bits. Es muy típico que los datos continuos se sigan ajustando, en serie cuando normalmente tenemos 10 u 11 bits por símbolo / carácter, puede que los relojes de la fuente y el receptor estén bastante apagados y aún funcionen lo suficientemente bien.

    
respondido por el old_timer
0

Otras respuestas explican bien el muestreo del nivel de bits, pero quería explicar más a fondo las actividades de subbitros y los detalles sobre la inclinación y la fase del reloj.

  

cómo funciona asíncrono.

El remitente y el recuperador están de acuerdo con el formato: un cuadro de 1 bit de inicio, N bits de datos, paridad opcional y 1, 1.5 o 2 bits de parada.

Están de acuerdo en una aproximada tasa de comunicación común, como 1 / 115,200 segundos por "bit" o baudios. Cada lado tiene su propio reloj. El resultado es que los relojes pueden ser ligeramente diferentes entre sí. ley de Segal . En teoría, se permite una diferencia de alrededor del 10%, en la práctica, es más como un 5%.

Sin embargo, un elemento importante que do no comparte es fase de sus relojes. Incluso si tanto el remitente como el receptor tienen frecuencias de reloj idénticas, la relación fase entre los relojes del remitente / receptor no está controlada. Con relojes casi idénticos, esta fase se desplaza lentamente.

Para hacer frente a esta diferencia fase , el receptor muestrea a una velocidad mayor que el baudio. Asumamos 16 veces más rápido.

Un receptor se despierta para mirar su entrada, que está muestreando a 16x baudios. Si la entrada no está inactiva, espera hasta que la línea esté inactiva por un tiempo.

Una vez que la entrada está en estado inactivo (no se están enviando datos), el receptor busca una transición de muestra al estado activo. Una vez que se detecta esto, un buen receptor también busca 1/2 bit de tiempo (8x muestras) más tarde para un estado activo continuo. Si se detecta esto, se encuentra un estado bit y se detecta la fase (dentro de 1/16 de bit) de los datos entrantes. Si no, la señal falsa generalmente se ignora silenciosamente y el receptor la rechaza como ruido y comienza nuevamente como se indica arriba.

Las siguientes N muestras, realizadas a ancho de bit completo desde el bit de inicio 1/2 desplazamiento de bit, asumen que la línea es datos y se lee el LSbit al MSbit.

A veces se incluye un bit de paridad.

Finalmente, los siguientes 1 (o raramente 2) bits se muestrean (en su parte media) y deberían estar en estado inactivo. De lo contrario, se dice que el cuadro recibido tiene un error de bit de parada o error de cuadro . Un bit de inicio largo es un error de trama especial llamado break .

Después de que se muestrea el último bit de parada, cerca de su mitad, el receptor está inmediatamente listo para otro bit de inicio. Esto permite que los relojes del remitente y del receptor tengan hasta un 5-10% de diferencia entre sí y la comunicación sea exitosa.

  

¿Cómo sabe el dispositivo receptor que estoy enviando un bit de inicio seguido de 6 0s?

En el caso de OP, enviando x03 o b0000-0011, después de que la línea haya estado inactiva (1-1-1-1 -... estado) por un tiempo y el receptor esté listo, el emisor emite un inicio 0, 1-1-0-0-0-0-0-0, bit de parada 1. El receptor detecta el bit de inicio, los datos y el bit de parada. ¡Éxito!

Los atributos adicionales, no cubiertos, incluyen el muestreo excesivo de datos con detección mayoritaria, ruptura, detalles de paridad, protocolos de nivel superior, detección automática de baudios, etc.

    
respondido por el chux

Lea otras preguntas en las etiquetas

Comentarios Recientes

puede cambiar desde el valor anterior para una descripción de datos como el patrón de 1, 1,… 0 bits. Consulte la Sección 9.6 para la serialización en serie. Una descripción de datos con errores para un estado de reloj aleatorio se designará como buggy_reduc_code. El bit volátil del campo de bit volátil de una enumeración de área de memoria m no se puede establecer antes de cambiar el valor. Sin embargo, los mutexes generalmente pueden ser volátiles y solo indicadores volátiles. (El indicador volátil requerido... Lees verder