高レベルのアプリケーションで SPI を使用する

Azure Sphere では、マスター モードでのシリアル周辺機器インターフェイス (SPI) がサポートされています。 SPI は、周辺機器と集積回路間の通信に使用されるシリアル インターフェイスです。 SPI は、マスター デバイスが一連の下位デバイスを制御するマスター/下位モデルを使用します。 I2Cとは対照的に、SPIはより複雑な高速周辺機器で使用できます。

アプリケーションは、APPlibs SPI API を 呼び出して SPI マスター インターフェイスで操作を実行することで、SPI を介して周辺機器にアクセスできます。 LSM6DS3 SPI サンプルでは、MT3620 デバイスで SPI 用のハードウェアを構成し、アプリケーションで SPI を使用する方法について説明します。

チップ選択

チップ選択は、SPI マスター インターフェイスと一連の下位デバイス間の接続を管理します。を使用すると、マスター インターフェイスは各下位デバイスに個別にデータを送受信できます。 Azure Sphere では、チップ選択のアクティブ/ローとアクティブ/ハイの設定がサポートされ、既定の設定として active-low がサポートされています。 各 SPI マスター インターフェイスは、1 つのアプリケーションによってのみ使用できます。 アプリケーションは、SPI マスター インターフェイスを開き、接続されている各下位デバイスを識別してから、インターフェイスに対して読み取りおよび書き込み操作を実行する必要があります。 Azure Sphere の 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 Sphere アプリケーション マニフェストには、アプリケーション マニフェスト の詳細が記載されています。

コードで、ハードウェア用に定義されている定数を使用して、SPI マスター インターフェイスを識別します。 コンパイラは、アプリをビルドするときに、これらの値を生の値に変換します。

たとえば、 MT3620 リファレンス開発ボード (RDB) を対象とし、2 つの 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 マスター インターフェイスの設定を更新する

初期化後、インターフェイスの設定を変更できます。

SPI マスター インターフェイスで読み取りおよび書き込み操作を実行する

Azure Sphere では、SPI で読み取り操作と書き込み操作を実行するためのいくつかのオプションがサポートされています。 一方向の読み取りまたは書き込み操作の場合や、一部の POSIX API との相互運用性を維持するために、POSIX read(2) 関数と write(2) 関数を呼び出すことができます。

SPIMaster_WriteThenRead関数を呼び出して、別のトランザクションから中断することなく、単一のバス トランザクションで書き込み操作と読み取り操作を組み合わせて実行できます。

読み取り操作と書き込み操作の間のタイミングをより正確に制御する必要がある場合は、 SPIMaster_TransferSequential 関数を呼び出します。 これにより、CS の有効と無効の状態のペア間で複数の読み取りおよび書き込み操作を実行できます。

SPI インターフェイスを閉じる

インターフェイスを閉じるには、標準の POSIX 関数 close() を呼び出します。

MT3620 のサポート

このセクションでは、MT3620 開発ボードで Azure Sphere を実行する場合にのみ適用される SPI オプションについて説明します。

MT3620 の SPI 仕様は、 MT3620 のサポート状態に記載されています。 MT3620開発ボードのユーザーガイドでは、配線用のピンレイアウトと機能について説明しています。

Microsoft Azure Sphere SDK インストール ディレクトリの HardwareDefinitions フォルダーには、一般的な Azure Sphere 開発ボード、モジュール、チップの定義が含まれています。 これには、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 に最大 2 つの下位デバイスを接続できます。 SPI マスター インターフェイスとして ISU ポートを使用する場合、I2C または UART インターフェイスと同じポートを使用することはできません。
  • MT3620 は、最大 40 MHz の SPI トランザクションをサポートします。
  • MT3620 は、1 つのバス トランザクション内で双方向の読み取りおよび書き込み (全二重) SPI 操作を同時にサポートしていません。