Dela via


Använda SPI i program på hög nivå

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. I motsats till I2C kan SPI användas med mer komplex kringutrustning med högre hastighet.

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

Chip välj

Chip select hanterar anslutningen mellan ett SPI-huvudgränssnitt och en uppsättning underordnade enheter. och gör det möjligt för huvudgränssnittet att 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 chipmarkering, 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 du utför läs- och skrivåtgärder i gränssnittet. Spi-läs- och skrivåtgärder på Azure Sphere använder blockering av 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 målmaskinvara och inkludera motsvarande rubrikfil för maskinvarudefinition.

Sidhuvudfiler

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

Deklarera förprocessordefinitionen SPI_STRUCTS_VERSION innan rubrikfilen inkluderas. Detta anger den struct-version 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 kontrollen. Azure Sphere-programmanifestet innehåller mer information om programmanifestet.

Använd konstanterna som har definierats för maskinvaran i koden för att identifiera SPI-huvudgränssnitten. Kompilatorn översätter dessa värden till raw-värden när du skapar appen.

Här är till exempel ett utdrag från ett programmanifest som riktar in sig på 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 chipmarkering och öppna ett SPI-huvudgränssnitt

Innan du utför åtgärder i ett SPI-huvudgränssnitt måste du konfigurera kretsmarkering och öppna gränssnittet. Om du vill konfigurera kretsval 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 . Då används standardinställningarna för gränssnittet och dina kretsvalsinställningar tillämpas:

  • 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 på 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 interoperabilitet med vissa POSIX-API:er kan du anropa posix-funktionerna read(2) och write(2).

Du kan anropa funktionen SPIMaster_WriteThenRead för att utföra en kombinerad skrivning och sedan läsa åtgärden 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- och 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änga SPI-gränssnittet

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

MT3620-support

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

SPI-specifikationerna för MT3620 anges i supportstatus för MT3620. Användarhandboken för utvecklingstavlan för MT3620 beskriver pin-layouten och funktionerna för ledningar.

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

Azure Sphere Samples-repo på GitHub innehåller rubrik- 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 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 SAMTIDIG DUBBELRIKTAD SPI-åtgärder (full-duplex) inom en enda busstransaktion.