¿Por qué el bit de inicio y el (los) bit (es) de parada son necesarios? [duplicar]

4

Estoy aprendiendo sobre la comunicación en serie, y simplemente no puedo entender por qué son necesarios el bit de inicio y los bits de parada.

Quiero decir que tengo dos dispositivos conectados a través de puertos serie, y el bit 1 está representado por + 15V y el bit 0 está representado por -15V.

Entonces, para que dispositivo 1 envíe los 4 bits 0110 a dispositivo 2 , dispositivo 1 debe enviar los siguientes voltajes: -15V + 15V + 15V -15V.

¿Qué es lo que me falta aquí, porque parece que puede funcionar sin el bit de inicio y el (los) bit (s) de parada?

    
pregunta Tom

5 respuestas

8

El escenario del que parece estar hablando (con bits de inicio y parada) es probablemente UART (del cual RS232 es un tipo de). UART significa transmisión universal asíncrona de recepción, cuya parte clave es asíncrona . No hay línea de reloj, solo datos.

En este tipo de sistema tienes dos dispositivos (TX y RX) que no necesariamente comparten un reloj común. Ambos sistemas pueden, por ejemplo, estar de acuerdo con 9600 Baud, pero sin un reloj común, uno podría producir 9601 Baud mientras que el otro obtiene 9599 Baud. Los relojes no son perfectamente precisos, lo que significa que con el tiempo los dos se desviarán de la alineación.

Además, debido a que la comunicación es asíncrona, puede iniciarse siempre que el transmisor lo desee (ignorando el control de flujo). El transmisor y el receptor podrían se encenderán en diferentes momentos, y el receptor no tiene forma de saber cuándo comienza a transmitir.

El requisito clave entonces se conoce como sincronización. El protocolo debe incluir alguna forma del transmisor para señalar al receptor que acaba de comenzar a transmitir. Además, debe haber alguna forma de sincronizar los relojes en ambos extremos.

En el caso de UART, esta sincronización se realiza en forma de una transición de alta a baja en la línea de datos. La línea estará inactiva en alto y luego bajará cuando comience la transmisión. Esta transición actúa para sincronizar el tiempo entre ambos dispositivos. Entonces, el receptor sabe que debe registrar suficientes ciclos de datos en función de su reloj en baudios. Sin embargo, hay dos problemas con este esquema:

  1. La transición simple de alta a baja no es suficiente para sincronizar el tiempo durante un largo período de tiempo. Recuerde que los dos dispositivos tendrán velocidades de reloj internas ligeramente diferentes. Mientras esos dos relojes estén dentro de un cierto% de diferencia, la transición proporcionará suficiente información para sincronizar los dispositivos durante, como máximo, algunos ciclos de reloj. Eso significa que necesita una resincronización periódica.

  2. Si su línea está inactiva, y el primer bit de datos que desea enviar también está representado por un nivel alto, entonces no tiene una transición. Si su línea está inactiva y el primer bit que desea enviar es bajo, tiene el mismo problema. Eso significa que necesita alguna forma de distinguir el primer bit.

Ambos de estos problemas se resuelven en el caso de UART mediante el uso de bits de inicio y parada. Los datos que se envían se dividen en paquetes de unos pocos bits (por ejemplo, 8 bits). Cada paquete está precedido por un bit de inicio "bajo" y seguido por un bit de parada "alto". Eso significa que entre cada pocos bits hay una transición conocida de alta a baja: el bit de parada del último paquete y el bit de inicio del paquete actual. Ahora puedes volver a sincronizar cada paquete.

Esta no es de ninguna manera la única forma de resolver el problema. Hay muchos otros esquemas: la codificación de Manchester es un ejemplo. En ese esquema, una transición de baja a alta significa una lógica 1, mientras que una transición de alta a baja señala una lógica 0. Esto significa que cada bit que envía codifica información de reloj dentro de ella, lo que significa que puede volver a sincronizar cada bit que envíe.

