Share via


Usar I2C em aplicativos de alto nível

O Azure Sphere dá suporte a Inter-Integrated Circuit (I2C) no modo master. O I2C é um barramento serial que conecta periféricos de menor velocidade a microcontroladores. O I2C usa um modelo multi-master/multi-subordinado em que um dispositivo master controla um conjunto de dispositivos subordinados. O I2C geralmente é usado com periféricos que exigem apenas comunicação leve simples com um microcontrolador, como controles de configuração, comutadores de energia e sensores.

Os aplicativos podem acessar periféricos por meio do I2C chamando APIs I2C do Applibs para executar operações em uma interface I2C master. O exemplo LSM6DS3 I2C descreve como configurar o hardware para I2C em um dispositivo MT3620 e usar o I2C em um aplicativo.

Requisitos I2C

Os aplicativos que usam I2C devem incluir os arquivos de cabeçalho apropriados para I2C e adicionar configurações de I2C ao manifesto do aplicativo.

Todos os aplicativos devem definir seu hardware de destino e incluir o arquivo de cabeçalho de definição de hardware correspondente.

Arquivos de Cabeçalho

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

Declare a definição do I2C_STRUCTS_VERSION pré-processador antes de incluir o arquivo de cabeçalho. Isso especifica a versão de struct usada pelo aplicativo.

Substitua "path-to-your-target-hardware.h" pelo caminho para o arquivo de cabeçalho do hardware.

Configurações do manifesto do aplicativo

Para usar as APIs I2C, você deve adicionar o I2cMaster recurso ao manifesto do aplicativo e adicionar cada interface I2C master ao recurso. Isso permite que o aplicativo acesse a interface. O manifesto do aplicativo Azure Sphere tem mais detalhes sobre o manifesto do aplicativo.

Em seu código, use as constantes definidas para seu hardware para identificar as interfaces I2C. O compilador traduzirá esses valores em valores brutos ao compilar o aplicativo.

Por exemplo, aqui está um trecho de um manifesto de aplicativo que tem como destino um RDB (conselho de desenvolvimento de referência) mt3620 e configura duas interfaces de master I2C:

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

O trecho a seguir mostra como especificar as mesmas interfaces de master I2C em um aplicativo que tem como destino o Kit inicial do Avnet MT3620:

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

Abrir uma interface de master I2C

Antes de executar operações em uma interface de master I2C, você deve abri-la chamando a função I2CMaster_Open.

Atualizar as configurações de uma interface de master I2C

Depois de abrir a interface master, você poderá alterar as configurações:

Executar operações de leitura e gravação na interface do master I2C

O Azure Sphere dá suporte a várias opções para executar operações de leitura e gravação com I2C. Todas essas opções são operações de bloqueio e síncronas.

Para operações de gravação ou leitura unidirecional, você pode chamar I2CMaster_Write ou I2CMaster_Read. Essa é a maneira mais simples de executar operações em uma interface de master I2C porque especifica apenas uma operação e inclui o endereço do dispositivo subordinado na chamada de função.

Você pode chamar I2CMaster_WriteThenRead para executar uma operação de gravação combinada e ler em uma única transação de barramento sem interrupção de outra transação.

Para interoperabilidade com algumas interfaces POSIX, você pode chamar funções POSIX read(2) e write(2) para executar transações unidirecionais. Você deve chamar I2CMaster_SetDefaultTargetAddress para definir o endereço do dispositivo subordinado antes de chamar leitura(2) ou gravação(2).

Você pode chamar essas funções para executar operações de gravação de 0 bytes para verificar a presença de um dispositivo subordinado. Se uma operação de leitura ou gravação falhar, seu aplicativo deverá lidar com a reutilização da solicitação.

Fechar a interface I2C

Para fechar a interface, você deve chamar a função POSIX padrão de close().

Suporte a MT3620

Esta seção descreve as opções I2C que só se aplicam ao executar o Azure Sphere no MT3620.

As especificações de I2C para o chip MT3620 estão listadas no Status de Suporte do MT3620. O guia de usuário do painel de desenvolvimento MT3620 descreve o layout do pino e as funções para a fiação.

A pasta HardwareDefinitions no diretório de instalação do SDK do Microsoft Azure Sphere contém definições para placas de desenvolvimento comuns do Azure Sphere, módulos e chips. Ele contém arquivos de cabeçalho e JSON que definem as interfaces master para o MT3620, MT3620 RDB, juntamente com outros hardwares MT3620. O local padrão da pasta HardwareDefinitions está C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions no Windows e /opt/azurespheresdk/HardwareDefinitions no Linux.

  • Ao configurar a placa de desenvolvimento MT3620, você pode usar qualquer porta ISU como uma interface I2C master. Quando você usa uma porta ISU como uma interface de master I2C, não é possível usar a mesma porta que uma interface SPI ou UART.
  • Não há suporte para endereços de dispositivo subordinados de 10 bits no MT3620; há suporte para apenas endereços de 7 bits.
  • O MT3620 dá suporte a velocidades de ônibus de 100 KHz, 400 KHz e 1 MHz, mas não 3,4 Mhz.
  • Não há suporte para leituras I2C de 0 bytes no MT3620.
  • Ao usar o I2C em um aplicativo de alto nível, apenas os pinos SCL e SDA no bloco periférico ISU são usados pelo periférico I2C e os outros pinos podem ser usados como GPIOs pelo mesmo aplicativo de alto nível. Consulte periféricos de E/S para obter uma lista dos pinos isu não usados que podem ser reutilizados para GPIO.