Bonjour à tous,
Je rencontre quelques problèmes pour calculer un CRC-8 selon cette documentation :
Déjà le polynôme ne me semble pas cohérent par rapport au schéma ou alors je comprend mal...
Voici ma fonction pour le calcul du CRC :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 unsigned char cScmbusCrc8Calc ( unsigned char *pcBufData, unsigned short wNbData ) { unsigned char cLoopBit, cCrc; unsigned char *pcPtr; unsigned short wLoopData; /* Initialisation */ /*================*/ pcPtr = pcBufData; cCrc = 0x00; /* Calcul CRC8 */ /*=============*/ for ( wLoopData = 0 ; wLoopData < wNbData ; wLoopData ++ ) { cCrc ^= *pcPtr; pcPtr ++; for ( cLoopBit = 0 ; cLoopBit < 8 ; cLoopBit ++ ) { if ( (cCrc & 0x80) != 0 ) { cCrc <<= 1; cCrc ^= 0x99; } else cCrc <<= 1; } } /* Fin */ /*=====*/ return (cCrc); }
Par exemple pour cette trame : 0x01 0x31 0x0D ma fonction calcule ce CRC : 0x40
Sauf que ce CRC n'est pas correct apparemment puisque mon appareil ne répond pas..
Par contre si je force le CRC à la valeur : 0xFC j'obtiens une trame réponse.
Si quelqu'un à une idée au vu de la documentation ou à partir du bon CRC (FC) je suis preneur !
Merci,
Jérôme .G
Partager