Por que se preocupar com paridade uniforme?

12

Estou usando um periférico SPI no meu aplicativo. O periférico retorna pacotes contendo 15 bits de dados, além de um bit Paridade Par para detecção de erros.

Paridade em um periférico SPI

Portanto, todos os zeros e todos passam na verificação de paridade.

Isso significa que meu microcontrolador não pode detectar o tipo mais comum de erro: o periférico sendo desconectado! Nesse caso, os bits recebidos são todos zero, o que passa na verificação de paridade.

Supondo que teria sido igualmente fácil para o fabricante do periférico implementar a paridade ímpar, minha pergunta é: por que eles escolheriam usar paridade uniforme nesse caso ? Existe alguma outra vantagem do Even Parity nesse caso para compensar o fato de que ele não consegue detectar o tipo mais comum de erro?

Rocketmagnet
fonte
6
Observe que "paridade", par ou ímpar, é uma tecnologia de dinossauro, não deve ser usada em sistemas profissionais modernos. Ele tem uma probabilidade inferior a 50% de detectar erros de bit único e, pior ainda, erros de vários bits. Apenas se esqueça de usar a paridade, usá-la era uma ideia idiota mesmo nos anos 60. Se você precisar validar uma linha de dados SPI, deverá supervisionar os dados em uma camada inferior, usando um timer de captura de entrada ou similar. Verifique também os sinalizadores SPI para saturações de buffer etc.
Lundin
39
@Lundin "Tem uma probabilidade inferior a 50% de detectar erros de bit único e, pior ainda, erros de vários bits". - Se um único bit estiver errado, a paridade estará errada. A paridade simples tem 100% de chance de detectar erros de um bit, e não "menos de 50%". (da mesma forma, ele tem 0% de chance de detectar erros de 2 bits e 100% novamente na captura de erros de 3 bits).
marcelm
7
@Lundin - Envie seus comentários aos fabricantes da AMS, que fabricam esses chips.
Rocketmagnet 10/01
26
@Lundin Se o bit de paridade mudar, a verificação de paridade ainda falhará.
Adam Haun
4
Isso ainda é praticamente inútil na maioria das situações. ⁽ᶜᶦᵗᵃᵗᶦᵒᶰ ᶰᵉᵉᵈᵉᵈ⁾
dasdingonesin

Respostas:

14

Um único bit de paridade só pode verificar a presença de números únicos ou ímpares de bits nos erros, portanto, esperar que ele detecte quando um periférico é desconectado provavelmente está esperando demais.

No entanto, muitos sistemas produzem uma série contínua de 1s quando um periférico não está presente e isso pode ser alcançado com um simples resistor de pull-up na linha de dados retornada. Se houvesse dados reais de 8 bits sendo retornados por um periférico conectado, o bit de paridade seria zero para a transmissão decimal de 255. Assim, mesmo a paridade pode detectar quando um periférico é desconectado nessas circunstâncias.

Se paridade ímpar fosse usada, 8 bits altos (decimal 255) resultariam em um bit de paridade alta, tornando a paridade ímpar inútil como um meio de detectar a perda de chip periférico.

Cavalos para cursos.

Andy aka
fonte
2
Bobo, eu deveria ter mencionado que esse aplicativo em particular tem 15 bits de dados e um bit de paridade. Corrigido agora. Mas ainda acho razoável esperar uma verificação de paridade para detectar um periférico completamente desconectado. Ele está dentro de sua capacidade e é realmente a verificação mais útil que você pode fazer.
Rocketmagnet
1
@Rocketmagnet também, a tabela que você adicionou à sua pergunta parece ser para o formato de dados enviado ao periférico - observe o termo "Tem que ser 0" para o 14º bit - talvez você deva vincular à folha de dados do dispositivo ?
Andy aka
3
A tabela modificada mostra o bit 14 como o sinalizador de erro e meu conselho é usar um pull-up nos dados de retorno serial para tornar os dados todos os 1s quando o dispositivo for desconectado porque o bit 14 decodificado indicará um problema.
Andy aka
1
@Trevor_G oops sim. Alterações em andamento.
Andy aka
1
A expectativa adequada é que o software que usa o controlador spi valide os dados que retornam, se houver algum risco. Se você não tem controle sobre um ou os outros lados, definitivamente precisa fazer isso no software de nível superior. O único momento em que você pode deixar isso para lá é se você controla os dois lados do design do spi e faz com que ele atenda aos seus requisitos de erro de bit, o que soa nesse caso que você não pode. Portanto, o seu software deve ser a verificação de todos os zeros e todos os queridos, não o trabalho do controlador de spi, nem paridade que tem utilidade limitada ...
old_timer
5

Paridade, ou qualquer detecção de erro de bloco, destina-se a detectar erros dentro de uma transmissão de dados. A paridade não foi projetada para detectar se a transmissão de dados está ocorrendo ou não.

