I2C WinRT 書き込みテスト (EEPROM が必要)
I2C テストは、Windows.Devices.I2c WinRT API を通じて usermode に公開されたI2Cコントローラの機能テストとストレステストを実施します。 テストは、基本的な機能テストとストレス テスト、および高度な機能テストという 2 つのパートに分かれています。 基本機能テストのテスト範囲は次のとおりです。
- 指定されたフレンドリ名の I2C コントローラーが usermode からアクセス可能であることの検証。
- クロック速度とバッファー長 8 バイト (EEPROM ページ サイズ) までの範囲で正しくデータが書き込まれることの検証。
- クロック速度とバッファー長の範囲でデータが正しく読み取れることの検証。
- 書き込み - 再開 - 読み取りシーケンス (WriteRead) がクロック速度とバッファー長の範囲で正しく実行されていることの検証。
- 受信確認されていないスレーブ アドレスに対して書き込み、読み取り、または WriteRead が試行された場合に、ドライバーが STATUS_NO_SUCH_DEVICE を返すことの検証。 これは、I2cDevice::Write/Read/WriteRead() によって HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) として報告され、I2cDevice::WritePartial/ReadPartial/WriteReadPartial() によって I2cTransferStatus::SlaveAddressNotAcknowledged として報告されます。
- API とドライバーがストレス条件下で正しく機能することの検証。 ストレス テストでは、長時間にわたって個別のデバイス ハンドルを使用して、2 つの EEPROM の書き込みと読み取りが同時に実行されます。
高度な機能テストのテストの範囲は次のとおりです。
- 最大 16384 バイトのバッファー長でデータが正しく書き込まれていることの検証。
- WriteRead シーケンスへの応答として、I2C 再起動条件が生成されることの検証。
- マスターがまだバイトを書き込んでいるときにスレーブ デバイスの NAK が発生した場合に、ドライバーが STATUS_SUCCESS で要求を完了し、要求情報を通じて書き込まれた実際のバイト数を報告することの検証。 これは部分転送と呼ばれ、WritePartial() と WriteReadPartial() によって I2cTransferStatus::PartialTransfer として報告されます。
- 500ms までのクロック ストレッチが許可されており、それによって転送が失敗することがないことの検証。
- スレーブ デバイスが長時間 (10 秒以上) クロック ライン ローを保持している場合、ドライバーが 10 秒以内にエラー コードありで転送を完了することの検証。 エラー コードは STATUS_IO_TIMEOUT である必要がありますが、互換性上の理由で検証はされません。
基本的な機能テストとストレス テストは、外部接続された 2 つの EEPROM に対して実行されます。 高度な機能テストは、カスタム ファームウェアを実行している mbed LPC1768 に対して実行されます。 mbed LPC1768 は、Sparkfun、Digikey、Adafruit などのさまざまなオンライン小売業者から購入できる人気のマイクロコントローラー プロトタイピング プラットフォームです。 mbed のファームウェアの更新は、ファイルをドラッグ アンド ドロップするだけで簡単に行うことができます。 ファームウェアのソース コードは github で公開されています。 mbed の準備とテストの実行の手順を以下に示します。
テストの詳細
仕様 |
|
プラットフォーム | |
サポートされているリリース |
|
予想される実行時間 (分) | 5 |
カテゴリ | 開発 |
タイムアウト (分) | 10 |
再起動が必要です | false |
特別な構成が必要です | true |
Type | automatic |
その他のドキュメント
この機能領域のテストには、前提条件、セットアップ、トラブルシューティング情報など、次のトピックに記載されている追加のドキュメントが含まれている場合があります。
テストの実行
基本的な機能およびストレス テストの実行
テストを実行するためには、以下のハードウェアが必要です。
- Atmel AT24HC シリアル EEPROM 2 個
- 10k の抵抗 2 個
- ブレッドボード
- ワイヤ
次の図に示すように EEPROMs を接続し、テスト対象のデバイスに SDA と SCL を接続します。
HLK manager から基本的な機能およびストレス テストをスケジュールできるようになりました。
高度な機能テストの実行
高度な機能テストでは、NACKing 動作、ハングするバス条件、クロック ストレッチ、反復的な開始が確認されます。 テストでは、カスタム ファームウェアを実行している mbed LPC1768 がテスト対象デバイスに接続されている必要があります。 テストを実行する前に、mbed LPC1768 に HLK ファームウェアを読み込む必要があります。 ファームウェアを更新する方法を次に示します。
- USB 経由で mbed LPC1768 を PC に接続します。 これは PC にリムーバブル ドライブとして表示されます。
- エクスプローラーでドライブを開きます
- c:\Program Files (x86)\Windows Kits\10\Hardware Lab Kit\Tests\x86\iot\busses-tester-mbed_LPC1768.bin を mbed にコピーします
- mbed のボタンを押して、マイクロコントローラーをリセットします
次に、mbed をテスト対象デバイスに接続します。 USB 経由で mbed をテスト対象デバイスに接続します。 次に、I2C 接続 (mbed のピン配列) を作成します。
- mbed ピン 9 (P0.0/SDA) をテスト対象デバイスの SDA ピンに接続します
- mbed ピン 10 (P0.1/SCL) をテスト対象デバイスの SCL ピンに接続します
- mbed GND をテスト対象デバイスの GND ピンに接続します
mbed では、SDA および SCL ラインで内部プルアップ抵抗が有効になっているため、外部プルアップ抵抗は必要ありません。
HLK manager から高度な機能テストをスケジュールできるようになりました。
トラブルシューティング
HLK テスト エラーの一般的なトラブルシューティングについては、「Windows HLK テストのエラーのトラブルシューティング」を参照してください。
コマンド ラインでテストを実行して、エラーに関する分析情報を取得し、ソリューションをすばやく反復処理することをお勧めします。 以下にコマンド ラインでテストを実行する方法を示します。
%programfiles(x86)%\Windows Kits\10\Testing\Runtimes\TAEF\<arch>\MinTe を c:\data\minte にコピーします
%programfiles(x86)%\Windows Kits\10\Hardware Lab Kit\Tests\<arch>\iot からデバイス上の c:\data に Windows.Devices.LowLevel.UnitTests.dll をコピーします。
デバイスに Telnet または ssh で接続します
ディレクトリを c:\data に移動します
テストを実行します。
minte\te windows.devices.lowlevel.unittests.dll /name:I2c*
コマンド ライン テストの使用法:
minte\te windows.devices.lowlevel.unittests.dll [/name:test_name] [/select:select_clause] [/p:I2cFriendlyName=friendly_name] [/p:Duration=duration]
- test_name - 実行するテストの名前。ワイルドカードを含む場合があります。 例: /name:I2c*, /name:I2cEepromWriteTests#metadataSet0::VerifyWrite#metadataSet0
- select_clause - TAEFの選択節です。 例: /select:"@name='I2c*' and not(@name='I2cTestsEx*')"
- friendly_name - テスト対象の I2C コントローラーのフレンドリ名。 省略した場合は、最初に列挙されたコントローラーが使用されます。 例: /p:I2cFriendlyName=I2C0
- duration - ストレス テストを実行する期間。 例: /p: Duration = 10s (10 秒)、/p: Duration = 1m (1 分)、/p: Duration = 2h (2 時間)、/p: Duration = 1d (1 日)
例:
基本的な機能テストを実行するには
minte\te windows.devices.lowlevel.unittests.dll /select:"@name='I2c*' and not(@name='I2cTestsEx*')"
高度な機能テストを実行するには
minte\te windows.devices.lowlevel.unittests.dll /name:I2cTestsEx::*
特定の I2C コントローラー インスタンスに対してテストを実行するには、I2cFriendlyName テスト パラメーターにフレンドリ名を渡します。
minte\te windows.devices.lowlevel.unittests.dll /name:I2c* /p:I2cFriendlyName=I2C0
特定のテストを実行するには、完全なテスト名を /name パラメーターに渡します。
minte\te windows.devices.lowlevel.unittests.dll /name:I2cNonexistentSlaveAddressTests::TestWriteRead
推奨される 8 時間のストレス テストを実行するには、以下を実行します
minte\te windows.devices.lowlevel.unittests.dll /name:I2cStressTests::StressIoConcurrent /p:Duration=8h
手動でのトラブルシューティングに役立つ可能性があるツールは、I2cTestTool です。 I2cTestTool は、コマンド ラインから I2C と対話するためのシンプルなユーティリティです。
詳細
パラメーター
パラメーター名 | パラメーターの説明 |
---|---|
I2cFriendlyName | テスト対象の I2C コントローラーのフレンドリ名 (I2C0 など)。 |