Usare I2C nelle applicazioni di alto livelloUse I2C in high-level applications

Azure Sphere supporta I2C (Inter-Integrated Circuit) in modalità master.Azure Sphere supports Inter-Integrated Circuit (I2C) in master mode. I2C è un bus seriale che connette le periferiche a bassa velocità ai microcontroller.I2C is a serial bus that connects lower-speed peripherals to microcontrollers. Usa un modello multimaster/multisubordinato in cui un dispositivo master controlla un set di dispositivi subordinati.I2C uses a multi-master/multi-subordinate model where a master device controls a set of subordinate devices. Si usa in genere con periferiche che richiedono solo una semplice comunicazione leggera con un microcontroller, ad esempio per l'impostazione di controlli, interruttori di alimentazione e sensori.I2C is often used with peripherals that only require simple lightweight communication with a microcontroller, such as setting controls, power switches, and sensors.

Le applicazioni possono accedere alle periferiche tramite I2C effettuando una chiamata alle API I2C Applibs per eseguire operazioni su un'interfaccia master I2C.Applications can access peripherals through I2C by calling Applibs I2C APIs to perform operations on an I2C master interface. L'esempio LSM6DS3 I2C descrive come configurare l'hardware per I2C su un dispositivo MT3620 e usare I2C in un'applicazione.The LSM6DS3 I2C sample describes how to configure the hardware for I2C on an MT3620 device and use I2C in an application.

Requisiti di I2CI2C Requirements

Le applicazioni che usano I2C devono includere i file di intestazione appropriati per I2C e aggiungere le impostazioni di I2C al manifesto dell'applicazione.Applications that use I2C must include the appropriate header files for I2C, and add I2C settings to the application manifest.

Tutte le applicazioni devono impostare il relativo hardware di destinazione e includere il corrispondente file di intestazione di definizione dell'hardware.All applications must set their target hardware and include the corresponding hardware definition header file.

File di intestazioneHeader Files

 #define I2C_STRUCTS_VERSION 1
 #include <applibs/i2c.h>
 #include "path-to-your-target-hardware.h"

Dichiarare la definizione del preprocessore I2C_STRUCTS_VERSION prima di includere il file di intestazione.Declare the I2C_STRUCTS_VERSION preprocessor definition before including the header file. Specifica la versione dello struct usato dall'applicazione.This specifies the struct version that is used by the application.

Sostituire "path-to-your-target-hardware.h" con il percorso del file di intestazione dell'hardware in uso.Replace "path-to-your-target-hardware.h" with the path to the header file for your hardware.

Impostazioni del manifesto dell'applicazioneApplication manifest settings

Per usare le API I2C, è necessario aggiungere la funzionalità I2cMaster al manifesto dell'applicazione, quindi aggiungere ogni interfaccia master I2C alla funzionalità.To use the I2C APIs, you must add the I2cMaster capability to the application manifest, and then add each I2C master interface to the capability. In questo modo l'applicazione può accedere all'interfaccia.This enables the application to access the interface. Nell'argomento Manifesto dell'applicazione di Azure Sphere sono disponibili informazioni più dettagliate sul manifesto dell'applicazione.The Azure Sphere application manifest topic has more details about the application manifest.

Nel codice usare le costanti definite per l'hardware in uso per identificare le interfacce I2C.In your code, use the constants that are defined for your hardware to identify the I2C interfaces. Il compilatore convertirà questi valori in valori non elaborati quando si compila l'app.The compiler will translate these values to raw values when you build the app.

Ad esempio, di seguito è riportato un estratto di un manifesto dell'applicazione che ha come destinazione una scheda di sviluppo di riferimento (Reference Development Board, RDB) MT3620 e configura due interfacce master I2C:For example, here's an excerpt from an application manifest that targets an MT3620 reference development board (RDB) and configures two I2C master interfaces:

"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ],

Nell'estratto seguente viene illustrato come specificare le stesse interfacce master I2C in un'applicazione che ha come destinazione Avnet MT3620 Starter Kit:The following excerpt shows how to specify the same I2C master interfaces in an application that targets the Avnet MT3620 Starter Kit:

"I2cMaster": [ "$AVNET_MT3620_SK_ISU0_I2C", "$AVNET_MT3620_SK_ISU1_I2C" ]

Aprire un'interfaccia master I2COpen an I2C master interface

Prima di eseguire operazioni su un'interfaccia master I2C, è necessario aprirla effettuando una chiamata alla funzione I2CMaster_Open.Before you perform operations on an I2C master interface, you must open it by calling the I2CMaster_Open function.

