Partilhar via


Utilizar o I2C em aplicações de alto nível

O Azure Sphere suporta Inter-Integrated Circuit (I2C) no modo mestre. O I2C é um barramento em série que liga periféricos de baixa velocidade a microcontroladores. O I2C utiliza um modelo multimestre/multi-subordinado em que um dispositivo principal controla um conjunto de dispositivos subordinados. O I2C é frequentemente utilizado com periféricos que apenas requerem comunicação simples e simples com um microcontrolador, como controlos de definição, comutadores de energia e sensores.

As aplicações podem aceder a periféricos através do I2C ao chamar apIs I2C do Applibs para realizar operações numa interface mestra I2C. O exemplo LSM6DS3 I2C descreve como configurar o hardware para I2C num dispositivo MT3620 e utilizar o I2C numa aplicação.

Requisitos do I2C

As aplicações que utilizam o I2C têm de incluir os ficheiros de cabeçalho adequados para o I2C e adicionar definições de I2C ao manifesto da aplicação.

Todas as aplicações têm de definir o hardware de destino e incluir o ficheiro de cabeçalho de definição de hardware correspondente.

Ficheiros 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é-processamento antes de incluir o ficheiro de cabeçalho. Isto especifica a versão de estrutura que é utilizada pela aplicação.

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

Definições do manifesto da aplicação

Para utilizar as APIs I2C, tem de adicionar a I2cMaster capacidade ao manifesto da aplicação e, em seguida, adicionar cada interface mestra I2C à capacidade. Isto permite que a aplicação aceda à interface. O manifesto da aplicação do Azure Sphere tem mais detalhes sobre o manifesto da aplicação.

No código, utilize as constantes definidas para o seu hardware para identificar as interfaces I2C. O compilador irá traduzir estes valores para valores não processados quando criar a aplicação.

Por exemplo, eis um excerto de um manifesto de aplicação que visa um quadro de desenvolvimento de referência (RDB) MT3620 e configura duas interfaces mestras I2C:

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

O seguinte excerto mostra como especificar as mesmas interfaces mestras I2C numa aplicação destinada ao Kit de Iniciação Avnet MT3620:

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

Abrir uma interface mestra I2C

Antes de realizar operações numa interface mestra I2C, tem de a abrir ao chamar a função I2CMaster_Open .

Atualizar as definições de uma interface mestra I2C

Depois de abrir a interface mestra, pode alterar as definições:

Executar operações de leitura e escrita na interface mestra I2C

O Azure Sphere suporta várias opções para realizar operações de leitura e escrita com o I2C. Estas opções estão todas a bloquear operações síncronas.

Para operações unidirecionais de escrita ou leitura, pode chamar I2CMaster_Write ou I2CMaster_Read. Esta é a forma mais simples de realizar operações numa interface mestra I2C porque especifica apenas uma operação e inclui o endereço do dispositivo subordinado na chamada de função.

Pode chamar I2CMaster_WriteThenRead para executar uma operação de escrita combinada e, em seguida, ler numa única transação de barramento sem interrupção de outra transação.

Para interoperabilidade com algumas interfaces POSIX, pode chamar as funções POSIX read(2) e write(2) para realizar transações unidirecionais. Tem de chamar I2CMaster_SetDefaultTargetAddress para definir o endereço do dispositivo subordinado antes de chamar read(2) ou write(2).

Pode chamar estas funções para executar operações de escrita de 0 bytes para verificar a presença de um dispositivo subordinado. Se uma operação de leitura ou escrita falhar, a aplicação terá de processar a reedição do pedido.

Fechar a interface I2C

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

Suporte de MT3620

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

As especificações do I2C para o chip MT3620 estão listadas no Estado de Suporte do MT3620. O guia do utilizador do quadro de desenvolvimento MT3620 descreve o esquema de pinos e as funções para cablagem.

A pasta HardwareDefinitions no diretório de instalação do SDK do Microsoft Azure Sphere contém definições para quadros de desenvolvimento, módulos e chips comuns do Azure Sphere. Contém ficheiros de cabeçalho e JSON que definem as interfaces mestras para o RDB MT3620, MT3620, juntamente com outro hardware MT3620. A localização predefinida para a pasta HardwareDefinitions é C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions no Windows e /opt/azurespheresdk/HardwareDefinitions no Linux.

  • Quando configurar o quadro de programador MT3620, pode utilizar qualquer porta ISU como uma interface mestra I2C. Quando utiliza uma porta ISU como uma interface mestra I2C, não pode utilizar a mesma porta que uma interface SPI ou UART.
  • Os endereços de dispositivo subordinados de 10 bits não são suportados no MT3620; apenas são suportados endereços de 7 bits.
  • O MT3620 suporta velocidades de autocarro de 100 KHz, 400 KHz e 1 MHz, mas não 3,4 Mhz.
  • As leituras I2C de 0 bytes não são suportadas no MT3620.
  • Ao utilizar o I2C numa aplicação de alto nível, apenas os pinos SCL e SDA no bloco periférico ISU são utilizados pelo periférico I2C e os outros pinos podem ser utilizados como GPIOs pela mesma aplicação de alto nível. Veja Periféricos de E/ S para obter uma lista dos pinos ISU não utilizados que podem ser reutilizados para GPIO.