Dada uma linha de transmissão, existem vários tipos diferentes de preocupações. Os dois que são relevantes aqui são: 1) falha total da própria linha e 2) bloquear erros de dados em uma transmissão específica. Outros menos relevantes são, por exemplo, tensões de linha incorretas, erros de protocolo ou erros de segurança. A paridade ajuda com 2, mas não com 1. Para que um subsistema em cada extremidade de uma linha de transmissão possa lidar com 1 (falha total de uma conexão), é necessário outro recurso de protocolo.

A taxa de detecção de erros de um único bit de paridade geralmente é superior a 50%. Exatamente qual é essa taxa depende das heurísticas do segmento de dados no protocolo. Digamos que você tenha um pacote (MSB) 1011010111011110 e que haja um erro de bit único no último bit transmitido, a verificação de paridade falharia e o pacote seria rejeitado corretamente. Da mesma forma, se você tiver um erro de dados no primeiro bit (o bit de paridade), o pacote será rejeitado.

A realização dessa verificação no hardware é extremamente simples e não requer processamento complicado. É útil em aplicativos com taxas de erro de bits relativamente baixas para eliminar coisas como distorção do relógio ou sinais de relógio gerados por processadores executando pilhas de software coletadas por lixo.

O SPI é um protocolo de link físico desenvolvido para linhas curtas eletricamente conectadas, onde a taxa de erro de bit único não depende muito da perda da linha. Se você estiver executando algo em uma linha com perdas, precisará de algo muito mais robusto que a paridade. Isso não é realmente o que a SPI faz.

Para verificar se um dispositivo ainda está conectado, tente algo mais alto na pilha. Por comparação, o TCP / IP (IP, especificamente) não especifica bits de paridade, enquanto muitas das especificações Ethernet 802.x o fazem. IP, por outro lado, tem um complicado ", você está aí?" protocolo. O que você está executando em cima da SPI? A resposta para o gerenciamento de links de dados provavelmente está lá.

Stephan Samuel
fonte
1
802.3 e .11 usam CRC32; IP e TCP e (opcionalmente) UDP usam uma soma de complemento de 16 bits, que devido ao fato de pouquíssimas máquinas ou até ALUs hoje serem 1sC, é implementada principalmente por adição não assinada e transporte.
Dave_thompson_085
O ponto é que a paridade poderia facilmente detectar falhas definitivas da própria linha. Se eu voltar todos os 1s ou 0s, isso deve ser uma falha.
Rocketmagnet
4

Não há benefício óbvio de paridade par sobre impar. Nos esquemas de comunicação e armazenamento, a polaridade de paridade (ímpar ou par) deve ser selecionada para interceptar os modos de falha mais prováveis ​​ou de maior ocorrência.

Como você diz, um alvo que não responde ou um fio danificado de recebimento de dados pode resultar em uma linha MISO travada alta ou baixa.

Ao comunicar números pares de bits, como bytes sobre SPI, um bit de paridade ímpar detectaria uma falha nos dados de todos os 1 ou todos os 0, mas a paridade uniforme não.

No entanto, não existe um vencedor tão claro ao comunicar números ímpares de bits, como em seu aplicativo com 15 bits por SPI. Até a paridade detectaria uma falha no caso dos all-1, mas perderia o caso dos all-0. Por outro lado, a paridade ímpar detectaria uma falha no caso de todos os 0, mas perderia o caso de todos os 1.

TonyM
fonte
Na verdade, sim, existe claramente neste caso . Como expliquei na pergunta, a paridade ímpar seria capaz de detectar: ​​falta de chips desconectados e falhas nos cabos, enquanto a paridade não pode.
Rocketmagnet 10/01
0

Há pouca diferença no benefício com paridade par ou ímpar. Um pode ser convertido no outro com uma única porta invertida. O principal objetivo do bit de paridade é verificar apenas os 15 bits nesse valor. Não é seu objetivo fazer outra coisa. Que um ou outro possa detectar um chip ausente, com defeito ou desconectado, não é uma consideração. Você menciona que estar desconectado é o tipo de erro mais comum no seu caso. Isso não importa. O bit de paridade não existe para detectar esse tipo de erro.

Apanhador de Sonhos
fonte
0

Você está certo em questionar isso, tenho as mesmas críticas da paridade par. Com um número ímpar de bits de dados antes da adição do bit de paridade, como no seu exemplo, e como é comum, a paridade uniforme permite que todos os 0s e 1s sejam palavras transmitidas válidas, o que é inútil na detecção de um link ou chip morto. A resposta anterior de Tony M está errada a esse respeito. Veja a tabela de exemplo de dados de 7 bits aqui para obter provas: - https://en.wikipedia.org/wiki/Parity_bit

A paridade ímpar, no entanto, inseriria um bit de estado oposto no caso de todos os 0s ou todos os 1s, provando assim que o link e o chip estão ativos e seria uma escolha muito melhor nesse caso.

TopCat
fonte