高度なアプリケーションで I2C を使用する
重要
これは Azure Sphere (レガシ) のドキュメントです。 Azure Sphere (レガシ) は 2027 年 9 月 27 日に 再提供されておりユーザーは現時点で Azure Sphere (統合) に移行する必要があります。 TOC の上にある Version セレクターを使用して、Azure Sphere (統合) のドキュメントを表示します。
Azure Sphere は、マスター モードで相互集積回路 (I2C) をサポートしています。 I2C とは、低速の周辺機器をマイクロコントローラーに接続するシリアル バスです。 I2C ではマルチマスター/マルチ下位モデルが使用され、マスター デバイスが、一連の下位デバイスを制御しています。 I2C は、多くの場合、設定コントロール、電源スイッチ、センサーなど、シンプルで軽量な通信のみが求められる周辺機器でマイクロコントローラーと共に使用されます。
アプリケーションは Applibs I2C API を呼び出すことで I2C 経由で周辺機器にアクセスして、I2C マスター インターフェイスで処理を実行できます。 LSM6DS3 I2C サンプルは、MT3620 デバイスで I2C 用にハードウェアを構成し、アプリケーションで I2C を使用する方法について説明しています。
I2C の要件
I2C を使用するアプリケーションでは、I2C に適したヘッダー ファイルを追加し、I2C の設定をアプリケーション マニフェストに追加する必要があります。
すべてのアプリケーションで、ターゲット ハードウェアを設定し、対応するハードウェア定義ヘッダー ファイルをインクルードする必要があります。
ヘッダー ファイル
#define I2C_STRUCTS_VERSION 1
#include <applibs/i2c.h>
#include "path-to-your-target-hardware.h"
ヘッダー ファイルを追加する前に、I2C_STRUCTS_VERSION
プリプロセッサ定義を宣言します。 これにより、アプリケーションによって使用される構造体のバージョンが指定されます。
"path-to-your-target-hardware.h" を、お使いのハードウェアのヘッダー ファイルへのパスに置き換えます。
アプリケーション マニフェストの設定
I2C API を使用するには、I2cMaster
機能をアプリケーション マニフェストに追加し、各 I2C マスター インターフェイスをその機能に追加する必要があります。 これにより、アプリケーションがインターフェイスにアクセスできるようになります。 Azure Sphere アプリケーション マニフェスト には、アプリケーション マニフェストの詳細が含まれています。
コードでは、ハードウェアに対して定義されている定数を使用して I2C インターフェイスを識別します。 アプリをビルドするときに、これらの値がコンパイラによって生の値に変換されます。
たとえば、MT3620 参照開発ボード (RDB) をターゲットとし、2 つの I2C マスター インターフェイスを構成するアプリケーション マニフェストからの抜粋を次に示します。
"I2cMaster": [ "$MT3620_RDB_HEADER2_ISU0_I2C", "$MT3620_RDB_HEADER4_ISU1_I2C" ],
次の抜粋は、Avnet MT3620 スタート キットをターゲットとするアプリケーションで同じ I2C マスター インターフェイスを指定する方法を示します。
"I2cMaster": [ "$AVNET_MT3620_SK_ISU0_I2C", "$AVNET_MT3620_SK_ISU1_I2C" ]
I2C マスター インターフェイスを開く
I2C マスター インターフェイスで操作を行う前に、I2CMaster_Open 関数を呼び出して、そのインターフェイスを開く必要があります。
I2C マスター インターフェイスの設定を更新する
マスター インターフェイスを開いた後、設定を変更できます。
- マスター インターフェイスでの操作のバス速度を変更するには、I2CMaster_SetBusSpeed を呼び出します
- 操作のタイムアウトを変更するには、I2CMaster_SetTimeout を呼び出します
I2C マスター インターフェイスで読み取りおよび書き込み操作を行う
Azure Sphere では、I2C での読み取りおよび書き込み操作オプションが複数用意されています。 これらのオプションは、すべてのブロック、同期操作です。
一方向の書き込みまたは読み取り操作については、I2CMaster_Write または I2CMaster_Read を呼び出すことができます。 I2C マスター インターフェイスでは、この方法で操作を呼び出すのが最も簡単です。1 つの操作のみが指定され、関数呼び出しに下位デバイスのアドレスが含まれているためです。
I2CMaster_WriteThenRead を呼び出すと、書き込み後読み取りを行う一連の操作を、他のトランザクションから中断されることなく 1 回のバス トランザクションで実行できます。
一部の POSIX インターフェイスとの相互運用性を実現するには、POSIX read(2) および write(2) 関数を呼び出して、一方向のトランザクションを実行します。 read(2) または write(2) を呼び出す前に、I2CMaster_SetDefaultTargetAddress を呼び出して、下位デバイスのアドレスを設定する必要があります。
下位デバイスの存在を確認するには、これらの関数を呼び出して、0 バイトの書き込み操作を実行します。 読み取りまたは書き込み操作が失敗した場合、お使いのアプリケーションは要求の再発行を処理する必要があります。
I2C インターフェイスを閉じる
インターフェイスを閉じるには、標準の POSIX 関数 close() を呼び出しす必要があります。
MT3620 サポート
このセクションでは、Azure Sphere が MT3620 で実行されている場合にのみ適用される I2C オプションについて説明します。
MT3620 チップ用の I2C 仕様は、「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 ポートを I2C マスター インターフェイスとして使用できます。 ISU ポートを I2C マスター インターフェイスとして使用する場合、同じポートを SPI または UART インターフェイスとして使うことはできません。
- 10 ビットの下位デバイス アドレスは、MT3620 ではサポートされていません。サポートされるのは、7 ビット アドレスのみです。
- MT3620 は、100 KHz、400 KHz、および 1 MHz のバス速度がサポートしますが、3.4 MHz はサポートしていません。
- 0 バイトの I2C 読み取りは、MT3620 ではサポートされていません。
- 高レベルアプリケーションで I2C を使用する場合、I2C 周辺機器では ISU 周辺機器ブロック内の SCL ピンと SDA ピンのみが使用され、他のピンは同じ高レベル アプリケーションで GPIO として使用できます。 GPIO に再利用できる未使用の ISU ピンの一覧については I/O 周辺機器 を参照してください。