Utiliser I2C dans les applications de haut niveau
Azure Sphere prend en charge Inter-Integrated Circuit (I2C) en mode master. I2C est un bus série qui connecte des périphériques à vitesse inférieure à des microcontrôleurs. I2C utilise un modèle multi-master/multi-subordonné où un appareil master contrôle un ensemble d’appareils subordonnés. L’I2C est souvent utilisé avec des périphériques qui ne nécessitent qu’une simple communication légère avec un microcontrôleur, comme des commandes de réglage, des commutateurs d’alimentation et des capteurs.
Les applications peuvent accéder aux périphériques via I2C en appelant les API I2C des bibliothèques d’applications pour effectuer des opérations sur une interface de master I2C. L’exemple LSM6DS3 I2C décrit comment configurer le matériel pour I2C sur un appareil MT3620 et utiliser I2C dans une application.
Configuration requise pour I2C
Les applications qui utilisent I2C doivent inclure les fichiers d’en-tête appropriés pour I2C et ajouter des paramètres I2C 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 I2C_STRUCTS_VERSION 1
#include <applibs/i2c.h>
#include "path-to-your-target-hardware.h"
Déclarez la définition du I2C_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 I2C, vous devez ajouter la I2cMaster
fonctionnalité au manifeste de l’application, puis ajouter chaque interface I2C master à la fonctionnalité. Cela permet à l’application d’accéder à l’interface. 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 I2C. 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 I2C master :
"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ],
L’extrait suivant montre comment spécifier les mêmes interfaces de master I2C dans une application qui cible le Starter Kit Avnet MT3620 :
"I2cMaster": [ "$AVNET_MT3620_SK_ISU0_I2C", "$AVNET_MT3620_SK_ISU1_I2C" ]
Ouvrir une interface de master I2C
Avant d’effectuer des opérations sur une interface de master I2C, vous devez l’ouvrir en appelant la fonction I2CMaster_Open.
Mettre à jour les paramètres d’une interface de master I2C
Après avoir ouvert l’interface master, vous pouvez modifier les paramètres :
- Pour modifier la vitesse du bus pour les opérations sur l’interface master, appelez I2CMaster_SetBusSpeed
- Pour modifier le délai d’expiration des opérations, appelez I2CMaster_SetTimeout
Effectuer des opérations de lecture et d’écriture sur l’interface master I2C
Azure Sphere prend en charge plusieurs options pour effectuer des opérations de lecture et d’écriture avec I2C. Ces options sont toutes des opérations bloquantes et synchrones.
Pour les opérations d’écriture ou de lecture unidirectionnelles, vous pouvez appeler I2CMaster_Write ou I2CMaster_Read. Il s’agit de la façon la plus simple d’effectuer des opérations sur une interface I2C master, car elle ne spécifie qu’une seule opération et inclut l’adresse de l’appareil subordonné dans l’appel de fonction.
Vous pouvez appeler I2CMaster_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.
Pour l’interopérabilité avec certaines interfaces POSIX, vous pouvez appeler les fonctions de lecture(2) et d’écriture POSIX(2) pour effectuer des transactions unidirectionnel. Vous devez appeler I2CMaster_SetDefaultTargetAddress pour définir l’adresse de l’appareil subordonné avant d’appeler read(2) ou write(2).
Vous pouvez appeler ces fonctions pour effectuer des opérations d’écriture de 0 octet afin de vérifier la présence d’un appareil subordonné. Si une opération de lecture ou d’écriture échoue, votre application doit gérer la réémission de la requête.
Fermer l’interface I2C
Pour fermer l’interface, vous devez appeler la fonction POSIX standard close().
Prise en charge de MT3620
Cette section décrit les options I2C qui s’appliquent uniquement lors de l’exécution d’Azure Sphere sur le MT3620.
Les spécifications I2C pour la puce MT3620 sont répertoriées dans État de support 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 de master I2C. Lorsque vous utilisez un port ISU comme interface de master I2C, vous ne pouvez pas utiliser le même port qu’une interface SPI ou UART.
- Les adresses d’appareils subordonnés 10 bits ne sont pas prises en charge sur le MT3620 ; seules les adresses 7 bits sont prises en charge.
- Le MT3620 prend en charge les vitesses de bus 100 KHz, 400 KHz et 1 MHz, mais pas 3,4 MHz.
- Les lectures I2C de 0 octet ne sont pas prises en charge sur le MT3620.
- Lorsque vous utilisez I2C dans une application de haut niveau, seules les broches SCL et SDA dans le bloc périphérique ISU sont utilisées par le périphérique I2C, et les autres broches peuvent être utilisées comme GPIOs par la même application de haut niveau. Consultez Périphériques d’E/ S pour obtenir la liste des broches ISU inutilisées qui peuvent être réutilisées pour GPIO.