Compartilhar via


Usar SPI em aplicativos de alto nível

O Azure Sphere dá suporte à SPI (Interface Periférica Serial) no modo master. SPI é uma interface serial usada para comunicação entre periféricos e circuitos integrados. O SPI usa um modelo master/subordinado em que um dispositivo master controla um conjunto de dispositivos subordinados. Ao contrário do I2C, o SPI pode ser usado com periféricos de maior velocidade mais complexos.

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

Selecionar chip

O chip select gerencia a conexão entre uma interface master SPI e um conjunto de dispositivos subordinados; e permite que a interface master envie e receba dados para cada dispositivo subordinado de forma independente. O Azure Sphere dá suporte às configurações active-low e active-high para a seleção de chip, com active-low como a configuração padrão. Cada interface master SPI pode ser usada exclusivamente por um aplicativo. O aplicativo deve abrir a interface spi master e identificar cada dispositivo subordinado conectado antes de executar operações de leitura e gravação na interface. As operações de leitura e gravação do SPI no Azure Sphere usam APIs de bloqueio.

Requisitos de SPI

Os aplicativos que usam SPI devem incluir os arquivos de cabeçalho apropriados para SPI e adicionar configurações de SPI 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 SPI_STRUCTS_VERSION 1
 #include <applibs/spi.h>
 #include "path-to-your-target-hardware.h"

Declare a definição do SPI_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 SPI, você deve adicionar o SpiMaster recurso ao manifesto do aplicativo e, em seguida, adicionar cada controlador spi master ao recurso. Isso permite que o aplicativo acesse o controlador. 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 master SPI. 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 SPI:

"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ],

O trecho a seguir mostra como especificar as mesmas interfaces de master SPI em um aplicativo direcionado ao Kit inicial do Avnet MT3620:

"SpiMaster": [ "$AVNET_MT3620_SK_ISU0_SPI", "$AVNET_MT3620_SK_ISU1_SPI" ]

Configurar o chip selecione e abra uma interface de master SPI

Antes de executar operações em uma interface master SPI, você deve configurar a seleção do chip e abrir a interface. Para configurar a seleção do chip, chame a função SPIMaster_InitConfig para inicializar o struct SPIMaster_Config Struct . Depois de inicializar SPIMaster_Config, atualize o csPolarity campo com o SPI_ChipSelectPolarity_ActiveLow.. /reference/applibs/ity_Activ.. /reference/applibs/rence/applibs/applibs-spi/enum-spi-chipselectpolarity.md).

Para abrir uma interface master SPI, chame o SPIMaster_Openfunction. Isso aplicará as configurações padrão à interface e aplicará as configurações de seleção do chip:

  • SPI_Mode_0 para a ordem de bit spi
  • SPI_BitOrder_MsbFirst para o modo de comunicação

Atualizar as configurações de uma interface master SPI

Após a inicialização, você pode alterar as configurações da interface:

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

O Azure Sphere dá suporte a várias opções para executar operações de leitura e gravação com SPI. Para operações de leitura ou gravação unidirecionais e para manter a interoperabilidade com algumas APIs POSIX, você pode chamar as funções POSIX read(2) e write(2).

Você pode chamar a função SPIMaster_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.

Chame a função SPIMaster_TransferSequential quando precisar de um controle mais preciso sobre o tempo entre operações de leitura ou gravação. Isso permite que você execute várias operações de leitura e gravação entre um par de estados habilitados e desabilitados do CS.

Fechar a interface SPI

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

Suporte a MT3620

Esta seção descreve as opções de SPI que só se aplicam ao executar o Azure Sphere no quadro de desenvolvimento do MT3620.

As especificações de SPI para o 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 spi master. Você pode se conectar até dois dispositivos subordinados a cada ISU. Quando você usa uma porta ISU como uma interface master SPI, não pode usar a mesma porta que uma interface I2C ou UART.
  • O MT3620 dá suporte a transações SPI de até 40 MHz.
  • O MT3620 não dá suporte a operações simultâneas de SPI de leitura e gravação bidirecional (full-duplex) em uma única transação de barramento.