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.
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?
la source
Réponses:
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.
la source
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à.
la source
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.
la source
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.
la source
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.
la source