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 exemplet LSM6DS3 SPI 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 struct . När du har initierat SPIMaster_Config uppdaterar du fältet csPolarity
med SPI_ChipSelectPolarity_ActiveLow.. /reference/applibs/ity_Activ.. /reference/applibs/rence/applibs/applibs-spi/enum-spi-chipselectpolarity.md).
Om du vill öppna ett SPI-huvudgränssnitt anropar du SPIMaster_Openfunction. 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:
- Ring SPIMaster_SetBitOrder om du vill ändra bitordningen
- Om du vill ändra SPI-busshastigheten ringer du SPIMaster_SetBusSpeed
- Om du vill ändra kommunikationsläget ringer du SPIMaster_SetMode
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.
- 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.