次の方法で共有


高度なアプリケーションで SPI を使用する

重要

これは Azure Sphere (レガシ) のドキュメントです。 Azure Sphere (レガシ) は 2027 年 9 月 27 日に 再提供されておりユーザーは現時点で Azure Sphere (統合) に移行する必要があります。 TOC の上にある Version セレクターを使用して、Azure Sphere (統合) のドキュメントを表示します。

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

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

チップ セレクト

チップ セレクトは、SPI マスター インターフェイスと一連の下位デバイスの間の接続を管理します。このチップ セレクトにより、マスター インターフェイスが、各下位デバイスとの間のデータの送受信を個別に管理できます。 Azure Sphere では、チップ セレクトに対してアクティブ低とアクティブ高の設定がサポートされ、既定では、アクティブ低が設定されています。 各 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 スタート キットをターゲットとするアプリケーションで同じ SPI マスター インターフェイスを指定する方法を示します。

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

チップ セレクトを構成し、SPI マスター インターフェイスを開く

SPI マスター インターフェイスで操作を実行する前に、チップ セレクトを構成し、インターフェイスを開く必要があります。 チップ セレクトを構成するには、SPIMaster_InitConfig 関数を呼び出して、SPIMaster_Config 構造体を初期化します。 SPIMaster_Config を初期化したら、SPI_ChipSelectPolarity_ActiveLow または SPI_ChipSelectPolarity_ActiveHigh の設定csPolarity フィールドを更新します。

SPI マスター インターフェイスを開くには、SPIMaster_Open 関数を呼び出します。 これにより、既定の設定がインターフェイスに適用され、ご自身のチップ セレクトの次の設定が適用されます。

  • SPI_Mode_0 (SPI ビット オーダーの場合)
  • SPI_BitOrder_MsbFirst (通信モードの場合)

SPI マスター インターフェイスの設定を更新する

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

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

Azure Sphere では、SPI での読み取りおよび書き込み操作オプションが複数用意されています。 一方向の読み取りまたは書き込み操作、および一部の POSIX API との相互運用性のために、POSIX read(2) および write(2) 関数を呼び出すことができます。

SPIMaster_WriteThenRead 関数を呼び出すと、書き込み後読み取りを行う一連の操作を、他のトランザクションから中断されることなく 1 回のバス トランザクションで実行できます。

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

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

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

MT3620 サポート

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

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

Microsoft Azure Sphere SDK インストール ディレクトリの HardwareDefinitions フォルダーには、一般的な Azure Sphere 開発ボード、モジュール、チップの定義が含まれています。 これには、MT3620、MT3620 RDB、およびその他の MT3620 ハードウェアのマスター インターフェイスを定義するヘッダーファイルと JSON ファイルが含まれています。 HardwareDefinitions フォルダーの既定の場所は、Windows では C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions され、Linux では /opt/azurespheresdk/HardwareDefinitions されます。

GitHub 上の Azure Sphere Samples リポジトリには、 MT3620 チップ および MT3620 RDB の SPI マスター インターフェイスを定義するヘッダーファイルと JSON ファイルと、その他の MT3620 ハードウェア 含まれています-->

  • MT3620 開発ボードを構成するとき、任意の ISU ポートを SPI マスター インターフェイスとして使用できます。 各 ISU に最大 2 つの下位デバイスを接続できます。 ISU ポートを SPI マスター インターフェイスとして使用する場合、同じポートを I2C または UART インターフェイスとして使うことはできません。
  • MT3620 では、最大 40 MHz の SPI トランザクションがサポートされます。
  • MT3620 では、1 回のバス トランザクションでの双方向の同時読み書き (全二重) SPI 操作はサポートされません。