Nouvelles:

Le Forum est maintenant chiffré (préambule https). Bien sûr, des liens externes insérés dans les sujets vont demeurer inchangés. Mais la composition des pages du Forum est désormais sécurisée. Si des problèmes d'affichage surviennent, veillez à vider votre cache pour ce site.

Menu principal

Protocole Graupner S-PCM

Démarré par pierrotm777, Novembre 05, 2022, 07:29:44 PM

« précédent - suivant »

pierrotm777

Bonsoir,

Comme je l'ai indiqué dans ma présentation je travaille sur le projet, https://github.com/Ingwie/OpenAVRc_Dev .
Ce projet software et hardware permet de réaliser sa propre radiocommande .
Tout est open source.

Cette radio permet d’utiliser beaucoup de protocoles différents dans la bande des fréquences 2,4ghz.
Mais cette bande passe mal sous l'eau et il m'est venu à  l'esprit de réutiliser les anciens modules HF 35,41 ou 72Mhz.
Ceux-ci acceptent les protocoles PPM ou PCM.
PCM est un protocole bien plus solide que le PPM traditionnel et surtout intègre un Failsafe qui se déclenche en cas de mauvaise réception.
Nous avons donc recréé le protocole PCM1024 de Futaba et il fonctionne parfaitement avec notre radio.
Nous sommes en train de recréer le protocole Graupner S-PCM et le PCM de Multiplex.

Et j'ai besoin d'aide pour finaliser le protocole S-PCM qui possède des checksum dont nous ne savons pas comment il est calculé.
Voici la doc que nous possédons:
https://www.mediafire.com/file/wqndoimbamybggv/JR_GraupnerSPCM.pdf/file
Voici une analyse faite avec l'analyseur logique Pulseview:
https://www.mediafire.com/file/e1itfsp7o81dt0s/SPCM3.sr/file

Le protocole est quasiment terminé, mais il nous manque le checksum.
Si quelqu'un pouvait, en analysant le fichier SPCM3.sr, découvrir comment ce checksum est calculé, cela nous rendrait un grand service.

Cordialement,

Pierre

papyblue

Bonjour Pierre et bienvenue sur ce forum.

Votre projet semble passionnant. Pour qui ne baigne pas dans votre projet ou n'est pas habitué à  accomplir des taches similaires, l'effort pour répondre à  votre question à  partir des données fournies semble  collosal. Par contre, si vous aviez un peu débroussaillé le terrain en nous fournissant des exemples (sous forme numérique) de données (32 bits ?) et de "checksum" associé (8 bits) , il y aura sans doute plus de candidats pour vous aider.(moi le premier)

La télécommande et les protocoles associés est un sujet rarement abordé sur ce forum, c'est peut être l'occasion de nous faire une présentation (ou suggestion de vidéo à  Bertrand) ;)

PB

pierrotm777

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


papyblue

Bonjour Pierre,

C'est nettement mieux comme ça !

Connaissiez-vous ce site pour chercher les CRC :
http://www.sunshine2k.de/coding/javascript/crc/crc_js.html

Cela peut vous aider.

PB

pierrotm777

Bonsoir,

Désolé pour ce délai, je n'ai pas vu passer de notification.

Oui, j'ai testé toutes les solutions CRC8.

Mais merci tout de même.

Si quelqu'un a une piste, nous sommes preneur :-)

Pierre