Calculateur de CRC : paramètres, variantes et vérification

Les octets « 123456789 » passent dans un CRC-32 de polynôme 0x04C11DB7 et donnent 0xCBF43926

Écrit par

dans

Un CRC « qui ne tombe pas juste » vient presque toujours d’un paramètre : polynôme, valeur initiale, réflexion des bits ou XOR final. L’outil les rend tous réglables et propose les variantes les plus courantes, chacune vérifiée sur sa valeur de contrôle officielle (le CRC de la chaîne « 123456789 »).

CRC

–

Octets (gros-boutiste)

–

Octets (petit-boutiste)

–

Les cinq paramètres d’un CRC

ParamètreRôle
LargeurNombre de bits du résultat (8, 16, 32…)
PolynômeLe diviseur, noté sans son bit de poids fort (0x07 pour x⁸ + x² + x + 1)
Valeur initialeContenu du registre avant le premier octet ; une valeur non nulle détecte les zéros ajoutés en tête
RéflexionTraitement des octets bit de poids faible en premier, comme sur une liaison série
XOR finalInversion finale du résultat, pour que des données nulles ne donnent pas un CRC nul

Deux implémentations qui ne s’accordent pas ont presque toujours la bonne largeur et le bon polynôme, mais divergent sur la réflexion ou la valeur initiale. Le nom normalisé de la variante (catalogue de Greg Cook, repris ici) lève l’ambiguïté : « CRC-16 » ou « CRC-CCITT » seuls désignent plusieurs calculs différents.

Où on les rencontre

  • CRC-8/DVB-S2 : protocole CRSF (Crossfire, ExpressLRS).
  • CRC-8/SMBUS (polynôme 0x07, sans réflexion) : télémétrie des ESC au format KISS.
  • CRC-16/MODBUS : Modbus RTU, transmis octet de poids faible en premier.
  • CRC-32/MPEG-2 : l’unité CRC matérielle des STM32 dans sa configuration par défaut.
  • CRC-32/ISO-HDLC : Ethernet, zip, PNG.
  • À l’inverse, la « somme de contrôle » du DShot n’est pas un CRC : c’est un simple XOR de trois quartets, sans polynôme. Elle est détaillée, avec un calculateur dédié, dans l’article Le protocole DShot décortiqué.

Commentaires

Laisser un commentaire