No quieres la paridad. Quieres una comunicación más confiable.
La razón por la cual la paridad se usa poco es que es costosa en términos de rendimiento de datos. Comienza haciendo una trama casi un 10% más larga: bit de inicio + 8 bits de datos + paridad + bit de parada = 11 bits en lugar de 10. Pero es mucho peor que eso. Si tiene una manera de saber si recibió los datos correctamente, tiene el deber de hacer algo con eso. Simplemente ignorar la comunicación errónea no es suficiente; El transmisor tiene que enviarlo de nuevo. Por eso hay que saber si se recibió bien. Tendrá que enviar un acuse de recibo ( ACK
/ NAK
) después de cada byte, y el transmisor no podrá enviar el siguiente byte antes de que haya recibido el ACK
.
Si usas códigos ASCII eso es 11 bits de retorno. Así que reduce a la mitad el rendimiento, y ya perdimos el 10%, por lo que ahora estamos en un 36% de eficiencia de carga útil , desde el 80%. Y esa es la razón por la que a nadie le gusta la paridad.
Notas:
1. No necesita acusar recibo de un acuse de recibo; la distancia de Hamming entre los códigos ASCII para ACK
y NAK
es 3 (con paridad incluso 4), por lo que no solo se puede detectar un error en la recepción de ACK/NAK
, sino también < fuerte> corregido .
2. Muchos UART pueden trabajar con longitudes de datos de hasta 5 bits, y es posible cambiar a 5 bits para enviar el ACK
, pero esto no es más que una apariencia de ventana y solo complica la comunicación.
Una mejor solución puede ser utilizar un CRC al final de cada bloque. Los CRC son mejores que los bits de paridad al capturar múltiples errores (sin embargo, aún no pueden corregirlos). La eficiencia mejorada solo se puede obtener para bloques largos; si un bloque consta de solo 2 bytes, no sirve de nada agregar un CRC de 8 bits.
Otra desventaja sería que todavía tiene que reconocer la recepción correcta. Así que probablemente tampoco sea eso.
¿Qué hay de los códigos de autocorrección ? Los códigos de Hamming agregan poca sobrecarga y te permiten corregir 1 bit erróneo; Ya no hace falta reconocerlo. Al igual que los CRC, los códigos de Hamming son más eficientes en bloques más largos; el número de bits adicionales se define como
\ $ N + H < 2 ^ H \ $
donde N = número de bits de datos, y H = número de bits de Hamming. Por lo tanto, para corregir 1 bit en una comunicación de 8 bits debe agregar 4 bits de Hamming; solo se requiere un quinto bit de Hamming a partir de 12 bits de datos. Esta es la forma más eficiente de detección / corrección de errores en mensajes cortos (unos pocos bytes), aunque requiere un cierto malabarismo con sus datos: los bits de Hamming deben insertarse en posiciones específicas entre los bits de datos.
Ahora, antes de agregar los códigos de corrección de errores de Hamming, vale la pena analizar su configuración. Puede esperar errores en una línea de 100 m entre maquinaria pesada, pero no debe tener errores en una línea de 2 cm. Si capta ruido puede ser una impedancia demasiado alta. ¿Los conductores empujan / tiran? Si es así, deberían poder darle bordes rápidos, excepto si el "cable" es capacitivo, que no estará en esta corta distancia. ¿Hay trazas de alta corriente que se ejecutan paralelas a las líneas de datos? Podrían inducir ruido. ¿Realmente necesita esta alta velocidad y los relojes de ambos lados coinciden lo suficiente? Disminuir la velocidad a 57600 bits por segundo puede resolver el problema.