Partilhar via


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

O Azure Sphere suporta a Interface de Periférico de Série (SPI) no modo mestre. O SPI é uma interface de série utilizada para a comunicação entre periféricos e circuitos integrados. O SPI utiliza um modelo principal/subordinado em que um dispositivo principal controla um conjunto de dispositivos subordinados. Ao contrário do I2C, o SPI pode ser utilizado com periféricos de velocidade mais complexas.

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

Seleção de chip

A seleção de chip gere a ligação entre uma interface mestre SPI e um conjunto de dispositivos subordinados; e permite que a interface mestra envie e receba dados para cada dispositivo subordinado de forma independente. O Azure Sphere suporta as definições active-low e active-high para seleção de chip, com active-low como predefinição. Cada interface mestra SPI pode ser utilizada exclusivamente por uma aplicação. A aplicação tem de abrir a interface mestra SPI e identificar cada dispositivo subordinado ligado antes de realizar operações de leitura e escrita na interface. As operações de leitura e escrita spi no Azure Sphere utilizam APIs de bloqueio.

Requisitos de SPI

As aplicações que utilizam o SPI têm de incluir os ficheiros de cabeçalho adequados para SPI e adicionar definições SPI 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 SPI_STRUCTS_VERSION 1
 #include <applibs/spi.h>
 #include "path-to-your-target-hardware.h"

Declare a definição do SPI_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 SPI, tem de adicionar a SpiMaster capacidade ao manifesto da aplicação e, em seguida, adicionar cada controlador principal SPI à capacidade. Isto permite que a aplicação aceda ao controlador. O manifesto da aplicação do Azure Sphere tem mais detalhes sobre o manifesto da aplicação.

No seu código, utilize as constantes definidas para o seu hardware para identificar as interfaces mestras SPI. 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 SPI:

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

O seguinte excerto mostra como especificar as mesmas interfaces mestras SPI numa aplicação que tem como destino o Avnet MT3620 Starter Kit:

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

Configurar a seleção de chip e abrir uma interface mestra SPI

Antes de realizar operações numa interface mestra SPI, tem de configurar a seleção do chip e abrir a interface. Para configurar a seleção de chip, chame a função SPIMaster_InitConfig para inicializar a estrutura 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 mestra SPI, chame o SPIMaster_Openfunction. Isto aplicará as predefinições à interface e aplicará as definições de seleção de chip:

  • SPI_Mode_0 para a ordem de bits SPI
  • SPI_BitOrder_MsbFirst para o modo de comunicação

Atualizar as definições de uma interface mestra SPI

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

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

O Azure Sphere suporta várias opções para realizar operações de leitura e escrita com o SPI. Para operações unidirecionais de leitura ou escrita e para manter a interoperabilidade com algumas APIs POSIX, pode chamar as funções POSIX read(2) e write(2).

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

Chame a função SPIMaster_TransferSequential quando precisar de um controlo mais preciso sobre a temporização entre operações de leitura ou escrita. Isto permite-lhe realizar várias operações de leitura e escrita entre um par de estados de ativação e desativação do CS.

Fechar a interface SPI

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

Suporte de MT3620

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

As especificações SPI para o 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 SPI. Pode ligar até dois dispositivos subordinados a cada ISU. Quando utiliza uma porta ISU como uma interface mestra SPI, não pode utilizar a mesma porta que uma interface I2C ou UART.
  • O MT3620 suporta transações SPI que têm até 40 MHz.
  • O MT3620 não suporta operações de SPI de leitura e escrita bidirecionais simultâneas (full-duplex) numa única transação de barramento.