Usare I2C nelle applicazioni di alto livello
Azure Sphere supporta Inter-Integrated Circuit (I2C) in modalità master. I2C è un bus seriale che collega periferiche a bassa velocità ai microcontrollori. I2C utilizza un modello multi-master/multi-subordinate in cui un dispositivo master controlla un set di dispositivi subordinati. I2C viene spesso utilizzato con periferiche che richiedono una comunicazione semplice e leggera con un microcontrollore, ad esempio l'impostazione di controlli, interruttori di alimentazione e sensori.
Le applicazioni possono accedere alle periferiche tramite I2C chiamando le API I2C applibs per eseguire operazioni su un'interfaccia master I2C. L'esempio LSM6DS3 I2C descrive come configurare l'hardware per I2C in un dispositivo MT3620 e usare I2C in un'applicazione.
Requisiti I2C
Le applicazioni che usano I2C devono includere i file di intestazione appropriati per I2C e aggiungere le impostazioni I2C al manifesto dell'applicazione.
Tutte le applicazioni devono impostare l'hardware di destinazione e includere il file di intestazione di definizione hardware corrispondente.
File di intestazione
#define I2C_STRUCTS_VERSION 1
#include <applibs/i2c.h>
#include "path-to-your-target-hardware.h"
Dichiarare la definizione del I2C_STRUCTS_VERSION
preprocessore prima di includere il file di intestazione. Specifica la versione struct usata dall'applicazione.
Sostituire "path-to-your-target-hardware.h" con il percorso del file di intestazione per l'hardware.
Impostazioni del manifesto dell'applicazione
Per usare le API I2C, è necessario aggiungere la I2cMaster
funzionalità al manifesto dell'applicazione e quindi aggiungere ogni interfaccia master I2C alla funzionalità. In questo modo l'applicazione può accedere all'interfaccia.
Il manifesto dell'applicazione Azure Sphere ha maggiori dettagli sul manifesto dell'applicazione.
Nel codice usare le costanti definite per l'hardware per identificare le interfacce I2C. Il compilatore tradurrà questi valori in valori non elaborati quando si compila l'app.
Ad esempio, ecco un estratto di un manifesto dell'applicazione che si rivolge a una scheda di sviluppo di riferimento (RDB) MT3620 e configura due interfacce master I2C:
"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ],
Il seguente estratto mostra come specificare le stesse interfacce master I2C in un'applicazione che si rivolge a Avnet MT3620 Starter Kit:
"I2cMaster": [ "$AVNET_MT3620_SK_ISU0_I2C", "$AVNET_MT3620_SK_ISU1_I2C" ]
Aprire un'interfaccia master I2C
Prima di eseguire operazioni su un'interfaccia master I2C, è necessario aprirla chiamando la funzione I2CMaster_Open .
Aggiornare le impostazioni per un'interfaccia master I2C
Dopo aver aperto l'interfaccia master, è possibile modificare le impostazioni:
- Per modificare la velocità del bus per le operazioni sull'interfaccia master, chiama I2CMaster_SetBusSpeed
- Per modificare il timeout per le operazioni, chiamare I2CMaster_SetTimeout
Eseguire operazioni di lettura e scrittura nell'interfaccia master I2C
Azure Sphere supporta diverse opzioni per eseguire operazioni di lettura e scrittura con I2C. Queste opzioni sono tutte operazioni sincrone di blocco.
Per le operazioni di scrittura o lettura unidirezionale è possibile chiamare I2CMaster_Write o I2CMaster_Read. Questo è il modo più semplice per eseguire operazioni su un'interfaccia master I2C perché specifica una sola operazione e include l'indirizzo del dispositivo subordinato nella chiamata di funzione.
È possibile chiamare I2CMaster_WriteThenRead per eseguire un'operazione combinata di scrittura e lettura in una singola transazione bus senza interruzioni da un'altra transazione.
Per l'interoperabilità con alcune interfacce POSIX, è possibile chiamare funzioni di lettura(2) e scrittura(2) POSIX per eseguire transazioni unidirezionale. È necessario chiamare I2CMaster_SetDefaultTargetAddress per impostare l'indirizzo del dispositivo subordinato prima di chiamare lettura(2) o scrittura(2).
È possibile chiamare queste funzioni per eseguire operazioni di scrittura a 0 byte per verificare la presenza di un dispositivo subordinato. Se un'operazione di lettura o scrittura non riesce, l'applicazione deve gestire il riutilizzo della richiesta.
Chiudere l'interfaccia I2C
Per chiudere l'interfaccia, è necessario chiamare la funzione POSIX standard close().
Supporto per MT3620
Questa sezione descrive le opzioni I2C che si applicano solo quando si esegue Azure Sphere su MT3620.
Le specifiche I2C per il chip MT3620 sono elencate nello stato di supporto di MT3620. Il manuale dell'utente della scheda di sviluppo MT3620 descrive il layout dei piedini e le funzioni per il wiring.
La cartella HardwareDefinitions nella directory di installazione di Microsoft Azure Sphere SDK contiene le definizioni per comuni schede di sviluppo, moduli e chip di Azure Sphere. Contiene file di intestazione e JSON che definiscono le interfacce master per MT3620, MT3620 RDB, insieme ad altri hardware MT3620. Il percorso predefinito per la cartella HardwareDefinitions è C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
in Windows e /opt/azurespheresdk/HardwareDefinitions
su Linux.
- Quando configuri la scheda di sviluppo MT3620, puoi utilizzare qualsiasi porta ISU come interfaccia master I2C. Quando si utilizza una porta ISU come interfaccia master I2C, non è possibile usare la stessa porta di un'interfaccia SPI o UART.
- Gli indirizzi di dispositivo subordinati a 10 bit non sono supportati nell'MT3620; sono supportati solo indirizzi a 7 bit.
- L'MT3620 supporta velocità di bus da 100 KHz, 400 KHz e 1 MHz, ma non di 3,4 MHz.
- Le letture I2C a 0 byte non sono supportate in MT3620.
- Quando si usa I2C in un'applicazione di alto livello, solo i pin SCL e SDA nel blocco periferico dell'ISU vengono utilizzati dalla periferica I2C e gli altri pin possono essere usati come GPIO dalla stessa applicazione di alto livello. Per un elenco dei pin ISU inutilizzati che possono essere riutilizzati per GPIO, vedere Periferiche di I/O .