Bonjour,
Merci pour l'intérêt que vous portez à notre problème.
Je tente donc de recréer le protocole S-PCM de Graupner.
On a isolé les motifs suivants à partir d'une capture SPCM1024 Graupner réalisée à l'analyseur logique:
0x83, 0xFB, 0xC8, 0x03, 0xC1: 0xC1 étant le checksum des 4 bytes précédents
0xC4, 0x01, 0x88, 0x03, 0x1B: 0x1B étant le checksum des 4 bytes précédents
0xD3, 0xE1, 0xA7, 0x53, 0x53: 0x53 étant le checksum des 4 bytes précédents
voici comment nous avons obtenu les 3 motifs qui pourraient permettre de déterminer l'algo de calcul du CRC8/Checksum:
S'aider visuellement des fichiers joints "JR_GraupnerSPCM(1).pdf" et "DecodageSpcmGraupner.pdf" afin de comprendre la démarche.
La synchro est un niveau haut ou bas de 412.5µs, la polarité n'importe pas.
Chaque front montant/descendant, est suivi d'un état haut ou bas toujours multiple de 165µs (sauf pour la synchro). Par exemple, si l'état dure 3x165=495µs, cela correspond aux 3 bits 100. Si l'état dure 5x165=825µs, cela correspond aux 5 bits 10000. Le premier bit après un front est toujours un 1 suivi d'un certain nombre de 0, sauf dans un cas particulier: le 1 juste après la synchro est ignoré.
En groupant les bits obtenus par paquets de 8 bits, non obtenons des octets.
Pour arriver à la trame "logique", il faut faire une conversion 8bits(octet)->5bits(quintet) en utilisant la Table 1 du document PDF. Une trame "logique" complète est composée de 32 quintets et est composée de 4 blocs de 8 quintets. Voir la structure en page 5 du PDF "JR_GraupnerSPCM(1).pdf":

Chaque bloc de 8 quintets (8x5=40 bits) peuvent également se représenter comme 5 octets (5 x 8 = 40 bits aussi)
Dans la doc, au chapitre Error Detection, il est écrit: Les 8 bits de poids faibles de chaque champ de contrôle (A, B, C, D) sont utilisés pour la détection d'erreur des 32 précédents bits respectifs. Nous en déduisons donc que le 5e octet de chaque bloc de 40 bits serait un CR8 ou un checksum portant sur les 4 premiers octets.
Dans le PDF joint "DecodageSpcmGraupner.pdf", il y a une capture réalisée à l'analyseur logique sur laquelle les bits/octets/quintets/octets sont indiqués. On retrouve bien la valeur des voies RC (Ch2=509, Ch4=512, Ch6=512, Ch8=512, Ch1=847, Ch3=846). Les valeurs sont bien entre 0 et 1023, le neutre étant à 512. Ces valeurs sont donc cohérentes.
Sur cette capture, les 3 premiers blocs de la trame (blocs de 40 bits) ont été décodés manuellement et transcodés sous forme d'une suite de 5 octets. Le 5e octet étant le CR8 ou checksum dont nous cherchons l'algorithme.
Nous avons donc isolé 3 motifs:
1er bloc: 0x83, 0xFB, 0xC8, 0x03, 0xC1: le 5e octet 0xC1 étant le crc/checksum des 4 bytes précédents
2e bloc: 0xC4, 0x01, 0x88, 0x03, 0x1B: le 5e octet 0x1B étant le crc/checksum des 4 bytes précédents
3e bloc: 0xD3, 0xE1, 0xA7, 0x53, 0x53: le 5e octet 0x53 étant le crc/checksum des 4 bytes précédents
Voilà comment nous avons extrait les motifs afin de servir de vecteur de test pour tenter de déterminer l'algorithme de calcul de ce CR8 ou checksum.
Cordialement,
Pierre