Verwenden von SPI in allgemeinen Anwendungen

Azure Sphere unterstützt die serielle Peripherieschnittstelle (Serial Peripheral Interface, SPI) im master Modus. SPI ist eine serielle Schnittstelle, die für die Kommunikation zwischen Peripheriegeräten und integrierten Schaltungen verwendet wird. SPI verwendet ein master/untergeordnetes Modell, bei dem ein master Gerät einen Satz untergeordneter Geräte steuert. Im Gegensatz zu I2C kann SPI mit komplexeren Peripheriegeräten mit höherer Geschwindigkeit verwendet werden.

Anwendungen können über SPI auf Peripheriegeräte zugreifen, indem sie Applibs-SPI-APIs aufrufen, um Vorgänge auf einer SPI-master-Schnittstelle auszuführen. Im LSM6DS3 SPI-Beispiel wird beschrieben, wie Sie die Hardware für SPI auf einem MT3620-Gerät konfigurieren und SPI in einer Anwendung verwenden.

Chipauswahl

Chip select verwaltet die Verbindung zwischen einer SPI master-Schnittstelle und einer Reihe von untergeordneten Geräten und ermöglicht der master Schnittstelle, Daten unabhängig voneinander an jedes untergeordnete Gerät zu senden und zu empfangen. Azure Sphere unterstützt die Einstellungen Aktiv/Niedrig und Aktiv/Hoch für die Chipauswahl, wobei Aktiv/Niedrig als Standardeinstellung verwendet wird. Jede SPI-master-Schnittstelle kann ausschließlich von einer Anwendung verwendet werden. Die Anwendung muss die SPI-master-Schnittstelle öffnen und jedes verbundene untergeordnete Gerät identifizieren, bevor Lese- und Schreibvorgänge für die Schnittstelle ausgeführt werden. Die SPI-Lese- und Schreibvorgänge in Azure Sphere verwenden blockierende APIs.

SPI-Anforderungen

Anwendungen, die SPI verwenden, müssen die entsprechenden Headerdateien für SPI enthalten und dem Anwendungsmanifest SPI-Einstellungen hinzufügen.

Alle Anwendungen müssen ihre Zielhardware festlegen und die entsprechende Hardwaredefinitionsheaderdatei enthalten.

Headerdateien

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

Deklarieren Sie die SPI_STRUCTS_VERSION Präprozessordefinition, bevor Sie die Headerdatei einschließen. Dies gibt die Strukturversion an, die von der Anwendung verwendet wird.

Ersetzen Sie "path-to-your-target-hardware.h" durch den Pfad zur Headerdatei für Ihre Hardware.

Anwendungsmanifesteinstellungen

Um die SPI-APIs verwenden zu können, müssen Sie die SpiMaster Funktion zum Anwendungsmanifest hinzufügen und dann jeden SPI-master-Controller zur Funktion hinzufügen. Dadurch kann die Anwendung auf den Controller zugreifen. Das Azure Sphere-Anwendungsmanifest enthält weitere Details zum Anwendungsmanifest.

Verwenden Sie in Ihrem Code die Konstanten, die für Ihre Hardware definiert sind, um die SPI-master Schnittstellen zu identifizieren. Der Compiler übersetzt diese Werte beim Erstellen der App in Rohwerte.

Hier ist beispielsweise ein Auszug aus einem Anwendungsmanifest, das auf ein MT3620 Reference Development Board (RDB) abzielt und zwei SPI-master-Schnittstellen konfiguriert:

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

Der folgende Auszug zeigt, wie Sie dieselben SPI-master-Schnittstellen in einer Anwendung angeben, die auf das Avnet MT3620 Starter Kit ausgerichtet ist:

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

Konfigurieren der Chipauswahl und Öffnen einer SPI-master-Schnittstelle