Aggiornare le impostazioni per un'interfaccia master I2CUpdate the settings for an I2C master interface

Dopo aver aperto l'interfaccia master, è possibile cambiare le impostazioni:After you open the master interface, you can change the settings:

Eseguire operazioni di lettura e scrittura sull'interfaccia master I2CPerform read and write operations on the I2C master interface

Azure Sphere supporta diverse opzioni per eseguire operazioni di lettura e scrittura con I2C.Azure Sphere supports several options for performing read and write operations with I2C. Queste opzioni sono tutte operazioni sincrone bloccanti.These options are all blocking, synchronous operations.

Per le operazioni di lettura o scrittura unidirezionali, è possibile chiamare I2CMaster_Write o I2CMaster_Read.For one-way write or read operations you can call I2CMaster_Write or I2CMaster_Read. Questo è il modo più semplice per eseguire operazioni su un'interfaccia master I2C, perché viene specificata un'unica operazione e l'indirizzo del dispositivo subordinato è incluso nella chiamata alla funzione.This is the simplest way to perform operations on an I2C master interface because it only specifies one operation and it includes the address of the subordinate device in the function call.

Per eseguire un'operazione combinata di scrittura e quindi lettura in una singola transazione di bus senza interruzioni da altre transazioni, è possibile chiamare I2CMaster_WriteThenRead.You can call I2CMaster_WriteThenRead to perform a combined write then read operation in a single bus transaction without interruption from another transaction.

Per l'interoperabilità con alcune interfacce POSIX, è possibile chiamare le funzioni POSIX read(2) e write(2) per eseguire transazioni unidirezionali.For interoperability with some POSIX interfaces, you can call POSIX read(2) and write(2) functions to perform one-way transactions. Prima di chiamare read(2) o write(2), è necessario chiamare I2CMaster_SetDefaultTargetAddress per impostare l'indirizzo del dispositivo subordinato.You must call I2CMaster_SetDefaultTargetAddress to set the address of the subordinate device before you call read(2) or write(2).

È possibile chiamare queste funzioni per eseguire operazioni di scrittura di 0 byte e verificare la presenza di un dispositivo subordinato.You can call these functions to perform 0-byte write operations in order to verify the presence of a subordinate device. Se un'operazione di lettura o scrittura non riesce, l'applicazione deve gestire il rinvio della richiesta.If a read or write operation fails, your application must handle reissuing the request.

Chiudere l'interfaccia I2CClose the I2C interface

Per chiudere l'interfaccia, è necessario chiamare la funzione POSIX close() standard.To close the interface, you must call the standard POSIX function close().

Supporto di MT3620MT3620 support

Questa sezione descrive le opzioni di I2C applicabili solo quando si esegue Azure Sphere su MT3620.This section describes the I2C options that only apply when running Azure Sphere on the MT3620.

Le specifiche di I2C per il chip MT3620 sono indicate in MT3620: stato del supporto.The I2C specifications for the MT3620 chip are listed in MT3620 Support Status. Il manuale utente della scheda di sviluppo MT3620 descrive il layout dei pin e le funzioni per il cablaggio.The MT3620 development board user guide describes the pin layout and functions for wiring.

Il repository Azure Sphere Samples in GitHub contiene file di intestazione e JSON che definiscono le interfacce master I2C per ilThe Azure Sphere Samples repo on GitHub contains header and JSON files that define I2C master interfaces for the MT3620 RDB, insieme ad altri componenti hardware di MT3620.MT3620 RDB, along with other MT3620 hardware.

  • Quando si configura la scheda di sviluppo MT3620, è possibile usare qualsiasi porta ISU come interfaccia master I2C.When you configure the MT3620 dev board, you can use any ISU port as an I2C master interface. Se si usa una porta ISU come interfaccia master I2C, non è possibile usare la stessa porta come interfaccia SPI o UART.When you use an ISU port as an I2C master interface, you can't use the same port as an SPI or UART interface.
  • Gli indirizzi di 10 bit dei dispositivi subordinati non sono supportati su MT3620; sono supportati solo indirizzi di 7 bit.10-bit subordinate device addresses are not supported on the MT3620; only 7-bit addresses are supported.
  • MT3620 supporta velocità di bus a 100 KHz, 400 KHz e 1 MHz, ma non a 3,4 Mhz.The MT3620 supports 100 KHz, 400 KHz, and 1 MHz bus speeds, but not 3.4 Mhz.
  • Le letture di I2C di 0 byte non sono supportate su MT3620.0-byte I2C reads are not supported on the MT3620.