Compartir a través de


Uso de I2C en aplicaciones de alto nivel

Importante

Esta es la documentación de Azure Sphere (heredado). Azure Sphere (heredado) se retira el 27 de septiembre de 2027 y los usuarios deben migrar a Azure Sphere (integrado) en este momento. Use el selector de versiones situado encima de la TOC para ver la documentación de Azure Sphere (integrado).

Azure Sphere admite circuitos interintegrados (I2C) en modo maestro. I2C es un bus serie que conecta microcontroladores con periféricos de baja velocidad. I2C usa un modelo multimaestro/multisubordinado en el que un dispositivo maestro controla un conjunto de dispositivos subordinados. I2C suele usarse con periféricos que solo requieren una comunicación ligera con un microcontrolador, como los controles de configuración, interruptores de alimentación y sensores.

Para realizar operaciones en una interfaz maestra I2C, las aplicaciones pueden tener acceso a los periféricos mediante I2C con una llamada a las API de I2C en las bibliotecas de aplicaciones. En el ejemplo I2C LSM6DS3 se describe cómo configurar el hardware para I2C en un dispositivo MT3620 y cómo usar I2C en una aplicación.

Requisitos de I2C

Las aplicaciones que usan I2C deben incluir los archivos de encabezado adecuados para I2C y agregar la configuración de I2C al manifiesto de aplicación.

Todas las aplicaciones deben establecer su hardware de destino e incluir el archivo de encabezado de definición de hardware correspondiente.

Archivos de encabezado

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

Declare la definición de preprocesador I2C_STRUCTS_VERSION antes de incluir el archivo de encabezado. Especifica la versión de la estructura que utiliza la aplicación.

Reemplace "rutaDeAccesoAlHardwareDeDestino.h" por la ruta de acceso al archivo de encabezado de su hardware.

Configuración del manifiesto de aplicación

Para usar las API de I2C, debe agregar la funcionalidad I2cMaster al manifiesto de aplicación y, después, agregar cada interfaz maestra I2C a la funcionalidad. Esto permite que la aplicación tenga acceso a la interfaz. El manifiesto de aplicación de Azure Sphere tiene más detalles sobre el manifiesto de aplicación.

En el código, use las constantes que se definen para el hardware a fin de identificar las interfaces I2C. El compilador traducirá estos valores a valores sin formato al compilar la aplicación.

Por ejemplo, el siguiente es un extracto de un manifiesto de aplicación que tiene como destino una placa de desarrollo de referencia (RDB) MT3620 y configura dos interfaces maestras I2C:

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

En el siguiente extracto se muestra cómo especificar las mismas interfaces maestras I2C en una aplicación dirigida a Avnet MT3620 Starter Kit:

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

Apertura de una interfaz maestra I2C

Antes de realizar operaciones en una interfaz maestra I2C, debe abrirla mediante una llamada a la función I2CMaster_Open.

Actualización de la configuración de una interfaz maestra I2C

Después de abrir la interfaz principal, puede cambiar la configuración:

Operaciones de lectura y escritura en la interfaz maestra I2C

Azure Sphere admite varias opciones para realizar operaciones lectura y escritura con I2C. Estas opciones son todas operaciones sincrónicas de bloqueo.

Para las operaciones de lectura o escritura unidireccional puede llamar a I2CMaster_Write o I2CMaster_Read. Esta es la manera más sencilla de realizar operaciones en una interfaz maestra I2C, porque solo especifica una operación e incluye la dirección del dispositivo subordinado en la llamada de función.

Puede llamar a I2CMaster_WriteThenRead para realizar una operación combinada de escritura y después lectura en una sola transacción del bus sin interrupción de otra transacción.

Para la interoperabilidad con algunas interfaces POSIX, puede llamar a las funciones POSIX read(2) y write(2) para llevar a cabo las transacciones unidireccionales. Debe llamar a I2CMaster_SetDefaultTargetAddress para establecer la dirección del dispositivo subordinado antes de llamar a read(2) o write(2).

Puede llamar a estas funciones para llevar a cabo las operaciones de escritura de 0 bytes con el fin de comprobar la presencia de un dispositivo subordinado. Si se produce un error en una operación de lectura o escritura, la aplicación debe poder volver a emitir la solicitud.

Cierre de la interfaz I2C

Para cerrar la interfaz, debe llamar a la función POSIX estándar close().

Compatibilidad de MT3620

En esta sección describen las opciones de I2C que solo se aplican cuando Azure Sphere se ejecuta en la placa de desarrollo MT3620.

Las especificaciones de I2C para el chip MT3620 se enumeran en Estado de compatibilidad de MT3620. En la guía del usuario de la placa de desarrollo MT3620, se describe la distribución y la función de los pines realizar el cableado.

La carpeta HardwareDefinitions del directorio de instalación del SDK de Microsoft Azure Sphere contiene definiciones para paneles de desarrollo, módulos y chips comunes de Azure Sphere. Contiene archivos JSON y encabezados que definen las interfaces maestras para el RDB MT3620, MT3620, junto con otro hardware MT3620. La ubicación predeterminada de la carpeta HardwareDefinitions está C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions en Windows y /opt/azurespheresdk/HardwareDefinitions en Linux.

El repositorio de ejemplos de Azure Sphere en GitHub contiene archivos JSON y encabezados que definen interfaces maestras SPI para el chip MT3620 y RDB MT3620, junto con otros hardware MT3620.>

  • Al configurar la placa de desarrollo MT3620, puede usar cualquier puerto ISU como interfaz maestra I2C. Cuando se usa un puerto ISU como interfaz maestra I2C, no se puede usar el mismo puerto que la interfaz SPI o UART.
  • No se admiten direcciones de dispositivo subordinado de 10 bits en la placa MT3620; solo se admiten las direcciones de 7 bits.
  • La placa MT3620 admite velocidades de bus de 100 KHz, 400 KHz y 1 MHz, pero no 3,4 Mhz.
  • No se admiten lecturas de I2C de 0 bytes en el microcontrolador MT3620.
  • Cuando se usa I2C en una aplicación de alto nivel, solo las patillas SCL y SDA del bloque periférico ISU se usan en el periférico I2C y las demás patillas se pueden usar como GPIOs por la misma aplicación de alto nivel. Consulte Periféricos de E/S para obtener una lista de las patillas ISU sin usar que se pueden reutilizar para GPIO.