Pourquoi s'embêter avec une parité égale?


12

J'utilise un périphérique SPI dans mon application. Le périphérique renvoie des paquets contenant 15 bits de données, plus un bit de parité paire pour la détection des erreurs.

Parité sur un périphérique SPI

Par conséquent, tous les zéros et tous les deux passent le contrôle de parité.

Cela signifie que mon microcontrôleur ne peut pas détecter le type d'erreur le plus courant: le périphérique étant déconnecté! Dans ce cas, les bits reçus sont tous nuls, ce qui passe le contrôle de parité.

En supposant qu'il aurait été tout aussi facile pour le fabricant du périphérique d'implémenter la parité impaire, ma question est: pourquoi auraient-ils choisi d'utiliser la parité paire dans ce cas ? Y a-t-il un autre avantage de Even Parity dans ce cas pour compenser le fait qu'il est incapable de détecter le type d'erreur le plus courant?


6
Veuillez noter que la "parité", même ou impaire, est la technologie des dinosaures, elle ne doit pas être utilisée dans les systèmes professionnels modernes. Il a une probabilité inférieure à 50% d'attraper des erreurs sur un seul bit, et pire encore pour les erreurs sur plusieurs bits. Oubliez juste d'utiliser la parité, l'utiliser était une idée idiote même dans les années 1960. Si vous devez valider une ligne de données SPI, vous devez superviser les données sur une couche inférieure, en utilisant un temporisateur de capture d'entrée ou similaire. Vérifiez également les drapeaux SPI pour les dépassements de tampon, etc.
Lundin

39
@Lundin "Il a une probabilité inférieure à 50% d'attraper des erreurs sur un seul bit, et pire encore pour les erreurs sur plusieurs bits." - Si un seul bit est incorrect, la parité sera incorrecte. La parité simple a 100% de chances de détecter des erreurs sur un seul bit, pas "moins de 50%". (de même, il a 0% de chances d'attraper des erreurs 2 bits et 100% à nouveau d'attraper des erreurs 3 bits).
marcelm

7
@Lundin - Veuillez adresser vos commentaires aux fabricants d'AMS, qui fabriquent ces puces.
Rocketmagnet

26
@Lundin Si le bit de parité bascule, le contrôle de parité échoue toujours.
Adam Haun

4
C'est encore la plupart du temps inutile dans la plupart des situations. ⁽ᶜᶦᵗᵃᵗᶦᵒᶰ ᶰᵉᵉᵈᵉᵈ⁾
dasdingonesin

Réponses:


14

Un bit de parité unique ne peut vérifier que la présence d'un nombre unique ou impair de bits dans les erreurs, donc s'attendre à ce qu'il détecte lorsqu'un périphérique est déconnecté attend probablement trop.

Cependant, de nombreux systèmes produisent une série continue de 1 lorsqu'un périphérique n'est pas présent et cela peut être réalisé avec une simple résistance de rappel sur la ligne de données de retour. S'il y avait des données réelles de 8 bits renvoyées par un périphérique connecté, alors le bit de parité serait nul pour la décimale 255 en cours de transmission. Ainsi, même la parité peut détecter lorsqu'un périphérique est déconnecté dans ces circonstances.

Si une parité impaire était utilisée, 8 bits élevés (255 décimaux) entraîneraient un bit de parité élevée, rendant ainsi la parité impaire inutile comme moyen de détecter la perte de puce périphérique.

Chevaux de course.


2
Idiot, j'aurais dû mentionner que cette application particulière a 15 bits de données et un bit de parité. Corrigé maintenant. Mais je pense toujours qu'il est raisonnable de s'attendre à un contrôle de parité pour détecter un périphérique complètement déconnecté. C'est tout à fait dans ses capacités et c'est en fait la vérification la plus utile que vous puissiez faire.
Rocketmagnet

1
@Rocketmagnet également, le tableau que vous avez ajouté à votre question semble être pour le format des données envoyées au périphérique - notez le terme "doit être 0" pour le 14e bit - peut-être devriez-vous lier à la fiche technique de l'appareil ?
Andy aka

3
Le tableau modifié montre le bit 14 comme indicateur d'erreur et mon conseil est d'utiliser un pull-up sur les données de retour série pour rendre les données toutes les 1 lorsque l'appareil est déconnecté car le bit 14 décodé indiquera alors un problème.
Andy aka

1
@Trevor_G oups oui. Modification en cours.
Andy aka

1
L'attente appropriée est que le logiciel qui utilise le contrôleur spi devrait valider les données qui reviennent, s'il y a un risque. Si vous n'avez aucun contrôle sur l'un ou l'autre côté, vous devez absolument le faire dans le logiciel de niveau supérieur. La seule fois où vous pouvez laisser faire cela, c'est si vous contrôlez les deux côtés de la conception du SPI et faites-le répondre à vos exigences d'erreur de bit, ce qui semble dans ce cas que vous ne pouvez pas. Donc, votre logiciel devrait vérifier tous les zéros et tous les uns, pas le travail du contrôleur spi, ni la parité qui a une utilité limitée ...
old_timer

5

La parité, ou toute détection d'erreur de bloc, est destinée à détecter les erreurs dans une transmission de données elle-même. La parité n'est pas conçue pour détecter si la transmission de données a lieu ou non.