Bevor Sie Vorgänge für eine SPI-master-Schnittstelle ausführen, müssen Sie die Chipauswahl konfigurieren und die Schnittstelle öffnen. Rufen Sie zum Konfigurieren der Chipauswahl die funktion SPIMaster_InitConfig auf, um die SPIMaster_Config Strukturstruktur zu initialisieren. Nachdem Sie SPIMaster_Config initialisiert haben, aktualisieren Sie das csPolarity Feld mit dem SPI_ChipSelectPolarity_ActiveLow. /reference/applibs/ity_Activ. /reference/applibs/rence/applibs/applibs-spi/enum-spi-chipselectpolarity.md).

Um eine SPI-master-Schnittstelle zu öffnen, rufen Sie die SPIMaster_Openfunction auf. Dadurch werden die Standardeinstellungen auf die Schnittstelle angewendet und ihre Chipauswahleinstellungen angewendet:

  • SPI_Mode_0 für die SPI-Bitreihenfolge
  • SPI_BitOrder_MsbFirst für den Kommunikationsmodus

Aktualisieren der Einstellungen für eine SPI-master-Schnittstelle

Nach der Initialisierung können Sie die Einstellungen für die Schnittstelle ändern:

Ausführen von Lese- und Schreibvorgängen auf der SPI master-Schnittstelle

Azure Sphere unterstützt mehrere Optionen zum Ausführen von Lese- und Schreibvorgängen mit SPI. Für unidirektionale Lese- oder Schreibvorgänge und um die Interoperabilität mit einigen POSIX-APIs zu gewährleisten, können Sie die POSIX-Funktionen read(2) und write(2) aufrufen.

Sie können die SPIMaster_WriteThenRead-Funktion aufrufen, um einen kombinierten Schreib- und dann Lesevorgang in einer einzelnen Bustransaktion ohne Unterbrechung einer anderen Transaktion auszuführen.

Rufen Sie die SPIMaster_TransferSequential-Funktion auf, wenn Sie eine genauere Steuerung des Timings zwischen Lese- oder Schreibvorgängen benötigen. Dadurch können Sie mehrere Lese- und Schreibvorgänge zwischen einem Paar von CS-Aktivierungs- und -Deaktivierungszuständen ausführen.

Schließen der SPI-Schnittstelle

Rufen Sie zum Schließen der Schnittstelle die POSIX-Standardfunktion close() auf.

MT3620-Unterstützung

In diesem Abschnitt werden die SPI-Optionen beschrieben, die nur beim Ausführen von Azure Sphere auf dem MT3620-Entwicklungsboard gelten.

Die SPI-Spezifikationen für das MT3620 sind unter MT3620-Supportstatus aufgeführt. Im Benutzerhandbuch des MT3620-Entwicklungsboards werden das Pinlayout und die Funktionen für die Verdrahtung beschrieben.

Der Ordner HardwareDefinitions im Installationsverzeichnis des Microsoft Azure Sphere SDK enthält Definitionen für allgemeine Azure Sphere-Entwicklungsboards, -Module und -Chips. Sie enthält Header- und JSON-Dateien, die die master Schnittstellen für mt3620, MT3620 RDB und andere MT3620-Hardware definieren. Der Standardspeicherort für den Ordner HardwareDefinitions ist C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions unter Windows und /opt/azurespheresdk/HardwareDefinitions unter Linux.

  • Wenn Sie das MT3620-Entwicklungsboard konfigurieren, können Sie einen beliebigen ISU-Port als SPI-master-Schnittstelle verwenden. Sie können bis zu zwei untergeordnete Geräte mit jeder ISU verbinden. Wenn Sie einen ISU-Port als SPI-master-Schnittstelle verwenden, können Sie nicht denselben Port wie eine I2C- oder UART-Schnittstelle verwenden.
  • Der MT3620 unterstützt SPI-Transaktionen mit bis zu 40 MHz.
  • Der MT3620 unterstützt keine gleichzeitigen bidirektionalen Lese- und Schreibvorgänge (Vollduplex)-SPI-Vorgänge innerhalb einer einzelnen Bustransaktion.