Codes de détection d’erreur
Dans le domaine de la transmission d’information numérique en série, on est amené à envoyer et recevoir des séries de bits (ou d’octets selon le point de vue) appelée trames.
Afin de vérifier l’intégrité des données reçues, cette série peut être complétée par un code de détection d’erreur, composé de bits supplémentaires, déterminés avant l’envoi de la trame selon un algorithme basé sur les données de la trame. À la réception, ce même algorithme est utilisé sur les données, et le code obtenu est comparé à celui intégré à la trame reçue. S’il n’y a pas concordance, les données sont considérées comme corrompues.
Parmi les codes de détection d’erreur, on trouve le bit de parité, la somme de contrôle, …
Bit de parité
Le bit de parité est un code composé d’un unique bit ajouté en fin de trame.
Il existe deux variantes de ce protocole : parité paire ou impaire.
En parité paire (ou impaire), le bit de parité doit faire en sorte que le nombre total de bits à 1 de la trame soit pair (ou impair)
nbr_bit_1
qui prend en argument une trame (sous forme de liste d’octets) et retourne le nombre de bits à 1 dans cette trame.
Somme de contrôle
La somme de contrôle sur 16 bits est un code qui consiste à réaliser la somme arithmétique des mots de 16 bits de la trame, en ne conservant que les 16 bits de poids faible, puis d’inverser binairement le résultat :
checksum
qui prend en argument une trame (sous forme de liste d’octets) et retourne sa somme de contrôle (mot de 16 bits).Exemple :
hex(checksum([0x54, 0x43, 0x01, 0x02, 0x02, 0x44, 0x00, 0x01, 0xDA, 0x22, 0x05, 0xFF, 0x00, 0x3A, 0x05, 0xCE]))
doit retourner :
0xc24c