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)

 

Écrire une fonction 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 :

Écrire une fonction 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

Vous aimerez aussi...

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *