2008-11-09 33 views
7

Sé que en una gran cantidad de comunicación asíncrona, el paquete comienza con un bit de inicio.Bit de inicio vs Start Byte

Pero un bit de inicio es solo un 1 o 0. ¿Cómo se diferencia un bit de inicio del bit final del último paquete?

Ej. Si elijo que mi bit de inicio sea 0 y mi bit de fin sea 1. y reciba 0 (flujo de datos A) 1 0 (flujo de datos B) 1, ¿Qué hay para evitar que suponga que hay una secuencia de datos? C que contiene los mismos contenidos de "(secuencia de datos A) 1 0 (secuencia de datos B)"?

¿No es más conveniente tener un inicio BYTE y luego verificar el flujo de datos para esa combinación de bits? Eso reducirá la posibilidad de una confusión entre el bit de inicio/finalización.

Respuesta

9

¡Gran pregunta! La mayoría de las comunicaciones asíncronas también especifican un stop bit, que es el complemento del bit de inicio, asegurando que cada nuevo símbolo comience con una transición de parada a inicio.

Ejemplo: vamos a transmitir los caracteres ABC, que son ASCII 65, 66 y 67:

A = 65 = 0x41 = 0100 0001 
B = 66 = 0x42 = 0100 0010 
C = 67 = 0x43 = 0100 0011 

Supongamos también (arbitrariamente) que el bit de inicio es 0 y el bit de parada es 1, y el los datos se transmiten de MSB a LSB. El transmisor estará en el estado de detención (1) cuando no se transmiten datos. Por lo que el receptor puede ver esto:

Data: ....1111 0010000011 111 0010000101 0010000111 11111.... 
     (quiet)^ A $ ^ B $^ C $ (quiet) 

Con perdón de los gráficos ASCII, los datos consisten en una serie de parada (1) bits mientras que el canal está inactivo. Cuando el transmisor está listo para enviar un carácter, envía un bit de inicio (0) (marcado con ^), seguido del código de carácter y termina con un bit de parada (1) (marcado con $). Continúa enviando bits de parada hasta que se transmita el siguiente carácter, comenzando con otro bit de inicio.

La razón por la que usar el inicio bits de bytes en lugar de es la eficiencia. El esquema anterior requiere 10 bits (1 inicio + 8 datos + 1 parada) para transmitir 8 bits de datos, lo que resulta en una overhead de (10 - 8)/8 = 1/4 = 25% . Si usáramos start y stop bytes, necesitaríamos transmitir 3 bytes por cada byte de datos, lo que sería una sobrecarga de (3 - 1)/1 = 2 = 200%. Si el inicio, los datos y los bytes de parada fueran cada uno de 8 bits, tendríamos que transmitir 24 bits en lugar de 10 para cada carácter, por lo que tardaría casi 2 1/2 veces más en enviar los datos.

+0

Parece que en su ejemplo hay una fase "silenciosa"/inactiva. En un programa, ¿verificaría esto con un tiempo de espera? – Steve

+0

Nunca he visto una implementación que se comporte de la manera que usted describe, el envío continuo de bits de parada mientras la línea está inactiva, eso no tiene ningún sentido. –

+1

Soy un tipo de hardware. Si comprueba el voltaje en la línea de recepción del puerto serie de su PC, * siempre * estará en el nivel 0 o 1 (o haciendo una transición rápida entre ellos). El punto del bit de inicio es forzar una transición de "detener", que es lo mismo que "inactivo". –

0

Esta es la forma de inicio y bits de parada por lo general trabajan:

  1. Un bit de inicio se envía, dicen 1. Esto indica al receptor que se transmitirá un número especificado de bits de datos, por ejemplo 8.
  2. Se envían 8 bits de datos.
  3. Se envía un bit de parada, digamos 0. Esto indica que se han enviado los 8 bits de datos.

Si se van a enviar más datos, cada byte se debe iniciar con un bit de inicio y finalizar con un bit de parada. El transmisor y el receptor deben acordar cuántos bits de datos se envían para cada bit de inicio para que el receptor pueda distinguir el bit de parada de los datos. A veces, el bit de inicio es en realidad varios bits o incluso un byte, pero la idea es la misma. El receptor reconoce el final de la trama de datos cuando ve el bit de parada después de recibir el número de bits de datos previamente especificado. En ocasiones, se envía un bit de paridad antes del bit de parada para proporcionar un mecanismo simple de detección de errores.

0

Todo depende del protocolo. Puede decir que después del símbolo de inicio esperará N símbolos o lo leerá hasta que encuentre el símbolo de parada.

Dónde símbolo colud ser cualquier secuencia de n bits (incluyendo bit y byte.)

De hecho, su ejemplo con los bits se aplica exactamente a un protocolo que utiliza bytes en lugar de bits.

Digamos que envía 00000000 11111111 00000000 Un flujo de la corriente B 11111111. En este caso es posible que aún confundirla con la corriente C = corriente A 11111111 00000000 corriente B.

Por lo general, se utiliza un bit de inicio debido a un cambio de nivel de voltaje puede desencadenar un evento (Consulte el disparo de borde en flip flops). Por otro lado, se usará un símbolo de inicio con múltiples bits para sincronizar los relojes de dos sistemas además de desencadenar un evento. Un ejemplo de esto sería una señal PAL.

-2

Los bits de inicio y parada proceden de los días del teletypes. Básicamente fueron pulsos que tomaron tiempo para permitir que el hardware mecánico se estableciera. Dos líneas de archivo de texto se terminan con CR LF que literalmente hizo que el carro volviera a la columna 1, y que la platina avanzara una línea. Creo que está en el orden porque toma más tiempo para que ocurra el CR, y el LF puede suceder efectivamente en paralelo.

