¿Uno o dos bits de parada UART?

15

Los UART a menudo le permiten elegir entre 1, 1.5 y 2 bits de parada. Con 1 bit de parada, la eficiencia de la carga útil es del 80% (8/10), con 2 bits de parada que cae al 72,7% (8/11). Entonces, ¿cuál es la ventaja del segundo bit de parada?

Federico Russo
fuente

Respuestas:

19

Los bits de parada adicionales pueden ser una forma útil de agregar un poco más de tiempo de procesamiento de recepción, especialmente a altas velocidades de transmisión y / o utilizando UART suave, donde se requiere tiempo para procesar el byte recibido.

Cuando la velocidad es escasa y su UART solo ofrece relaciones de división en potencias de 2, agregar un stopbit adicional puede ser una opción para proporcionar una reducción de velocidad menos drástica que la siguiente velocidad de transmisión más baja.

Creo que esta es una de las razones por las que el estándar DMX512 especifica 2 stopbits.

Otra situación en la que pueden ser útiles es si tiene dispositivos que reenvían un flujo de datos sin ningún almacenamiento en búfer o empaquetado: pequeñas diferencias en las velocidades de reloj entre nodos y granularidad de muestreo finito pueden causar errores cuando los datos son recibidos y retransmitidos por varios nodos en una cadena, pero si los datos se envían con 2 bits de parada y los receptores se configuran en un solo bit de parada, agrega suficiente margen para acomodar estos errores y deja al menos un período de parada válido para que los nodos en la cadena reciban de manera confiable.

También me encontré con una situación en la que un cable muy largo causó cierta asimetría en los tiempos de subida y bajada, lo que resultó en una longitud de stopbit inadecuada: enviar 2 stopbits y hacer que el receptor solo requiera uno arreglado.

mikeselectricstuff
fuente
6

En días pasados ​​las impresoras eran (casi) construcciones totalmente mecánicas. Las velocidades en baudios estaban algo estandarizadas incluso entonces, por lo que agregar un bit de parada adicional le daría a la impresora algo de tiempo adicional para imprimir el carácter. Los aspectos de tiempo eran más visibles en aquel entonces. Para mi primera impresora, una ruidosa http://en.wikipedia.org/wiki/Teletype_Model_33 , tuve que insertar una pausa de dos caracteres después de enviar un Carriage Return.

Wouter van Ooijen
fuente
Un Modelo 33 ajustado correctamente solo necesitaba un personaje después del retorno de carro. ¡Ahí es cuando se supone que debes enviar Linefeed! Olvidé que necesitaban 2 bits de parada, pero tienes razón, así que lo que dije a continuación se aplica a la respuesta de Russel (pero esos 1.5 bits de parada eran para el hardware Baudot). Sin embargo, los bits de parada adicionales (de 10 ms) no ayudaron a los retrasos en el retorno del carro.
gbarry
4

Es poco probable que dos bits de parada sean mucho más útiles que uno en un sistema que tiene una proporción significativa de tiempo de parada y que funciona en un entorno de bajo ruido (BER bajo), como el interno del equipo o en una interfaz periférica con unos pocos metros de cable y / o sin una etapa modem-modem.

Los 2 bits de parada le brindan un mayor tiempo de sincronización, más tiempo para procesar entre caracteres y, probablemente, dependiendo del hardware y los algoritmos, una mayor probabilidad de obtener o recuperar la sincronización durante un flujo continuo de datos. El tiempo entre caracteres tiene mucho menos valor en los sistemas modernos que cuando las velocidades de reloj eran bajas y el rendimiento del procesador más bajo.

Si tiene un flujo de datos esencialmente continuo, si no está sincronizado, cualquier bit alto se verá como un bit de parada. Cualquier transición alta-baja se verá como un límite de bytes. Si su receptor comienza en un límite de 10 y no es un límite de inicio verdadero, entonces esto solo se descubrirá el 50% del tiempo) (es decir, si se encuentra que el "bit de detención" final es realmente un bit de datos bajos y usted también se ha saltado el límite de parada / inicio genuino en el camino. En promedio, tiene 1/4 de posibilidades de que un límite de bytes sea 1/0 y se vea falsamente como un par de parada / inicio. Lo anterior sugiere que si elige una parada falsa, comience el par, entonces es probable que haya aproximadamente un 50% de posibilidades de que elija otro en el siguiente intento.

Si usa 2 bits de parada (11), entonces una secuencia de inicio de parada válida es 110, que tiene 1/8 de probabilidad de ocurrir en tráfico de datos aleatorio. La mezcla de bits genuinos de parada e inicio en el flujo no sincronizado cambia ligeramente los sats, pero parece relativamente poco probable que si obtiene una secuencia falsa de parada / arranque de 110 en un ciclo, toque otro en el siguiente intento antes de tropezar con el 110 genuino secuencia que sigue.

Como observa, 1 bit de parada produce 8/10 = 80% de rendimiento máximo y 2 bits de parada rinden 8/11 = 72% de eficiencia. La diferencia en el rendimiento en el límite total es 80% / 72% = ~ 11% más. Esta es una ganancia útil en circunstancias extremas, pero no vasta, y si el circuito está inactivo más del 10% del tiempo, tiene un valor mínimo. Si su circuito es ruidoso y propenso a pérdidas ocasionales de sincronización, entonces el bit de parada adicional puede ayudar mucho. PERO si le importa tanto el rendimiento, a menudo puede aumentar la velocidad en baudios (no siempre) o cambiar a una operación totalmente sincrónica.

Russell McMahon
fuente
No conozco ningún UART que se pueda configurar para ignorar cualquier bit de inicio aparente que no esté precedido por más de un tiempo de marcado completo (de hecho, la mayoría aceptará un bit de inicio precedido por medio tiempo de marcado, y no se puede configurar para hacer lo contrario). Sin embargo, tal característica podría ser útil.
supercat
Te has topado con la respuesta correcta, si podemos aceptar que esta práctica se remonta a los días mecánicos. En aquel entonces, el mecanismo del receptor necesitaba aproximadamente 1 bit de tiempo para detenerse para estar listo para el siguiente bit de inicio. Entonces, el transmisor fue construido para tener un bit de parada de tiempo de 1.5 bits. Tuvo el efecto que describiste. Si se perdió la sincronización, puede haber varios caracteres basura hasta que recupere la sincronización. Cuando llegamos a las implementaciones electrónicas, el receptor podría comenzar a esperar el siguiente bit de inicio inmediatamente después de ver la transición al nivel de parada, no necesitaba relleno
gbarry
@gbarry: creo que miles de veces tropezaron en tu comentario.
Russell McMahon
En realidad, me quedé sin personajes :) ¿Algo anda mal?
gbarry
3

Para amplificar el punto de mikeselectricstuff sobre el tiempo de recepción con "UARTs suaves", una aplicación de recepción que siempre sabrá cuándo aceptar datos y lo hace en una encuesta a menudo puede manejar velocidades de transmisión más rápidas de lo que sería práctico con un UART suave impulsado por interrupción. Sin embargo, dichas aplicaciones solo pueden procesar datos entrantes durante el tiempo entre el inicio del bit de parada de un byte y el bit de inicio del siguiente byte; El tiempo requerido para procesar cada byte termina siendo el factor limitante para la velocidad de las comunicaciones. Procesar datos a 115.200-N-8-2 no es mucho más exigente que procesarlos a 57.600-N-8-1, pero es más de un 80% más rápido.

A veces, uno puede llevar las cosas aún más lejos al usar formatos de datos aparentemente menos eficientes. Por ejemplo, uno puede enviar cada byte en dos partes, una con siete bits y otra con uno (todos los MSB de la parte de un bit están configurados). Si uno hace eso, incluso con solo un bit de parada, habrá ocho bits de marcado entre el final de un par de bytes y el comienzo del siguiente, lo que le permitirá a uno aumentar la velocidad de bits cuatro veces más de lo que uno podría hacerlo con solo dos bits de parada (y ocho veces más alto que lo que uno podría hacer con uno). A pesar de tener que enviar el doble de bytes, el aumento de cuatro veces en la velocidad de datos sería una gran victoria. Además, aunque cada par de bytes transmitidos podría usarse para enviar ocho bits de datos, la codificación utilizaría solo 130 de los 256 posibles valores de bytes,

Super gato
fuente
También puede aumentar la velocidad de transmisión en baudios UART (250K y más) generando una interrupción en el borde del bit de inicio y permaneciendo dentro del código de interrupción durante todo el byte; un bit de parada adicional puede ser muy útil aquí.
mikeselectricstuff
@mikeselectricstuff: un bit de parada adicional puede ser muy útil, ya que puede usar solo algunos de los bits en cada byte (requerir que se establezca el LSB de cada byte puede ser útil porque uno puede derivar el tiempo desde el borde ascendente de ese bit, incluso si puede haber una pequeña inclinación cuando ocurre la interrupción). Sin embargo, una limitación importante del enfoque de bit-interrupt-trigger-on-start-bit es que no hay una buena manera de enviar datos mientras pueden llegar datos entrantes. Los datos transmitidos o los datos recibidos (o ambos) se perderán.
supercat
2

Había una vez monstruos electromecánicos llamados teletipos. La mayoría funcionaba con motores de CA sincrónicos con la frecuencia de la línea de alimentación. Por lo tanto, siempre existía la posibilidad de que dos máquinas de comunicación no estuvieran sincronizadas con la misma red eléctrica o incluso funcionaran con corriente alterna usando diferentes frecuencias.

Por lo tanto, para permitir que una máquina más lenta se ponga al día y no se desvíe de la sincronización, se enviaron dos bits de parada.

Para otros fines, como permitir que el carro de impresión regrese al comienzo de una nueva línea, se enviaron un CR, LF más dos cortes (todos los agujeros en una cinta de 8 niveles).

Era habitual para los circuitos que funcionan a velocidades de 110 baudios y más lento solamente.

Jacques Orsali
fuente
1

La lentitud de los dispositivos mecánicos receptores fue la razón detrás de la adición de los bits de parada adicionales, sin embargo, los dispositivos de hoy son lo suficientemente rápidos y funcionan a velocidades de transmisión aún más altas sin la necesidad de un bit de parada adicional

ArunMKumar
fuente