I2C テストでは、Windows.Devices.I2c WinRT API を介してユーザー モードに公開されている 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::P artialTransfer として報告されます。
- 最大 500 ミリ秒のクロックストレッチが許可され、転送が失敗しないことを確認します。
- スレーブ デバイスが長時間 (10 秒以上) クロック ラインを低く保持している場合、ドライバーはエラー コードを使用して最大 10 秒以内に転送を完了することを確認します。 エラー コードはSTATUS_IO_TIMEOUTする必要がありますが、互換性の理由から検証されません。
基本的な機能テストとストレス テストは、外部に接続された 2 つの EEPROM に対して実行されます。 高度な機能テストは、カスタム ファームウェアを実行している mbed LPC1768 に対して実行されます。 mbed LPC1768は、 Farnell、 Digikey、 Adafruit など、さまざまなオンライン小売業者から購入できる人気のあるマイクロコントローラープロトタイププラットフォームです。 mbed のファームウェアの更新は、ファイルのドラッグ アンド ドロップと同じくらい簡単です。 ファームウェアのソース コードは GitHub で入手できます。 mbed を準備し、テストを実行する手順を以下に示します。
テストの詳細
仕様 |
|
プラットフォーム | |
サポートされているリリース |
|
予想される実行時間 (分単位) | 5 |
カテゴリ | 発達 |
タイムアウト (分単位) | 10 |
再起動が必要 | 偽り |
特別な構成が必要 | ほんとう |
タイプ | 自動 |
その他のドキュメント
この機能領域のテストには、次のトピックに記載されている前提条件、セットアップ、トラブルシューティングの情報など、追加のドキュメントが含まれている場合があります。
テストの実行
基本的な機能テストとストレス テストの実行
テストを実行するには、次のハードウェアが必要です。
- Atmel AT24HC シリアル EEPROMs qt. 2
- 10k 抵抗 qt. 2
- ブレッドボード
- ワイヤー
次の図に示すように EEPROM を接続し、テスト対象のデバイスに SDA と SCL を接続します。
HLK マネージャーから基本的な機能テストとストレス テストをスケジュールできるようになりました。
高度な機能テストの実行
高度な機能テストでは、NACK応答の動作、バスがハングした状態、クロックストレッチ、および繰り返し開始の検証が行われます。 テスト対象のデバイスに接続するには、カスタム ファームウェアを実行している mbed LPC1768が必要です。 テストを実行する前に、HLK ファームウェアを mbed LPC1768に読み込む必要があります。 ファームウェアを更新する方法は次のとおりです。
- MBed LPC1768を USB 経由で PC に接続します。 PC に取り外し可能なドライブとして表示されます。
- エクスプローラーでドライブを開く
- c:\Program Files (x86)\Windows Kits\10\Hardware Lab Kit\Tests\x86\iot\busses-tester-mbed_LPC1768.bin を mbed にコピーする
- mbed のボタンを押して、マイクロコントローラーをリセットします。
次に、mbed をテスト対象のデバイスに接続します。 MBED を USB 経由でテスト対象のデバイスに接続します。 次に、I2C 接続 (mbed pinout) を作成します。
- mbed ピン 9 (P0.0/SDA) をテスト対象デバイスの SDA ピンに接続する
- mbed ピン 10 (P0.1/SCL) をテスト対象デバイスの SCL ピンに接続する
- mbed GND をテスト対象デバイスの GND ピンに接続する
mbedは、SDAおよびSCLラインで内部プルアップ抵抗を有効にしており、外部プルアップ抵抗を必要としません。
HLK マネージャーから高度な機能テストをスケジュールできるようになりました。
トラブルシューティング
HLK テストエラーの一般的なトラブルシューティングについては、「 Windows HLK テストエラーのトラブルシューティング」を参照してください。
コマンド ラインでテストを実行して、エラーの分析情報を得て、ソリューションをすばやく反復処理することをお勧めします。 コマンド ラインでテストを実行する方法を次に示します。
%programfiles(x86)%\Windows Kits\10\Testing\Runtimes\TAEF\<arch>\MinTe を c:\data\minte にコピーする
Windows.Devices.LowLevel.UnitTests.dll を %programfiles(x86)%\Windows Kits\10\Hardware Lab Kit\Tests\<arch>\iot からデバイス上の c:\data にコピーします。
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)。 |