Detectarlo es un poco más difícil. De alguna manera tienes que ver pasar la corriente de bits. Con el tiempo, debe ser capaz de detectarlo, ya que los datos son normalmente ASCII con los bits de inicio/parada a su alrededor. Normalmente esto no es un problema, ya que es manejado por el UART que ejecuta el puerto COM.

+0

Puede confundir los bits de inicio y finalización con los caracteres de estimulación, que están diseñados para retrasar la transmisión hasta que el hardware lo "atrape". Los bits de inicio y parada son estrictamente para sincronizar el receptor con el transmisor, por lo que "busca" cada bit en el momento correcto. –

+0

Esta respuesta es incorrecta en muchos puntos ... EvilTeach de hecho. – jpinto3912

+0

Y lo dejo como una advertencia a los demás. – EvilTeach

1

Uno siempre puede definir un byte de inicio como una indicación de que un mensaje está comenzando (y los códigos ASCII SOH, STX, y ETX fueron destinados para tales propósitos). Sin embargo, el hardware y los protocolos estándar para la conexión a equipos de transmisión de datos (RS232C y posterior) operan a un nivel inferior, y generalmente no es posible ni deseable alterar esa disposición (especialmente a través de software).

Los esquemas de transmisión de datos síncronos de alto rendimiento, como los utilizados en redes de área local y sistemas de transmisión de área extensa, utilizan elaborados marcadores de trama. El marcador de marco es un patrón distinto de bits que nunca ocurre en la secuencia de datos del mensaje. Normalmente hay una regla de reescritura especial que esencialmente "escapa" cualquier ocurrencia en el contexto de un patrón de bits similar para que el equipo de transmisión no lo vea como un marcador de marco. Estos patrones escapados son reconstruidos por el receptor para que el emisor y el receptor nunca tengan que prestar atención a esto. Estos arreglos hacen que el hardware especializado sea aún más importante, como en la típica tarjeta de interfaz de red (actualmente, chip de placa base) en computadoras personales.

ANTECEDENTES EN Comunicación asíncrona SERIE

Es útil pensar en las transmisiones serie asíncronos como asíncrona entre los marcos de caracteres/datos y sincrónica en el lapso de la trama de caracteres (incluyendo los bits de inicio y parada/llenado inicial).

Con este esquema, hay una señal de relleno constante entre los cuadros y generalmente es al menos un bit de datos de ancho, aunque algunas disposiciones requieren un stop/fill de 1,5 bits o dos bits. El "bit" de parada usa el mismo nivel de señal y puede considerarse el período de llenado mínimo antes de que llegue otro bit de inicio.

Cuando llega un marco, es necesario sincronizar con el número predeterminado de bits que se espera que transporte. La transición de la señal de llenado a una señal de nivel opuesto se realiza mediante el bit de inicio que siempre es opuesto al nivel de detención/llenado. El muestreo de los bits puede programarse para que ocurra en el medio de los siguientes períodos de llegada de bits.

Técnicamente, si los marcos se envían a la velocidad máxima, no sería necesario enviar ningún stop/fill, procediendo al bit de inicio del siguiente marco inmediatamente. Sin embargo, contar con al menos un bit de relleno antes de la transición de inicio de bits ayuda a mantener al emisor y al receptor sincronizados.

Si considera que las transmisiones asíncronas se codifican a partir de las pulsaciones de tecla utilizando un teclado, puede ver la importancia de permitir el relleno arbitrario entre cuadros de caracteres. Una vez que se sabe qué marco enviar a continuación, se puede insertar inmediatamente, con su bit de inicio, a la velocidad de bits acordada, después de que haya al menos un bit de stop/fill anterior.

También es útil notar que, en las transmisiones asíncronas de baja velocidad típicas, hay solo dos tipos de bits/niveles, por lo que la única forma de distinguir la presencia de datos en lugar del relleno es mediante un esquema de marcador como este donde el inicio del cuadro es único detectable y el final del cuadro está predeterminado (a menos que exista una estructura de cuadro de longitud variable más sofisticada generalmente no utilizada en comunicación serial asíncrona). En realidad, es bastante difícil para un receptor descubrir la velocidad de bits de un transmisor sin algún acuerdo adicional, como buscar una secuencia de datos reconocible a partir de la cual se pueda estimar la velocidad de bits que haría que llegara correctamente cuando llegara en forma incorrecta.

Aunque los módems de alta velocidad ahora transmiten señales analógicas complejas que no se describen en términos de dos niveles de señal simples, la comunicación digital RS232C (y modo posterior) entre un UART de computadora y el acoplamiento de datos en el módem más o menos como se describe.

Los módems de alta velocidad también tienen capacidades adicionales para sincronizar con un punto final distante, como puede ver al escuchar la señal de audio mientras se inicia una conexión. Además, hay líneas de señal separadas en el cable serie de la computadora que se usan para estimulación entre la computadora y el módem, de modo que la parte que envía no transmite nuevas tramas de datos más rápido de lo que la parte receptora (ya sea computadora o módem) puede aceptar ellos. Pero un cuadro, una vez iniciado, siempre se inicia a la velocidad sincrónica acordada.

Wikipedia tiene una buena descripción de asynchronous serial communication, lo que utilizan los puertos serie de la computadora.

Hay una sobre simplificación común que sugiere que el bit de parada determina la longitud de los datos. Ese no es el caso. El bit de parada se ve como un nivel para otro bit de datos. La forma en que se reconocen el bit de parada y el período hasta el siguiente bit de inicio es conociendo la tasa de bits a la que se transmiten los datos dentro del cuadro y los bits de inicio/parada y sabiendo cuántos bits contiene un cuadro.De lo contrario, no hay forma de distinguir un bit de parada de solo otro bit de esa polaridad como parte del marco de datos.