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 LSM6DS3 exemplo 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:
- Para alterar a velocidade do barramento para operações na interface master, chame I2CMaster_SetBusSpeed
- Para alterar o tempo limite para operações, chame I2CMaster_SetTimeout
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.
O repositório Exemplos do Azure Sphere no GitHub contém arquivos de cabeçalho e JSON que definem interfaces de master SPI para o chip MT3620 e o RDB MT3620, juntamente com outros hardwares MT3620.-->
- 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.