在高階應用程式中使用 SPI
Azure 球體在主模式中支援序列介面 (SPI) 。 SPI 是介面和整合回路之間的通訊所用的序列介面。 SPI 使用主機型/從屬模型,其中主裝置可控制一組部屬裝置。 與 I2C相反,SPI 可以搭配更複雜的高速周邊裝置使用。
應用程式可以透過 SPI 存取周邊設備,方法是呼叫 Applibs SPI API 在 SPI 主介面上執行操作。 LSM6DS3 SPI 範例說明如何在 MT3620 裝置上設定 SPI 硬體並在應用程式中使用 SPI。
選取晶片
晶片選取可管理 SPI 主介面與一組附屬裝置之間的連線;並允許主介面個別傳送和接收資料到每個部屬裝置。 Azure 球體支援晶片選取的主動式低和主動式高設定,使用中低則做為預設設定。 每個 SPI 主介面只能由一個應用程式使用。 應用程式必須先開啟 SPI 主介面,並識別每個連接的部屬裝置,才能在介面上執行讀取和寫入作業。 Azure 球體上的 SPI 讀取和寫入作業會使用封鎖 API。
SPI 需求
使用 SPI 的應用程式必須包含適當的 SPI 頁首檔案,並將 SPI 設定新增至 應用程式資訊清單。
所有應用程式都必須 設定其目標硬體 ,並包含對應的硬體定義頁首檔案。
頁首檔案
#define SPI_STRUCTS_VERSION 1
#include <applibs/spi.h>
#include "path-to-your-target-hardware.h"
SPI_STRUCTS_VERSION
在包含頁首檔案之前,請先宣告前置程式定義。 這會指定應用程式使用的結構版本。
將「path-to-your-target-hardware.h」取代為硬體頁首檔案的路徑。
應用程式資訊清單設定
若要使用 SPI API,您必須將該 SpiMaster
功能新增至應用程式資訊清單,然後將每個 SPI 主控制器新增至該功能。 這可讓應用程式存取控制器。
Azure 球體應用程式資訊清單 具有更多有關應用程式資訊清單的詳細資料。
在程式碼中,使用為硬體定義的常數來識別 SPI 主介面。 當您建立應用程式時,編譯器會將這些值翻譯成原始值。
例如,以下是針對 MT3620 參考開發面板 (RDB) 並設定兩個 SPI 主介面的應用程式資訊清單摘要:
"SpiMaster": [ "$MT3620_RDB_HEADER2_ISU0_SPI", "$MT3620_RDB_HEADER4_ISU1_SPI" ],
下列摘要說明如何在針對 Avnet MT3620 Starter Kit的應用程式中指定相同的 SPI 主介面:
"SpiMaster": [ "$AVNET_MT3620_SK_ISU0_SPI", "$AVNET_MT3620_SK_ISU1_SPI" ]
設定晶片選取並開啟 SPI 主介面
在執行 SPI 主介面的操作之前,您必須先設定選取晶片並開啟介面。 若要設定選取晶片,請呼叫 SPIMaster_InitConfig 函數初始化 SPIMaster_Config結構 。 初始化SPIMaster_Config之後,請 csPolarity
使用 SPI_ChipSelectPolarity_ActiveLow.更新欄位。/reference/applibs/ity_Activ../reference/applibs/rence/applibs/applibs-spi/enum-spi-chipselectpolarity.md) 。
若要開啟 SPI 主介面,請致電 SPIMaster_Openfunction。 這會將預設設定套用至介面,並套用晶片選取設定:
-
SPI_Mode_0
以取得 SPI 位順序 -
SPI_BitOrder_MsbFirst
以取得通訊模式
更新 SPI 主介面的設定
初始化之後,您可以變更介面的設定:
- 若要變更位順序,請連 絡SPIMaster_SetBitOrder
- 若要變更 SPI 匯流排速度,請致電 SPIMaster_SetBusSpeed
- 若要變更通訊模式,請致電 SPIMaster_SetMode
在 SPI 主介面上執行讀取和寫入作業
Azure 球體支援數個選項,可用 SPI 執行讀取和寫入作業。 若要執行單向讀取或寫入作業,以及維持某些 POSIX API 的互通性,您可以呼叫 POSIX 讀取 (2) ,並撰寫 (2) 函數。
您可以呼叫 SPIMaster_WriteThenRead 函數,在單一總線交易中執行合併寫入,然後讀取作業,而不中斷另一個交易。
當您需要更精確地控制讀取或寫入作業之間的時間時,請呼叫 SPIMaster_TransferSequential 函數。 這可讓您在一組 CS 啟用和停用狀態之間執行多個讀取和寫入作業。
關閉 SPI 介面
若要關閉介面,請呼叫標準 POSIX 函數關閉 () 。
MT3620 支援
本節說明只有在 MT3620 開發面板上執行 Azure 球體時才適用的 SPI 選項。
MT3620 的 SPI 規格列在 MT3620 支援狀態中。 MT3620 開發面板使用者指南說明針腳配置和連接功能。
Microsoft Azure 球體 SDK 安裝目錄中的 [HardwareDefinitions] 資料夾包含常見 Azure 球體開發面板、模組和晶片的定義。 它包含可定義 MT3620、MT3620 RDB 主介面以及其他 MT3620 硬體的頁首和 JSON 檔案。 HardwareDefinitions 資料夾的預設位置是在 C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
Windows 和 /opt/azurespheresdk/HardwareDefinitions
Linux 上。
- 當您設定 MT3620 開發人員面板時,您可以使用任何 ISU 埠做為 SPI 主介面。 您最多可以將兩個部屬裝置連線到每個 ISU。 當您使用 ISU 埠做為 SPI 主介面時,您無法使用與 I2C 或 UART 介面相同的埠。
- MT3620 支援高達 40 MHz 的 SPI 交易。
- MT3620 不支援在單一總線交易中同時 (全雙面) SPI 作業。