Share via


SPI gebruiken in toepassingen op hoog niveau

Azure Sphere biedt ondersteuning voor Serial Peripheral Interface (SPI) in de hoofdmodus. SPI is een seriële interface die wordt gebruikt voor communicatie tussen randapparatuur en geïntegreerde circuits. SPI maakt gebruik van een hoofd-/ondergeschikt model waarbij een hoofdapparaat een set onderliggende apparaten beheert. In tegenstelling tot I2C kan SPI worden gebruikt met complexere randapparatuur met hogere snelheid.

Toepassingen hebben toegang tot randapparatuur via SPI door Applibs SPI-API's aan te roepen om bewerkingen uit te voeren op een SPI-hoofdinterface. In het LSM6DS3 SPI-voorbeeld wordt beschreven hoe u de hardware voor SPI op een MT3620-apparaat configureert en SPI gebruikt in een toepassing.

Chip selecteren

Chip select beheert de verbinding tussen een SPI-masterinterface en een set onderliggende apparaten; en stelt de hoofdinterface in staat om onafhankelijk van elkaar gegevens te verzenden en te ontvangen naar elk onderliggende apparaat. Azure Sphere ondersteunt de instellingen actief-laag en actief-hoog voor chipselectie, met actief-laag als standaardinstelling. Elke SPI-masterinterface kan uitsluitend door één toepassing worden gebruikt. De toepassing moet de SPI-hoofdinterface openen en elk verbonden onderliggende apparaat identificeren voordat lees- en schrijfbewerkingen op de interface worden uitgevoerd. De SPI-lees- en schrijfbewerkingen op Azure Sphere maken gebruik van blokkerende API's.

SPI-vereisten

Toepassingen die gebruikmaken van SPI moeten de juiste headerbestanden voor SPI bevatten en SPI-instellingen toevoegen aan het toepassingsmanifest.

Alle toepassingen moeten hun doelhardware instellen en het bijbehorende headerbestand voor de hardwaredefinitie bevatten.

Koptekstbestanden

 #define SPI_STRUCTS_VERSION 1
 #include <applibs/spi.h>
 #include "path-to-your-target-hardware.h"

Declareer de SPI_STRUCTS_VERSION preprocessordefinitie voordat u het headerbestand opgeeft. Hiermee geeft u de struct-versie op die wordt gebruikt door de toepassing.

Vervang path-to-your-target-hardware.h door het pad naar het headerbestand voor uw hardware.

Toepassingsmanifestinstellingen

Als u de SPI-API's wilt gebruiken, moet u de SpiMaster mogelijkheid toevoegen aan het toepassingsmanifest en vervolgens elke SPI-mastercontroller toevoegen aan de mogelijkheid. Hierdoor heeft de toepassing toegang tot de controller. Het Azure Sphere-toepassingsmanifest bevat meer informatie over het toepassingsmanifest.

Gebruik in uw code de constanten die zijn gedefinieerd voor uw hardware om de SPI-masterinterfaces te identificeren. De compiler vertaalt deze waarden naar onbewerkte waarden wanneer u de app bouwt.

Hier volgt bijvoorbeeld een fragment uit een toepassingsmanifest dat is gericht op een MT3620-referentieontwikkelingsbord (RDB) en twee SPI-masterinterfaces configureert:

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

In het volgende fragment ziet u hoe u dezelfde SPI-masterinterfaces opgeeft in een toepassing die is gericht op de Avnet MT3620 Starter Kit:

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

Chip selecteren configureren en een SPI-masterinterface openen

Voordat u bewerkingen uitvoert op een SPI-hoofdinterface, moet u chip selecteren en de interface openen configureren. Als u chipselectie wilt configureren, roept u de functie SPIMaster_InitConfig aan om de SPIMaster_Config-struct te initialiseren. Nadat u SPIMaster_Config hebt geïnitialiseerd, werkt u het csPolarity veld bij met de instelling SPI_ChipSelectPolarity_ActiveLow of SPI_ChipSelectPolarity_ActiveHigh.

Als u een SPI-hoofdinterface wilt openen, roept u de functie SPIMaster_Open aan. Hiermee worden de standaardinstellingen toegepast op de interface en past u de instellingen van uw chipselectie toe:

  • SPI_Mode_0 voor de SPI-bitvolgorde
  • SPI_BitOrder_MsbFirst voor de communicatiemodus

De instellingen voor een SPI-hoofdinterface bijwerken

Na de initialisatie kunt u de instellingen voor de interface wijzigen:

Lees- en schrijfbewerkingen uitvoeren op de SPI-hoofdinterface

Azure Sphere ondersteunt verschillende opties voor het uitvoeren van lees- en schrijfbewerkingen met SPI. Voor lees- of schrijfbewerkingen in één richting en om de interoperabiliteit met sommige POSIX-API's te behouden, kunt u de functies POSIX read(2) en write(2) aanroepen.

U kunt de functie SPIMaster_WriteThenRead aanroepen om een gecombineerde schrijf- en leesbewerking uit te voeren in één bustransactie zonder onderbreking van een andere transactie.

Roep de SPIMaster_TransferSequential-functie aan wanneer u nauwkeurigere controle nodig hebt over de tijdsinstelling tussen lees- en schrijfbewerkingen. Hiermee kunt u meerdere lees- en schrijfbewerkingen uitvoeren tussen een paar CS-statussen in- en uitschakelen.

De SPI-interface sluiten

Als u de interface wilt sluiten, roept u de standaard POSIX-functie close() aan.

MT3620-ondersteuning

In deze sectie worden de SPI-opties beschreven die alleen van toepassing zijn bij het uitvoeren van Azure Sphere op het MT3620-ontwikkelbord.

De SPI-specificaties voor de MT3620 worden vermeld in MT3620-ondersteuningsstatus. De gebruikershandleiding van het MT3620-ontwikkelbord beschrijft de speldindeling en -functies voor bedrading.

De map HardwareDefinitions in de installatiemap van de Microsoft Azure Sphere SDK bevat definities voor algemene Azure Sphere-ontwikkelborden, -modules en -chips. Het bevat header- en JSON-bestanden die de hoofdinterfaces definiëren voor de MT3620, MT3620 RDB, samen met andere MT3620-hardware. De standaardlocatie voor de map HardwareDefinitions is C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions in Windows en /opt/azurespheresdk/HardwareDefinitions op Linux.

De Azure Sphere Samples-opslagplaats op GitHub bevat header- en JSON-bestanden die SPI-masterinterfaces definiëren voor de MT3620-chip en MT3620 RDB, samen met andere MT3620-hardware.-->

  • Wanneer u het MT3620-ontwikkelbord configureert, kunt u elke ISU-poort gebruiken als spi-masterinterface. U kunt maximaal twee onderliggende apparaten verbinden met elke ISU. Wanneer u een ISU-poort gebruikt als spi-hoofdinterface, kunt u niet dezelfde poort gebruiken als een I2C- of UART-interface.
  • De MT3620 ondersteunt SPI-transacties tot 40 MHz.
  • De MT3620 biedt geen ondersteuning voor gelijktijdige bidirectionele lees- en schrijfbewerkingen (full-duplex) spi-bewerkingen binnen één bustransactie.