Utiliser SPI dans les applications de haut niveau
Important
Il s’agit de la documentation Azure Sphere (héritée). Azure Sphere (hérité) prend sa retraite le 27 septembre 2027 et les utilisateurs doivent migrer vers Azure Sphere (intégré) pour l’instant. Utilisez le sélecteur de version situé au-dessus du TOC pour afficher la documentation Azure Sphere (intégrée).
Azure Sphere prend en charge SPI (Serial Peripheral Interface) en mode maître. SPI est une interface série qui permet la communication entre des périphériques et des circuits intégrés. SPI utilise un modèle maître/subordonné dans lequel un appareil maître contrôle un ensemble d’appareils subordonnés. Contrairement à I2C, SPI peut être utilisé avec des périphériques à haute vitesse plus complexes.
Les applications accèdent aux périphériques par le bais de SPI en appelant des API SPI Applibs pour effectuer des opérations sur une interface maître SPI. L’exemple de SPI LSM6DS3 montre comment configurer le matériel pour SPI sur un appareil MT3620 et comment utiliser SPI dans une application.
Chip select
Le chip select gère la connexion entre une interface maître SPI et un ensemble d’appareils subordonnés. Il permet à l’interface maître d’échanger des données avec chaque appareil subordonné indépendamment. Azure Sphere prend en charge les paramètres active-low (défaut) et active-high pour le chip select. Chaque interface maître SPI peut être utilisée exclusivement par une application. L’application doit ouvrir l’interface maître SPI et identifier chaque appareil subordonné connecté avant d’effectuer des opérations de lecture et d’écriture sur l’interface. Les opérations de lecture et d’écriture de SPI sur Azure Sphere utilisent des API de blocage.
Exigences de SPI
Les applications qui utilisent SPI doivent inclure les fichiers d’en-tête appropriés pour SPI et ajouter les paramètres SPI dans le manifeste de l’application.
Toutes les applications doivent définir leur matériel cible et inclure le fichier d’en-tête de définition matérielle correspondant.
Fichiers d’en-tête
#define SPI_STRUCTS_VERSION 1
#include <applibs/spi.h>
#include "path-to-your-target-hardware.h"
Déclarez la définition du préprocesseur SPI_STRUCTS_VERSION
avant d’inclure le fichier d’en-tête. Cette entrée spécifie la version de struct qui est utilisée par l’application.
Remplacez « path-to-your-target-hardware.h » par le chemin du fichier d’en-tête de votre matériel.
Paramètres de manifeste de l’application
Pour utiliser les API de SPI, vous devez ajouter la fonction SpiMaster
dans le manifeste de l’application, puis ajouter chaque contrôleur maître SPI à la fonction. Cela permet à l’application d’accéder au contrôleur. Le manifeste d’application Azure Sphere contient plus de détails sur le manifeste de l’application.
Dans votre code, utilisez les constantes définies pour votre matériel afin d’identifier les interfaces maîtres SPI. Le compilateur convertit ces valeurs en valeurs brutes lorsque vous générez l’application.
Par exemple, voici un extrait du manifeste d’une application qui cible une carte de développement de référence (RDB) MT3620 et configure deux interfaces maîtres SPI :
"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ],
L’extrait suivant montre comment spécifier les mêmes interfaces maîtres SPI dans une application qui cible le starter kit Avnet MT3620 :
"SpiMaster": [ "$AVNET_MT3620_SK_ISU0_SPI", "$AVNET_MT3620_SK_ISU1_SPI" ]
Configurer le chip select ouvrir une interface maître SPI
Avant d’effectuer des opérations sur une interface maître SPI, vous devez configurer le chip select et ouvrir l’interface. Pour configurer le chip select, appelez la fonction SPIMaster_InitConfig qui initialise le struct SPIMaster_Config. Une fois que vous avez initialisé SPIMaster_Config, mettez à jour le champ csPolarity
avec le paramètre SPI_ChipSelectPolarity_ActiveLow ou SPI_ChipSelectPolarity_ActiveHigh.
Pour ouvrir une interface maître SPI, appelez la fonction SPIMaster_Open. Ceci applique les paramètres par défaut à l’interface et applique vos paramètres de chip select :
SPI_Mode_0
pour l’ordre des bits SPISPI_BitOrder_MsbFirst
pour le mode de communication
Mettre à jour les paramètres d’une interface maître SPI
Après l’initialisation, vous pouvez changer les paramètres de l’interface :
- Pour changer l’ordre des bits, appelez SPIMaster_SetBitOrder
- Pour changer la vitesse du bus SPI, appelez SPIMaster_SetBusSpeed
- Pour changer le mode de communication, appelez SPIMaster_SetMode
Effectuer des opérations de lecture et d’écriture sur l’interface maître SPI
Azure Sphere prend en charge plusieurs options pour effectuer des opérations de lecture et d’écriture avec SPI. Pour effectuer des opérations de lecture et d’écriture unidirectionnelles et garantir l’interopérabilité avec certaines API POSIX, vous pouvez appeler les fonctions POSIX read(2) et write(2).
Vous pouvez appeler la fonction SPIMaster_WriteThenRead pour effectuer une opération combinée d’écriture puis de lecture dans une transaction de bus unique tout en assurant la continuité avec une autre transaction.
Appelez la fonction SPIMaster_TransferSequential si vous souhaitez contrôler de manière plus précise le minutage entre les opérations de lecture et d’écriture. Cela vous permet d’effectuer plusieurs opérations de lecture et d’écriture entre une paire de CS activer et désactiver des états.
Fermer l’interface SPI
Pour fermer l’interface, appelez la fonction POSIX standard close().
Prise en charge de la carte MT3620
Cette section décrit les options de SPI qui s’appliquent uniquement si vous exécutez Azure Sphere sur la carte de développement MT3620.
Pour la carte MT3620, les spécifications SPI sont listées dans État de la prise en charge du MT3620. Le guide de l’utilisateur pour la carte de développement MT3620 décrit la disposition des broches et leurs fonctions pour le câblage.
Le dossier HardwareDefinitions du répertoire d’installation du Kit de développement logiciel (SDK) Microsoft Azure Sphere contient des définitions pour les cartes de développement, modules et puces Azure Sphere courants. Il contient des fichiers d’en-tête et JSON qui définissent les interfaces principales pour la base de données RDB MT3620, MT3620, ainsi que d’autres matériels MT3620. L’emplacement par défaut du dossier HardwareDefinitions se trouve C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
sur Windows et /opt/azurespheresdk/HardwareDefinitions
sur Linux.
Le référentiel d’exemples Azure Sphere sur GitHub contient des fichiers d’en-tête et JSON qui définissent des interfaces principales SPI pour la puce MT3620 et MT3620 RDB, ainsi que d’autres matériels MT3620.-->
- Quand vous configurez la carte de développement MT3620, vous avez la possibilité d’utiliser n’importe quel port ISU comme interface maître SPI. Vous pouvez connecter jusqu’à deux appareils subordonnés à chaque port ISU. Si vous utilisez un port ISU comme interface maître SPI, vous ne pouvez pas utiliser le même port comme interface I2C ou UART.
- La carte MT3620 prend en charge des transactions SPI jusqu’à 40 MHz.
- La carte MT3620 ne prend pas en charge les opérations SPI de lecture et d’écriture bidirectionnelles simultanées (en duplex intégral) dans une transaction de bus unique.