Podría tener otros métodos de señalización como el uso ternario: tres niveles de voltaje. Por ejemplo, podría usar + 5V para un 2, 0V para un 1, y -5V para un 0. Podría enviar un binario a través de este sistema utilizando uno de esos estados para indicar inactivo. Sin embargo, en ese ejemplo, simplemente ha reemplazado un bit de inicio y parada con un período de tiempo a un tercer voltaje. No cambiará la necesidad de resincronización periódica, por lo que realmente no le ahorra nada, y solo agrega complicación a los circuitos.

    
respondido por el Tom Carpenter
6

Usted dice -15V + 15V + 15V -15V. que es 0110, tiene razón, un receptor podría recibirlo correctamente.

Pero, ¿qué sucede si envía 15V 15V 15V -15V? ¿Cómo sabría qué es eso? Como el oyente, lo primero que escucharía es el primer -15V, no tendría idea de cuántas señales de 15V llegaron antes de eso.

El oyente escucharía lo mismo sin importar si el remitente envió 1110, 1101, 1011 o 0111.

Sinningunareferenciadetiempo,todosseparecenaunaseñaldevoltaje.

Debidoaqueeltiempoimportaconlasseñalesasíncronas,debeenviarunaseñal"LISTEN UP". En RS232, la señal de escucha es una transición de alta a baja en la línea. Le dice al receptor "¡Estoy a punto de enviar N bits de datos a mi velocidad de transmisión, comenzando AHORA!"

Note,enesteejemploUARTde4bits,cadapatrónahoratieneunafirmaúnica.

Elbitdeparadagarantizaquelalíneavuelvaalestadoinactivoalfinaldelatransmisiónytambiénledaalreceptorunaventanadetiempoparamanejarlosbytesqueseacabanderecibir,restableceryprepararseparaescucharelpróximobitdeinicio.

Enlaimagendeabajo,laprimeratrazanotienebitdeparada.Tengaencuentaque,comoelúltimobitdelprimerdatoescero,lalíneayaestábajacuandollegaelpróximobitdeinicioynohaytransiciónparainiciarelUART.Enlasegundatrazaquetieneunbitdeparada,selegarantizaunaltoantesdeunbajo.

De hecho, la mayoría de los UARTS le ofrecen la posibilidad de enviar más de un bit de parada para abrir aún más esa ventana para el receptor. Esto fue más importante en los primeros días de la transmisión en serie, donde la señal RS232 en realidad conducía directamente motores y relés mecánicos, pero todavía puede tener sus usos hoy en día.

Además, la mayoría de UARTS en realidad comprueban si el bit de parada es alto en el tiempo de bit apropiado. Si no lo está, se marca un error de trama en el receptor.

    
respondido por el Trevor_G
4

Startbit es un despertador al final del estado inactivo. Stopbit asegura que hay una transición conocida al comienzo de un nuevo byte. El sistema se desarrolló en la época en la que no había posibilidad de estar seguro de que los motores de los dispositivos mecánicos de transmisión de datos (= teletintores) funcionen sincronizados en ambos extremos. Los bits de inicio y de parada eran el método de resincronización.

Hoy en día, se pueden transmitir secuencias de bits mucho más largas que un byte sin necesidad de resincronización. Pero finalmente todos los relojes se separan y se necesita sincronización. Se han desarrollado numerosos sistemas de codificación que transportan los datos de sincronización necesarios de manera mucho más efectiva que los bits de inicio y de parada, que necesitan un 25% más de capacidad.

    
respondido por el user287001
2

Por una carga útil seguro ... tal vez ... posiblemente. Pero qué pasa si está enviando un flujo de datos. ¿Cómo puede estar seguro el receptor cuando finaliza la última carga útil y comienza la nueva carga útil?

El estado inactivo de un bus RS232 es -12V. ¿Cómo sabrá el receptor que recibirá un flujo de 0 o cuándo se iniciará la transmisión?

Dicha comunicación serial también es asíncrona. El receptor necesita ver una ventaja para determinar los aspectos de la transmisión

    
respondido por el JonRB
2

