Udostępnij za pośrednictwem


Używanie funkcji SPI w aplikacjach wysokiego poziomu

Usługa Azure Sphere obsługuje szeregowy interfejs peryferyjny (SPI) w trybie wzorca. SPI to szeregowy interfejs używany do komunikacji między urządzeniami peryferyjnymi i obwodami zintegrowanymi. Funkcja SPI wykorzystuje model główny/podrzędny, w którym urządzenie główne steruje zestawem urządzeń podrzędnych. W przeciwieństwie do I2C, SPI może być używany z bardziej złożonymi urządzeniami peryferyjnymi o wyższej prędkości.

Aplikacje mogą uzyskiwać dostęp do urządzeń peryferyjnych za pośrednictwem interfejsów SPI, wywołując interfejsy API APPLIBS SPI w celu wykonywania operacji na interfejsie głównym SPI. W przykładzie LSM6DS3 SPI opisano, jak skonfigurować sprzęt dla spi na urządzeniu MT3620 i używać SPI w aplikacji.

Wybór mikroukładu

Chip select zarządza połączeniem między interfejsem głównym SPI a zestawem urządzeń podrzędnych; i umożliwia interfejsowi głównej wysyłanie i odbieranie danych do każdego urządzenia podrzędnego niezależnie. Usługa Azure Sphere obsługuje ustawienia active-low i active-high dla opcji wyboru mikroukładów, a ustawieniem domyślnym jest aktywny-niski. Każdy interfejs główny SPI może być używany wyłącznie przez jedną aplikację. Aplikacja musi otworzyć interfejs główny SPI i zidentyfikować każde podłączone urządzenie podrzędne przed wykonaniem operacji odczytu i zapisu w interfejsie. Operacje odczytu i zapisu w funkcji SPI w usłudze Azure Sphere używają blokowania interfejsów API.

Wymagania dotyczące SPI

Aplikacje korzystające z funkcji SPI muszą zawierać pliki nagłówków odpowiednie dla spi i dodać ustawienia SPI do manifestu aplikacji.

Wszystkie aplikacje muszą ustawić sprzęt docelowy i zawierać odpowiedni plik nagłówka definicji sprzętu.

Pliki nagłówków

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

Przed dołączeniem SPI_STRUCTS_VERSION pliku nagłówka zadeklaruj definicję przedprocesora. Określa to wersję struktury używaną przez aplikację.

Zastąp ścieżkę "path-to-your-target-hardware.h" ścieżką do pliku nagłówka sprzętu.

Ustawienia manifestu aplikacji

Aby korzystać z interfejsów API SPI, należy dodać funkcję SpiMaster do manifestu aplikacji, a następnie dodać każdy kontroler główny SPI do funkcji. Dzięki temu aplikacja będzie mieć dostęp do kontrolera. Manifest aplikacji Azure Sphere zawiera więcej szczegółów na temat manifestu aplikacji.

W kodzie użyj stałych zdefiniowanych dla sprzętu, aby zidentyfikować interfejsy główne SPI. Kompilator przetłumaczy te wartości na wartości raw podczas tworzenia aplikacji.

Na przykład oto fragment manifestu aplikacji, który jest przeznaczony dla tablicy deweloperów odwołań MT3620 (RDB) i konfiguruje dwa główne interfejsy SPI:

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

Poniższy fragment przedstawia sposób określania tych samych interfejsów wzorcowych SPI w aplikacji, która jest przeznaczona do zestawu startowego Avnet MT3620:

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

Konfigurowanie wyboru mikroukładu i otwieranie interfejsu głównego SPI

Przed wykonaniem operacji na interfejsie głównym SPI należy skonfigurować wybór mikroukładu i otworzyć interfejs. Aby skonfigurować wybór mikroukładu, wywołaj funkcję SPIMaster_InitConfig w celu zainicjowania struktury struktury SPIMaster_Config . Po zainicjowaniu SPIMaster_Config zaktualizuj csPolarity pole przy użyciu SPI_ChipSelectPolarity_ActiveLow. /reference/applibs/ity_Activ.. /reference/applibs/rence/applibs/applibs-spi/enum-spi-chipselectpolarity.md).

Aby otworzyć interfejs główny SPI, zadzwoń do SPIMaster_Openfunction. Spowoduje to zastosowanie ustawień domyślnych do interfejsu i zastosowanie ustawień wyboru mikroukładu:

  • SPI_Mode_0 dla zamówienia bitów SPI
  • SPI_BitOrder_MsbFirst dla trybu komunikacji

Aktualizowanie ustawień interfejsu głównego SPI

Po zainicjowaniu możesz zmienić ustawienia interfejsu:

Wykonywanie operacji odczytu i zapisu na interfejsie głównym SPI

Usługa Azure Sphere obsługuje kilka opcji wykonywania operacji odczytu i zapisu za pomocą funkcji SPI. W przypadku operacji odczytu i zapisu jednokierunkowego oraz utrzymywania współdziałania z niektórymi interfejsami API posix można wywołać funkcje POSIX read(2) i write(2).

Funkcję SPIMaster_WriteThenRead można wywołać w celu wykonania operacji zapisu połączonego, a następnie odczytu w transakcji pojedynczej magistrali bez zakłóceń w innej transakcji.

Wywołaj funkcję SPIMaster_TransferSequential , gdy potrzebujesz bardziej precyzyjnej kontroli nad chronometrażem między operacjami czytania i zapisu. Umożliwia to wykonywanie wielu operacji odczytu i zapisu między parą stanów włączania i wyłączania plików CS.

Zamykanie interfejsu SPI

Aby zamknąć interfejs, wywołaj standardową funkcję POSIX close().

Pomoc techniczna mt3620

W tej sekcji opisano opcje SPI, które mają zastosowanie tylko podczas uruchamiania usługi Azure Sphere na tablicy deweloperów MT3620.

Specyfikacje SPI dla mt3620 są wymienione w mt3620 stan pomocy technicznej. Podręcznik użytkownika tablicy deweloperów MT3620 opisuje układ pinezki i funkcje okablowania.

Folder HardwareDefinitions w katalogu instalacji zestawu Microsoft Azure Sphere SDK zawiera definicje typowych tablic programistycznych, modułów i mikroukładów Platformy Azure Sphere. Zawiera ona pliki nagłówków i JSON definiujące interfejsy główne bazy danych MT3620, MT3620 RDB oraz inne sprzętowe mt3620. Domyślną lokalizacją folderu HardwareDefinitions jest C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions system Windows i /opt/azurespheresdk/HardwareDefinitions Linux.

  • Po skonfigurowaniu tablicy deweloperów MT3620 możesz użyć dowolnego portu ISU jako interfejsu głównego SPI. Do każdego isu można podłączyć maksymalnie dwa urządzenia podrzędne. Jeśli używasz portu ISU jako interfejsu głównego SPI, nie możesz użyć tego samego portu co interfejs I2C lub UART.
  • MT3620 obsługuje transakcje SPI o częstotliwości do 40 MHz.
  • Mt3620 nie obsługuje równoczesnych operacji odczytu i zapisu dwukierunkowego (full-duplex) w ramach transakcji pojedynczej magistrali.