Usar I2C em aplicativos de alto nível
Importante
Esta é a documentação do Azure Sphere (herdado). O Azure Sphere (herdado) será desativado em 27 de setembro de 2027 e os usuários devem migrar para o Azure Sphere (integrado) até esse momento. Use o seletor de versão localizado acima do sumário para exibir a documentação do Azure Sphere (Integrado).
O Azure Sphere oferece suporte ao I2C (Circuito Interintegrado)no modo mestre. O I2C é um barramento serial que conecta a periféricos de velocidade mais baixa a microcontroladores. Ele usa um modelo de vários mestres/subordinado em que um dispositivo mestre controla um conjunto de dispositivos subordinados. O I2C é frequentemente usado com periféricos que exigem apenas comunicação leve e 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 do I2C do Applibs para executar operações em uma interface mestre do I2C. O exemplo do I2C LSM6DS3 descreve como configurar o hardware para o I2C em um dispositivo MT3620 e como usar o I2C em um aplicativo.
Requisitos do I2C
Aplicativos que usam o I2C devem incluir os arquivos de cabeçalho apropriados para I2C e adicionar as configurações de I2C ao manifesto do aplicativo.
Todos os aplicativos devem definir hardware de destino deles e incluir o arquivo de cabeçalho da 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 de pré-processador I2C_STRUCTS_VERSION
antes de incluir o arquivo de cabeçalho. Isso especifica a versão da estrutura que é usada pelo aplicativo.
Substitua "path-to-your-target-hardware.h" pelo caminho para o arquivo de cabeçalho do seu hardware.
Configurações do manifesto do aplicativo
Para usar as APIs do I2C, você deve adicionar o recurso I2cMaster
ao manifesto do aplicativo e, em seguida, adicionar cada interface mestre do I2C ao recurso. Isso permite que o aplicativo acesse a interface. O manifesto do aplicativo do 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 do I2C. O compilador converterá esses valores em valores brutos quando você criar o aplicativo.
Por exemplo, veja um trecho de um manifesto do aplicativo que direciona uma RDB (placa de desenvolvimento de referência) do MT3620 e configura duas interfaces mestras do I2C:
"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ],
O trecho a seguir mostra como especificar as mesmas interfaces mestras do I2C em um aplicativo que direciona o Kit de Início do Avnet MT3620:
"I2cMaster": [ "$AVNET_MT3620_SK_ISU0_I2C", "$AVNET_MT3620_SK_ISU1_I2C" ]
Abrir uma interface mestre do I2C
Antes de executar operações em uma interface mestre do I2C, você deve abri-la chamando a função I2CMaster_Open.
Atualizar as configurações para uma interface mestre do I2C
Depois de abrir a interface mestre, você poderá alterar as configurações:
- Para alterar a velocidade do barramento para operações na interface mestre, chame I2CMaster_SetBusSpeed
- Para alterar o tempo limite para operações, chame I2CMaster_SetTimeout
Executar operações de leitura e gravação na interface mestre do I2C
O Azure Sphere dá suporte a várias opções para executar operações de leitura e gravação com o I2C. Essas opções são todas operações de bloqueio síncronas.
Para operações de leitura ou gravação unidirecionais, você pode chamar I2CMaster_Write ou I2CMaster_Read. Essa é a maneira mais simples de executar operações em uma interface mestre do I2C, pois este só especifica 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 combinada de gravação e de leitura em uma transação de barramento único sem interrupções de outra transação.
Para obter interoperabilidade com algumas interfaces do POSIX, você pode chamar as funções read(2) e write(2) do POSIX para executar transações unidirecionais. Você deve chamar I2CMaster_SetDefaultTargetAddress para definir o endereço do dispositivo subordinado antes de chamar read(2) ou write(2).
Você pode chamar essas funções para executar operações de gravação de 0 byte a fim de verificar a presença de um dispositivo subordinado. Se uma operação de leitura ou gravação falhar, seu aplicativo deverá emitir novamente a solicitação.
Fechar a interface do I2C
Para fechar a interface, chame a função close() padrão do POSIX.
Suporte à placa de desenvolvimento MT3620
Esta seção descreve as opções do I2C aplicáveis somente quando o Azure Sphere é executado na MT3620.
As especificações de I2C do chip do MT3620 estão listadas no Status de Suporte do MT3620. O Guia do usuário da placa de desenvolvimento MT3620 descreve o layout e as funções do pino para fiação.
A pasta HardwareDefinitions no diretório de instalação do SDK do Microsoft Azure Sphere contém definições para placas, módulos e chips de desenvolvimento comuns do Azure Sphere. Ele contém arquivos de cabeçalho e JSON que definem as interfaces mestras para o MT3620, MT3620 RDB, juntamente com outro hardware MT3620. O local padrão para a pasta HardwareDefinitions é C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
no Windows e /opt/azurespheresdk/HardwareDefinitions
no Linux.
O repositório de Exemplos do Azure Sphere no GitHub contém arquivos de cabeçalho e JSON que definem interfaces mestras SPI para o chip MT3620 e o RDB MT3620, juntamente com outro hardware MT3620.-->
- Quando você configura a placa de desenvolvimento MT3620, pode usar qualquer porta ISU como uma interface mestre do I2C. Quando você usa uma porta ISU como uma interface mestre do I2C, não é possível usar a mesma porta como uma interface da SPI ou do UART.
- Não há suporte para endereços de dispositivos subordinados de 10 bits no MT3620; apenas endereços de 7 bits são suportados.
- O MT3620 dá suporte a velocidades de barramento de 100 KHz, 400 KHz e 1 MHz, mas não de 3,4 Mhz.
- Não há suporte para leituras do I2C de 0 byte na MT3620.
- Ao usar I2C em um aplicativo de alto nível, somente 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 utilizados que podem ser reutilizados para GPIO.