Confunde los niveles de voltaje (se supone que RS-232) y el protocolo en serie (digamos simplemente uart como venía de un tiempo antes de que todos estuvieran obsesionados con nombrar cosas).

Por ejemplo, con su ejemplo no puede decirle a 0110 desde 001100. Con el protocolo uart necesita muestrear idealmente el medio de la celda de bits, para que el receptor sepa dónde está el medio, al estar en diferentes fuentes de tiempo y no exactamente igual, el primer borde de inactividad le brinda una referencia para poder para llegar a la mitad de los siguientes N bits, el tamaño de N depende de la precisión de cada lado, 8 o más bits de datos puede ser bastante descuidado y, si lo desea, puede volver a sincronizarse en cualquier borde que encuentre (en su ejemplo ¿Cómo recibiría 00000000? o 11111111?)

El bit de inicio nos da un borde que se distingue de inactivo, para indicar cuándo comienza el mensaje y una referencia para muestrear los bits. El bit de parada asegura que volvamos al estado inactivo al menos para una celda de bit o dos. Cuando está saturado de datos, no hay huecos, no está inactivo más que el bit de parada, entonces tiene otro problema que el protocolo uart no resuelve necesariamente (la paridad ayuda) si entra en el medio (alguien conecta la cosa mientras los datos se mueven , o por cualquier otra razón) los bits de inicio y fin ayudan a encuadrar los datos sin paridad, de modo que aún puede averiguar dónde se encuentra, con paridad tiene una posibilidad aún mejor, pero no perfecta.

Ahora hay otros protocolos. Muchos otros protocolos. Vaya a buscar irig-106, en lugar de un bit de inicio, tiene un patrón de sincronización que puede ser seguido por cientos de bits antes de otro patrón, sin períodos muertos. El documento de Irig tiene un buen gráfico de varias codificaciones en las que NRZ-L es lo que estamos acostumbrados con una uart simple (sin retorno a nivel cero), uno interesante es bi-fase-l Donde hay una celda de bit medio de cambio de estado, por lo que su 0110 se transmitiría a 2 veces la frecuencia de los datos y sería 01101001; en el peor de los casos, nunca podrá tener más de dos semicubos en una fila en el mismo nivel, muchos bordes con los que sincronizar bits.

Otro interesante es mil-std-1553, donde utilizan bi-phase-L (que es una codificación popular con muchos nombres diferentes, solo bifase o manchester, etc.) pero no es información continua, es una explosión de una a muchas palabras utilizan un error intencional de bifase-l de tres celdas de medio bit y tres celdas de medio bit como patrón de sincronización y luego ingresan en el mensaje codificado en bifase-l.

No hay ninguna razón por la que no pueda utilizar los niveles de voltaje RS-232, RS-422, etc. con un protocolo diferente al de uart. Pero de todos modos a menudo se necesitan bordes en los datos para sincronizar los relojes (si lleva el reloj, entonces esa es otra historia) y necesita alguna forma de saber dónde están los grupos de bits que forman bytes o palabras. así que tienes que tener un patrón de sincronización o un bit de inicio u otro. o haz algo como spi o i2c para marcar el comienzo. Ethernet clásica usó una onda cuadrada larga con algunos bits para indicar el final de eso y el inicio del paquete. MDIO tiene algo similar.

Al final del día, no puede tener un protocolo serial de señal única confiable sin saber cómo están los límites de palabra / mensaje en el flujo de bits, y tampoco puede hacerlo sin saber dónde / cuándo muestrear cada bit. Incluso si se trata de un flujo de bits continuo y quizás piense que sabía cuándo era el tiempo cero y solo puede contar hasta 8 y marcar otro byte, puede tener suerte, pero aún debe sincronizar con el reloj de envío, ya que su reloj se basa en una fuente diferente. Referencia y se desviará en relación con el reloj de los remitentes. Por lo tanto, puede intentar lograr esto siempre que mire periódicamente los bordes que encuentre, y asegúrese de que haya un borde en cada N bits en función de las matemáticas relacionadas con la precisión de los relojes.

    
respondido por el old_timer

Lea otras preguntas en las etiquetas