Étant donné une ligne de transmission, il existe plusieurs types de préoccupations. Les deux qui sont pertinents ici sont: 1) la panne pure et simple de la ligne elle-même, et 2) les erreurs de données bloquées dans une transmission particulière. D'autres moins pertinents sont, par exemple, des tensions de ligne incorrectes, des erreurs de protocole ou des erreurs de sécurité. La parité aide avec 2 mais pas 1. Pour qu'un sous-système à chaque extrémité d'une ligne de transmission puisse faire face à 1 (panne pure et simple d'une connexion), une autre fonctionnalité de protocole est requise.

Le taux de détection d'erreur d'un seul bit de parité est souvent supérieur à 50%. Le taux exact dépend de l'heuristique du segment de données dans le protocole. Disons que vous avez un paquet, (MSB) 1011010111011110, et qu'il y a une erreur de bit unique dans le dernier bit transmis, le contrôle de parité échouerait et rejetterait correctement le paquet. De même, si vous aviez une erreur de données dans le premier bit (le bit de parité), le paquet serait rejeté.

Cette vérification du matériel est extrêmement simple et ne nécessite aucun traitement compliqué. Il est utile dans les applications avec des taux d'erreur binaires relativement faibles pour éliminer des éléments comme le décalage d'horloge ou les signaux d'horloge générés par les processeurs exécutant des piles de logiciels récupérés.

SPI est un protocole de liaison physique conçu pour les lignes courtes connectées électriquement où le taux d'erreur sur un bit ne dépend pas beaucoup de la perte de la ligne. Si vous exécutez quelque chose sur une ligne avec perte, vous aurez besoin de quelque chose de bien plus robuste que la parité. Ce n'est pas vraiment ce que fait SPI.

Pour vérifier si un périphérique est toujours connecté, essayez quelque chose de plus haut dans la pile. Par comparaison, TCP / IP (IP, en particulier) ne spécifie pas de bits de parité, contrairement à la plupart des spécifications Ethernet 802.x. IP, d'autre part, a un compliqué, "êtes-vous là?" protocole. Que courez-vous sur SPI? La réponse à la gestion des liaisons de données est probablement là.


1
802.3 et .11 utilisent CRC32; IP et TCP et (en option) UDP utilisent une somme de complément de 16 bits, qui, du fait que très peu de machines ou même d'ALU sont aujourd'hui 1sC, est principalement implémenté par addition non signée et transfert.
dave_thompson_085

Le fait est que la parité pourrait facilement détecter une panne pure et simple de la ligne elle-même. Si je récupère tous les 1 ou tous les 0, cela devrait être un échec.
Rocketmagnet

4

Il n'y a aucun avantage évident d'une parité paire sur une impaire. Dans les schémas de communication et de stockage, la polarité de parité (impaire ou paire) doit être sélectionnée pour piéger les modes de défaillance les plus probables ou les plus fréquents.

Comme vous le dites, une cible qui ne répond pas ou un câble de réception de données cassé peut bien entraîner une ligne MISO bloquée haut ou bas.

Lors de la communication de nombres pairs de bits, tels que des octets sur SPI, un bit de parité impaire détecterait un défaut dans les données de ce tout-1 ou tout-0 mais pas la parité même.

Cependant, il n'y a pas de gagnant clair lors de la communication d'un nombre impair de bits, comme dans votre application avec 15 bits sur SPI. Même la parité détecterait un défaut dans le cas du tout-1 mais manquerait le cas du tout-0. Inversement, une parité impaire détecterait un défaut dans le cas du tout-0 mais manquerait le cas du tout-1.


En fait, oui, il y en a clairement dans ce cas . Comme je l'ai expliqué dans la question, la parité impaire serait capable de détecter: les puces déconnectées et défectueuses manquantes et les pannes de câble, alors que la parité paire ne le peut pas.
Rocketmagnet

0

Il y a peu de différence de bénéfice avec une parité paire ou impaire. L'un peut être converti en l'autre avec une seule porte inverseuse. Le principal objectif du bit de parité est de vérifier uniquement les 15 bits de cette valeur. Ce n'est pas son but de faire autre chose. Le fait que l'un ou l'autre puisse détecter une puce manquante, défectueuse ou déconnectée n'est pas pris en compte. Vous mentionnez qu'être déconnecté est le type d'erreur le plus courant dans votre cas. Ce n'est pas important. Le bit de parité n'est pas là pour détecter ce type d'erreur.


0

Vous avez raison de remettre cela en question, j'ai la même critique de la parité égale. Avec un nombre impair de bits de données avant l'ajout du bit de parité, comme dans votre exemple, et comme cela est courant, la parité paire autorise tous les 0 et tous les 1 comme mots transmis valides, ce qui est inutile pour détecter une liaison ou une puce morte. La réponse antérieure de Tony M est erronée à cet égard. Voir le tableau d'exemple de données 7 bits ici pour preuve: - https://en.wikipedia.org/wiki/Parity_bit

Une parité impaire insèrerait cependant un bit d'état opposé dans le cas de tous les 0 ou de tous les 1, prouvant ainsi que la liaison et la puce sont vivantes, et serait un bien meilleur choix dans ce cas.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.