Comment calculer le CRC 16 avec polynôme x16 + x12 + x5 + 1
Je suis en train de faire l'interface avec un système et de leurs spécifications dont ils ont besoin pour calculer le CRC 16 pour la communication série. Voici un extrait de la documentation
"16 bits CCITT CRC du message en utilisant le standard polynôme, X16 +X12 +X5 +1. Les valeurs de départ sont toujours à 0 (zéro)"
Tout d'abord je n'ai trouvé 2-3 échantillons de code C# de comment le faire, et aucun des semblent me donner la valeur correcte. J'ai essayé celui http://www.sanity-free.com/133/crc_16_ccitt_in_csharp.html, mais je ne suis pas sûr de ce que pour définir la valeur initiale. J'ai essayé de zéros et ne fonctionne toujours pas.
De données, je suis en train de tester ça:
0x00 0x09 0x10 0x01 0x01 0x7C 0xF4 0xB8 0x00,
la valeur CRC-je obtenir est
0xF2 0x24,
cependant leur système dit qu'il devrait être
0xC0 0x2F
Ma compréhension est que le polynôme x16 + x12 + x5 + 1 = 0x11021, quand bien même je l'utiliser dans le code il me donne toujours pas la bonne réponse. Ce que je fais mal?
OriginalL'auteur fenix2222 | 2013-03-06
Vous devez vous connecter pour publier un commentaire.
J'ai tout compris. J'ai eu à utiliser CRC16-CCITT Kermit inmplementation. Je pense que leur documentation doit être mise à jour car il utilise un autre polynôme.
http://www.sanity-free.com/147/standard_crc16_and_crc16_kermit_implementation_in_csharp.html
Self-Learner
Non, c'est le même polynôme. Il est très commun pour les CRC implémentations à l'utilisation de la bit-inversé polynôme. 0x1021 inversée est 0x8408. La description de la CRC16-CCITT Kermit CRC est à reveng.sourceforge.net/crc-catalogue/16.htm#crc.cat.kermit , qui relève de la réflexion.
Merci
OriginalL'auteur fenix2222