Partager via


Utiliser SPI dans les applications de haut niveau

Azure Sphere prend en charge l’interface spi (Serial Peripheral Interface) en mode master. SPI est une interface série utilisée pour la communication entre les périphériques et les circuits intégrés. SPI utilise un modèle master/subordonné où un appareil master contrôle un ensemble d’appareils subordonnés. Contrairement à I2C, SPI peut être utilisé avec des périphériques plus complexes à vitesse plus élevée.

Les applications peuvent accéder aux périphériques via SPI en appelant les API SPI des bibliothèques d’applications pour effectuer des opérations sur une interface spi master. L’exemple SPI LSM6DS3 décrit comment configurer le matériel pour SPI sur un appareil MT3620 et utiliser SPI dans une application.

Sélection de puce

La sélection de puce gère la connexion entre une interface spi master et un ensemble d’appareils subordonnés, et permet à l’interface master d’envoyer et de recevoir des données à chaque appareil subordonné indépendamment. Azure Sphere prend en charge les paramètres actif-faible et actif-élevé pour la sélection de puce, avec actif-faible comme paramètre par défaut. Chaque interface spi master peut être utilisée exclusivement par une application. L’application doit ouvrir l’interface spi master 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 SPI sur Azure Sphere utilisent des API bloquantes.

Conditions requises pour SPI

Les applications qui utilisent SPI doivent inclure les fichiers d’en-tête appropriés pour SPI et ajouter des paramètres SPI au 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 de matériel 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 SPI_STRUCTS_VERSION préprocesseur avant d’inclure le fichier d’en-tête. Cela spécifie la version de struct utilisée par l’application.

Remplacez « path-to-your-target-hardware.h » par le chemin d’accès au fichier d’en-tête de votre matériel.

Paramètres du manifeste d’application

Pour utiliser les API SPI, vous devez ajouter la SpiMaster fonctionnalité au manifeste de l’application, puis ajouter chaque contrôleur spi master à la fonctionnalité. 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 spi master. Le compilateur traduit ces valeurs en valeurs brutes lorsque vous générez l’application.

Par exemple, voici un extrait d’un manifeste d’application qui cible une carte de développement de référence (RDB) MT3620 et configure deux interfaces SPI master :

"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ],

L’extrait suivant montre comment spécifier les mêmes interfaces spi master dans une application qui cible le Kit de démarrage Avnet MT3620 :

"SpiMaster": [ "$AVNET_MT3620_SK_ISU0_SPI", "$AVNET_MT3620_SK_ISU1_SPI" ]

Configurer la sélection de puce et ouvrir une interface spi master

Avant d’effectuer des opérations sur une interface spi master, vous devez configurer la sélection de puce et ouvrir l’interface. Pour configurer la sélection de puce, appelez la fonction SPIMaster_InitConfig pour initialiser le struct SPIMaster_Config struct . Après avoir initialisé SPIMaster_Config, mettez à jour le csPolarity champ avec le SPI_ChipSelectPolarity_ActiveLow.. /reference/applibs/ity_Activ.. /reference/applibs/rence/applibs/applibs-spi/enum-spi-chipselectpolarity.md).

Pour ouvrir une interface spi master, appelez le SPIMaster_Openfunction. Cela applique les paramètres par défaut à l’interface et applique vos paramètres de sélection de puce :

  • SPI_Mode_0 pour l’ordre de bits SPI
  • SPI_BitOrder_MsbFirst pour le mode de communication

Mettre à jour les paramètres d’une interface spi master

Après l’initialisation, vous pouvez modifier les paramètres de l’interface :

Effectuer des opérations de lecture et d’écriture sur l’interface spi master

Azure Sphere prend en charge plusieurs options pour effectuer des opérations de lecture et d’écriture avec SPI. Pour les opérations de lecture ou d’écriture unidirectionnelles et pour maintenir 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 d’écriture puis de lecture combinée dans une transaction de bus unique sans interruption d’une autre transaction.

Appelez la fonction SPIMaster_TransferSequential lorsque vous avez besoin d’un contrôle plus précis sur 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 d’états d’activation et de désactivation de CS.

Fermer l’interface SPI

Pour fermer l’interface, appelez la fonction POSIX standard close().

Prise en charge de MT3620

Cette section décrit les options SPI qui s’appliquent uniquement lors de l’exécution d’Azure Sphere sur la carte de développement MT3620.

Les spécifications SPI pour le MT3620 sont répertoriées dans État de prise en charge mt3620. Le guide de l’utilisateur de la carte de développement MT3620 décrit la disposition des broches et les fonctions de câblage.

Le dossier HardwareDefinitions du répertoire d’installation du Kit de développement logiciel (SDK) Microsoft Azure Sphere contient les définitions des 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 master pour mt3620, MT3620 RDB, ainsi que d’autres matériels MT3620. L’emplacement par défaut du dossier HardwareDefinitions est C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions sur Windows et /opt/azurespheresdk/HardwareDefinitions sur Linux.

  • Lorsque vous configurez la carte de développement MT3620, vous pouvez utiliser n’importe quel port ISU comme interface spi master. Vous pouvez connecter jusqu’à deux appareils subordonnés à chaque ISU. Lorsque vous utilisez un port ISU comme interface spi master, vous ne pouvez pas utiliser le même port qu’une interface I2C ou UART.
  • Le MT3620 prend en charge les transactions SPI jusqu’à 40 MHz.
  • Le MT3620 ne prend pas en charge les opérations SPI simultanées de lecture et d’écriture bidirectionnelle (duplex intégral) au sein d’une transaction de bus unique.