J'ai un SPI MASTER (qui contrôle la CLK) et un GPS en face. Je communique avec des trames binaires au format UBX (6 octets d'entête, payload -if any-, 2 octets de CRC).
Donc j'envoie ma trame de requête au GPS qui doit va répondre un peu plus tard, une fois qu'il a lui même interprété la question et élaboré une réponse qu'il mettra à disposition sur le SPI.
1- Le STM32 envoie bien les 6 octets
2- Petite pause avec musique d’ascenseur
3- J'essaye de réceptionner les 6 octets d'entête de la réponse du GPS car il contient la taille de la payload -if any- (qui peut varier) pour savoir combien d'octets + 2 octets de CRC je dois lire ensuite
Et là, c'est le drame :/
Premier essai, je demande à lire que 6 octets
Sur l'analyseur logique, ligne du haut, on reçoit bien 6 octets, le premier à... FF (WTF!) Du coup mon entête est tronquée, je n'ai pas la taille.
Mais le mieux est encore ce que le STM32 reçoit : je lui demande de foutre tout ça à 'bufUbx=0x20017f18' (en haut à droite) et il me fout tout ça à... 0x20017f1c (en bas au centre, après le bleu)
Et ce n'est pas fini, la séquence 0Ah 04h 64h se transforme en... 0E34 (WTF!)
Deuxième essai, je demande à lire 6 octets + 1 pour espérer avoir la taille au complet
Réponse de l'analyseur logique, j'ai bien reçu 7 octets, avec la taille en little endian 64h 00h qui est là. Youpi !
Le STM32 transforme à présent la séquence 0Ah 04h 64h 00h en... 0A34 (WTF!)
Troisième essai, je demande à lire 6 octets + 1 + 4 pour espérer avoir quelque chose de correct en mémoire
L'analyseur logique voit bien la séquence de 11 octets demandée.
Qu'est ce que fout le STM32 ? Pour une fois il ne corrompt pas la mémoire, il oublie juste quelques octets en cours de route.
De la fin de séquence 31h 2Eh 30h 30 il ne reste que... 31, le reste est resté non initialisé.
C'est moi qui ne sais pas y faire ou c'est de la merde en LQFP64 ?
Pourtant j'ai bien configuré le DMA avec des mots d'un BYTE, donc il devrait purger un peu sa FIFO sans faire n'importe quoi.