¿Por qué molestarse con una paridad uniforme?

12

Estoy usando un periférico SPI en mi aplicación. El periférico devuelve paquetes que contienen 15 bits de datos, más un bit de paridad par para la detección de errores.

Por lo tanto, todos los ceros, y todos los dos, pasan la verificación de paridad.

Esto significa que mi microcontrolador no puede detectar el tipo de error más común: ¡el periférico está desconectado! En este caso, los bits recibidos son todos cero, lo que pasa la verificación de paridad.

Suponiendo que hubiera sido igual de fácil para el fabricante del periférico implementar la paridad impar, mi pregunta es: ¿por qué habrían elegido utilizar la paridad par en este caso ? ¿Existe alguna otra ventaja de Even Parity en este caso para compensar el hecho de que no puede detectar el tipo de error más común?

    
pregunta Rocketmagnet

4 respuestas

14

Un solo bit de paridad solo puede verificar la presencia de números únicos o impares de bits, por lo que esperar que se detecte cuando un periférico está desconectado probablemente se espera demasiado.

Sin embargo, muchos sistemas producirán una serie continua de 1 cuando un periférico no está presente y esto se puede lograr con una resistencia de pull-up simple en la línea de datos que regresa. Si un periférico conectado devuelve datos reales de 8 bits, entonces el bit de paridad sería cero para el decimal 255 que se está transmitiendo. Entonces, incluso la paridad puede detectar cuando un periférico se desconecta en estas circunstancias.

Si se usara la paridad impar, 8 bits altos (decimal 255) darían como resultado un bit de paridad alta, por lo que la paridad impar sería inútil como medio para detectar la pérdida del chip periférico.

Caballos para cursos.

    
respondido por el Andy aka
4

No hay beneficio obvio de paridad par sobre impar. En los esquemas de comunicación y almacenamiento, la polaridad de paridad (impar o par) debe seleccionarse para atrapar los modos de falla más probables o más frecuentes.

Como usted dice, un cable de recepción de datos rotos o no responde bien puede dar como resultado que una línea MISO quede atascada alta o baja.

Cuando se comunican números pares de bits, como bytes sobre SPI, un bit de paridad impar detectaría una falla en los datos de todo-1 o todo-0, pero incluso la paridad no.

Sin embargo, no hay un ganador tan claro cuando se comunican números impares de bits, como en su aplicación con 15 bits sobre SPI. Incluso la paridad detectaría una falla en el caso del todo-1, pero se perdería el caso del todo-0. A la inversa, la paridad impar detectaría una falla en el caso de todos los 0, pero se perdería el caso de todos los 1.

    
respondido por el TonyM
4

La paridad, o cualquier detección de error de bloque, está destinada a detectar errores dentro de una transmisión de datos. La paridad está no diseñada para detectar si se está produciendo o no la transmisión de datos.

Dada una línea de transmisión, hay varios tipos diferentes de preocupaciones. Los dos que son relevantes aquí son: 1) falla total de la línea en sí, y, 2) errores de datos de bloque dentro de una transmisión particular. Otros menos relevantes son, por ejemplo, voltajes de línea incorrectos, errores de protocolo o errores de seguridad. La paridad ayuda con 2, pero no con 1. Para que un subsistema en cualquiera de los extremos de una línea de transmisión se ocupe de 1 (falla total de una conexión), se requiere otra función de protocolo.

La tasa de detección de errores de un solo bit de paridad suele ser superior al 50%. Exactamente cuál es esa tasa depende de las heurísticas del segmento de datos en el protocolo. Digamos que tiene un paquete, (MSB) 1011010111011110, y hay un solo error de bit en el último bit transmitido, la verificación de paridad fallaría y rechazaría correctamente el paquete. De manera similar, si tuvo un error de datos en el primer bit (el bit de paridad), el paquete sería rechazado.

Realizar esta comprobación en el hardware es extremadamente simple y no requiere un procesamiento complicado. Es útil en aplicaciones con tasas de error de bits relativamente bajas para eliminar cosas como el sesgo del reloj o las señales de reloj generadas por procesadores que ejecutan pilas de software recolectadas con basura.

SPI es un protocolo de enlace físico diseñado para líneas cortas conectadas eléctricamente en las que la tasa de error de un solo bit no depende mucho de la pérdida de la línea. Si está ejecutando algo a través de una línea con pérdidas, va a necesitar algo más robusto que la paridad. Esto no es realmente lo que hace SPI.

Para verificar si un dispositivo todavía está conectado, intente algo más alto en la pila. En comparación, TCP / IP (IP, específicamente) no especifica bits de paridad mientras que muchas de las especificaciones de Ethernet 802.x sí lo hacen. IP, por otro lado, tiene un complicado, "¿estás ahí?" protocolo. ¿Qué estás ejecutando encima de SPI? La respuesta a la gestión del enlace de datos probablemente esté allí.

    
respondido por el Stephan Samuel
0

Hay poca diferencia en el beneficio con paridad par o impar. Uno se puede convertir al otro con una sola puerta invertida. El propósito principal del bit de paridad es verificar solo los 15 bits en ese valor. No es su propósito hacer otra cosa. Que uno u otro pueda detectar un chip faltante, defectuoso o desconectado no es una consideración. Menciona que desconectarse es el tipo de error más común en su caso. No importa. El bit de paridad no está ahí para detectar ese tipo de error.

    
respondido por el dreamcatcher

Lea otras preguntas en las etiquetas