Dela via


Använda SPI i högnivåprogram

Viktigt!

Det här är dokumentationen om Azure Sphere (Legacy). Azure Sphere (Legacy) upphör den 27 september 2027 och användarna måste migrera till Azure Sphere (integrerad) vid den här tiden. Använd versionsväljaren ovanför TOC för att visa dokumentationen om Azure Sphere (integrerad).

Azure Sphere stöder SPI (Serial Peripheral Interface) i huvudläge. SPI är ett seriellt gränssnitt som används för kommunikation mellan kringutrustning och integrerade kretsar. SPI använder en huvud-/underordnad modell där en huvudenhet styr en uppsättning underordnade enheter. Till skillnad från I2C kan SPI användas med mer komplex kringutrustning med högre hastighet.

Program kan komma åt kringutrustning via SPI genom att anropa Api:er för Applibs SPI för att utföra åtgärder i ett SPI-huvudgränssnitt. I LSM6DS3 SPI-exempel beskrivs hur du konfigurerar maskinvaran för SPI på en MT3620-enhet och använder SPI i ett program.

Markera chip

Chip select hanterar anslutningen mellan ett SPI-huvudgränssnitt och en uppsättning underordnade enheter. och gör att huvudgränssnittet kan skicka och ta emot data till varje underordnad enhet oberoende av varandra. Azure Sphere har stöd för inställningarna active-low och active-high för chip select, med active-low som standardinställning. Varje SPI-huvudgränssnitt kan endast användas av ett program. Programmet måste öppna SPI-huvudgränssnittet och identifiera varje ansluten underordnad enhet innan läs- och skrivåtgärder utförs i gränssnittet. SPI:s läs- och skrivåtgärder på Azure Sphere använder blockerande API:er.

SPI-krav

Program som använder SPI måste innehålla lämpliga huvudfiler för SPI och lägga till SPI-inställningar i programmanifestet.

Alla program måste ange sin målmaskinvara och inkludera motsvarande rubrikfil för maskinvarudefinition.

Rubrikfiler

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

Deklarera förprocessordefinitionen SPI_STRUCTS_VERSION innan du inkluderar huvudfilen. Detta anger den structversion som används av programmet.

Ersätt "path-to-your-target-hardware.h" med sökvägen till huvudfilen för maskinvaran.

Inställningar för programmanifest

Om du vill använda SPI-API:erna måste du lägga till SpiMaster funktionen i programmanifestet och sedan lägga till varje SPI-huvudstyrenhet i funktionen. Detta gör att programmet kan komma åt kontrollanten. Azure Sphere-programmanifestet innehåller mer information om programmanifestet.

I koden använder du de konstanter som har definierats för maskinvaran för att identifiera SPI-huvudgränssnitten. Kompilatorn översätter dessa värden till råvärden när du skapar appen.

Här är till exempel ett utdrag från ett programmanifest som riktar sig mot en MT3620-referensutvecklingstavla (RDB) och konfigurerar två SPI-huvudgränssnitt:

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

Följande utdrag visar hur du anger samma SPI-huvudgränssnitt i ett program som riktar sig till Avnet MT3620 Starter Kit:

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

Konfigurera chipval och öppna ett SPI-huvudgränssnitt

Innan du utför åtgärder i ett SPI-huvudgränssnitt måste du konfigurera chipmarkeringen och öppna gränssnittet. Om du vill konfigurera chipval anropar du funktionen SPIMaster_InitConfig för att initiera SPIMaster_Config struct. När du har initierat SPIMaster_Config uppdaterar csPolarity du fältet med inställningen SPI_ChipSelectPolarity_ActiveLow eller SPI_ChipSelectPolarity_ActiveHigh.

Om du vill öppna ett SPI-huvudgränssnitt anropar du funktionen SPIMaster_Open . Detta tillämpar standardinställningarna på gränssnittet och tillämpar inställningarna för chipval:

  • SPI_Mode_0 för SPI-bitordningen
  • SPI_BitOrder_MsbFirst för kommunikationsläget

Uppdatera inställningarna för ett SPI-huvudgränssnitt

Efter initieringen kan du ändra inställningarna för gränssnittet:

Utföra läs- och skrivåtgärder i SPI-huvudgränssnittet

Azure Sphere har stöd för flera alternativ för att utföra läs- och skrivåtgärder med SPI. För enkelriktade läs- eller skrivåtgärder och för att upprätthålla samverkan med vissa POSIX-API:er kan du anropa funktionerna POSIX read(2) och write(2).

Du kan anropa funktionen SPIMaster_WriteThenRead för att utföra en kombinerad skrivåtgärd och sedan läsa i en enda busstransaktion utan avbrott från en annan transaktion.

Anropa funktionen SPIMaster_TransferSequential när du behöver mer exakt kontroll över tidsinställningen mellan läs- eller skrivåtgärder. På så sätt kan du utföra flera läs- och skrivåtgärder mellan ett par cs-aktivera och inaktivera tillstånd.

Stäng SPI-gränssnittet

Om du vill stänga gränssnittet anropar du POSIX-standardfunktionen close().

MT3620-stöd

I det här avsnittet beskrivs DE SPI-alternativ som endast gäller när du kör Azure Sphere på MT3620-utvecklingskortet.

SPI-specifikationerna för MT3620 visas i supportstatus för MT3620. Användarhandboken för MT3620-utvecklingskortet beskriver pin-layouten och funktionerna för kabeldragning.

Mappen HardwareDefinitions i installationskatalogen för Microsoft Azure Sphere SDK innehåller definitioner för vanliga Azure Sphere-utvecklingskort, moduler och chips. Den innehåller huvud- och JSON-filer som definierar huvudgränssnitten för MT3620, MT3620 RDB, tillsammans med annan MT3620-maskinvara. Standardplatsen för mappen HardwareDefinitions finns C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions i Windows och /opt/azurespheresdk/HardwareDefinitions i Linux.

Azure Sphere Samples-lagringsplatsen på GitHub innehåller huvud- och JSON-filer som definierar SPI-huvudgränssnitt för MT3620-chipet och MT3620 RDB, tillsammans med annan MT3620-maskinvara.-->

  • När du konfigurerar MT3620 dev board kan du använda valfri ISU-port som ett SPI-huvudgränssnitt. Du kan ansluta upp till två underordnade enheter till varje ISU. När du använder en ISU-port som ett SPI-huvudgränssnitt kan du inte använda samma port som ett I2C- eller UART-gränssnitt.
  • MT3620 stöder SPI-transaktioner som är upp till 40 MHz.
  • MT3620 stöder inte samtidiga dubbelriktade SPI-åtgärder (fullständig duplex) i en enda busstransaktion.