Mesures sur le bus SPI
Complément : Documentation du capteur TC72 et complément sur le bus SPI
Complément sur le BUS SPI :
Le bus SPI peut fonctionner dans 4 modes différents. Ces modes sont liés au front d'activation (CPHA = Clock Phase) du signal d'horloge (SCK) et au niveau de repos de ce même signal d'horloge (CPOL = Clock Polarity).
Le tableau et les chronogrammes ci-dessous (site d'origine) illustrent ces différents modes.
Les circuits esclaves sont généralement compatibles avec seulement 1 ou 2 de ces 4 modes SPI. Le circuit maître doit donc s'aligner sur l'un de ces modes et générer en tant que maître les signaux correspondants.
Dans le cas où 2 circuits esclaves sont utilisés et qu'ils n'ont pas de mode SPI commun, il faut alors que le circuit maître reconfigure le bus SPI à chaque fois qu'il communique avec l'un ou l'autre des circuits.


Fondamental : Questions préliminaires
Donner la résolution du capteur.
Identifier dans la documentation du TC72 l'adresse des registres qui contiennent la température et le « Manufacturer ID »
Dans le constructeur de la classe Cspi identifier le nom des attributs qui correspondent :
à la vitesse du bus,
au niveau logique d'activation du CS
au MODE SPI utilisé.
Identifier dans le fichier « ccapteur_spi_tc72_nth.cpp » les valeurs données à chacun de ces attributs lors de l'instanciation du capteur
Vérifier que le mode sélectionné dans le fichier est compatible avec le TC72. Si un autre mode peut également permettre de communiquer avec le TC72, indiquer lequel.
Méthode : Mesures
Le bus SPI ne concerne pas l'afficheur LCD, les mesures peuvent donc être effectuées sur le shield seul. Attention cependant à remettre les écrous après avoir retiré l'afficheur, afin de ne pas les perdre.
Relier l'analyseur aux 4 signaux du BUS ainsi qu'au 0V commun.
Configurer l'interpréteur SPI de l'analyseur logique utilisé pour le mode programmé dans l'application, de même pour le niveau d'activation du CS.
Effectuer une capture de la trame lors de la lecture de la température et lors de la lecture de l'identifiant du fabricant.
Interprétation
Justifier les différents éléments de la trame, commande et données, en vous appuyant sur la documentation, et en comparant avec la valeur affichée sur l'interface graphique.
Vérifier par modification du programme si un, ou d'autres, MODE SPI sont utilisables.
Mesurer la vitesse du bus et la commenter. Conclure.
Complément : Réponses attendues
TC72 :
Résolution de la température : 10 bits → 0,25°C/bit
Registres : LSB Temperature → 0x01 ; MSB Temperature → 0x02 ; Manufacturer ID → 0x03
Attributs : int speed = 5000000Hz = 5MHz ; bool csHigh = TRUE ; int mode SPI_MODE_1
Mode 1 : horloge SCK active sur front descendant, avec un niveau de repos à l'état bas. Ce qui est cohérent avec la documentation du capteur :
Registres internes du TC72 et chronogramme de lecture d'une température :
Complément : Exemples de mesures avec l'analyseur Logic 4 Saleae
Configuration de l'interpréteur SPI sur Saleae :
Mode 1 et CE = 1
Capture globale de la trame avec les 2 mesures :
Le déclenchement se fait sur un front montant de CE, la durée d'acquisition est prévue suffisamment longue pour capturer les 2 lectures. Les échanges effectués pour récupérer le Manufacturer ID et la température figurent dans la colonne de droite.
Zoom sur : Manufacturer ID
La valeur 0x54 est interprétée.
On vérifie bien que SCL est active sur un front descendant, et a un niveau de repos bas → SPI MODE 1
Zoom sur la capture de la température :
Les 10 bits de la température sont constitués de l'octet 0x1C pour la partie entière, auquel il faut ajouter les 2 bits de poids fort de 0xC0 pour les centièmes de degrés.
Ce qui donne 28,75°C et correspond à la valeur affichée sur l'interface graphique.
La communication en MODE 3 est effectivement fonctionnelle, pour l'obtenir il faut intervenir :
dans le fichier "ccapteur_spi_tc72_nth.cpp"
sur la ligne "m_spi = new CSpi(this, m_ce, 5000000, true, SPI_MODE_3);" qui instancie la configuration du bus.
Les modes 0 et 2 renvoient par contre des valeurs erronées.
Les essais (les modes 1 et 3 viables, les modes 2 et 4 dysfonctionnent) sont donc cohérents avec l'analyse de la documentation.
Mesure de la vitesse sur le bus SPI : 3MHz
Conclusion : la carte Rpi devant gérer le système d'exploitation, la vitesse du bus SPI n'est pas garantie.
Complément : Exemples de mesures avec l'analyseur Ikalogic SQ100
Mesures effectuées avec l'analyseur Ikalogic SQ100
Câblage de l'analyseur : liaison par grippe-fil

Configuration de l'interpréteur : tout à fait similaire à celle de Saleae
Capture et interprétation du Manufacturer ID
Capture et interprétation de la température
Mesure de la fréquence : 3,125MHz (même constat que précédemment)
Complément : Exemples de mesures avec l'analyseur Analog Discovery 2
Configuration de l'interpréteur SPI :
A noter : on ne peut pas interpréter simultanément MOSI et MISO, sur un même interpréteur, il faut donc en configurer 2 si besoin.
Exemple de capture du Manufacturer ID, avec mise en évidence de la configuration , et mesure de la fréquence d'horloge SPI.
Déclenchement sur le début d'une trame (Protocole → SPI Trigger → Start ).
Utilisation du mode Repeat + Run pour obtenir un rafraîchissement des données à chaque nouvelle émission d'une commande depuis le maître.
Mesure pour une température de 25,75°C :