Bonjour à tous,

Je rencontre quelques problèmes pour calculer un CRC-8 selon cette documentation :

Nom : CRC-8_Scaime.png
Affichages : 5058
Taille : 71,8 Ko

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