Extrait du PDF DecodageSpcmGraupner.pdf:
On est parti d'une capture (à l'analyseur logique) de la vraie trame physique (signal de modulation d'un émetteur SPCM Graupner).
La trame physique, c'est le signal D0 ci-dessus qui transporte le train binaire.
Le codage est le suivant: après chaque transition, on a un 1 suivi d'un certain nombre de 0
Le premier 1, juste après l'impulsion de synchro, est ignoré: c'est à partir de là qu'il faut commencer à compter les groupes de 8 bits (octets)
Quand on a 8 bits, on a un octet.
Ex: Octet0, Octet1, etc...
A partir de la Table 1, connaissant l'octet sur la ligne, on en déduit le quintet (de 00000 à 11111): c'est cette étape qui permet d'arriver à la trame logique à partir de la trame physique.
Une fois qu'on a 32 quintets, on a la trame logique entière. Mais dès qu'on a 8 quintets, on a le premier des 4 blocs qui compose la trame.
Les 8 premiers quintets sont: (40 bits)
`10000 01111 11101 11100 10000 00000 11110 00001
`En "collant" ces quintets, on obtient: (les mêmes 40 bits)
1000001111111011110010000000001111000001
En les groupant en paquets de 8, on obtient: (les mêmes 40 bits)
10000011 11111011 11001000 00000011 11000001 0x83 0xFB 0xC8 0x03 0XC1
On retrouve donc nos 8 bits de droite (0xC1) qui représente le crc/checksum des 32 bits précédents qui sont 0xB3, 0xFB, 0xC8, 0x03.
Ces 5 octets (0xB3, 0xFB, 0xC8, 0x03 et 0xC1) représentent donc bien (le premier bloc de) la trame logique.
Oui, c'est bien le doc de Shaul Eizikovich. Mais, lui, il voulait simplement récupérer les voies RC d'un signal PCM injecté dans la carte son d'un PC pour jouer au simulateur d'avion depuis un émetteur RC physique. Son projet s'appelle SmartPropoPlus. C'est lui, plus les personnes qu'il cite dans le PDF JR_GraupnerSPCM(1).pdf qui ont fait le reverse engineering du protocole. Mais lui, il n'avait pas besoin de connaître l'algo du crc/checksum car la liaison étant courte, il y a avit très peu de rique d'erreur. Par contre, nous, nous devons impérativement positionner correctement ce champ parce que c'est pour créer le modulateur PCM d'émission pour notre projet opensource d'émetteur RC (OpenAVRc) pour pouvoir utiliser un réécepteur RC Graupner, qui lui, va vérifier l'intégrité des trames reçues.
Nous avons évidemment contacté Shaul, mais comme on s'en doutait, il nous a répondu qu'il ignorait tout simplement ce champ car dans son cas d'usage il peut s'en passer.
@fdufnews:
[quote]Certainement pas.
Réfléchis, un checksum tout bête (une simple somme modulo 256 par exemple) ne donnera pas le même résultat si tu additionnes les quintets ou les octets.[/quote]
Entièrement d'accord, mais, le résultat est sur 8 bits et est une opération sur les 32 bits précédents. On ne sait pas si l'opération est faite sur des octets, des quartets, mais on est quasi sûr que ce n'est pas fait sur des quintets: 32 bits n'est pas modulo 5.