Mesures sur le bus SPI

ComplémentDocumentation 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.

FondamentalQuestions 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éthodeMesures

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émentRé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 :

Autre mode possible : le MODE 3

Registres internes du TC72 et chronogramme de lecture d'une température :

ComplémentExemples de mesures avec l'analyseur Logic 4 Saleae

Mesures effectuées avec l'analyseur Logic 4 Saleae

Liaisons par grippe-fil ou par insertion directe sur les picots, comme ci-contre :

Valeur affichées sur l'interface graphique Qt pour les mesures effectuées.

Les valeurs 54 et 28,75 doivent être retrouvées dans les trames transmises

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émentExemples 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émentExemples de mesures avec l'analyseur Analog Discovery 2

Mesures effectuées avec l'analyseur Analog Discovery 2

Câblage de l'analyseur, liaisons par grippe-fil ou par insertion directe sur picots (comme ici)

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 :