SPB I/O 要求インターフェイスの使用
Windows 8 以降、SPB フレームワーク拡張機能 (SpbCx) は、SPB I/O 要求インターフェイスをサポートするシステム提供のコンポーネントです。 SPB 周辺機器ドライバーは、このインターフェイスを使用して、I²C、SPI、およびその他の単純な周辺機器バス (SPB) に接続されているデバイスに I/O 要求を送信します。 SpbCx は、さまざまな種類のバスで標準化された I/O 要求インターフェイスを利用できるようにすることで、さまざまなハードウェア プラットフォームやさまざまなハードウェア ベンダーの SPB コントローラーに渡って、周辺機器ファミリのドライバー サポートを提供するタスクを簡略化します。
次の条件が満たされた場合、SPB に接続された周辺機器のハードウェア ベンダーは、複数のバスの種類で動作が可能なデバイス ドライバーを 1 つ開発できます。
- 周辺機器は、これらのバスとハードウェア互換性があるものである必要があります。
- ドライバーは、これらのすべてのバスの種類で同じデバイス制御プロトコルを使用できます。
SPB フレームワーク拡張機能は、周辺ドライバーからバス固有のコードを排除することで、これらのドライバーの開発時間を短縮し、サポートされているバスの種類の間でより一貫性のある動作を保証します。
SPB に接続されている周辺機器はメモリ マップされず、これらのデバイスのドライバーは、ハードウェア レジスタに直接アクセスできません。 代わりに、SPB 周辺機器ドライバーは、デバイスとの間でデータをシリアル転送する SPB コントローラーに依存する必要があります。 このような転送を要求するには、ドライバーがデバイスに I/O 要求を送信する必要があります。 この I/O 要求は、SpbCx によって管理されるキューに送信されます。
SpbCx は SPB コントローラー ドライバーと連携して、ドライバーからの I/O 要求を処理します。 SPB コントローラーのハードウェア ベンダーは、コントローラー ハードウェアに固有のタスクを実行するための SPB コントローラー ドライバーを提供します。
ドライバーのみが、SPB コントローラーの I/O 要求インターフェイスに I/O 要求を送信できます。 アプリケーションは、SPB コントローラーに I/O 要求を直接送信することはできません。 代わりに、アプリケーションは SPB に接続された周辺機器のドライバーに I/O 要求を送信し、デバイスとの間でデータを転送する上で必要な可能性があるすべての I/O 要求を SPB コントローラーに送信するドライバーに依存できます。
ドライバーは、SPB に接続された周辺デバイスに I/O 要求を送信する前に、デバイスへの論理接続を開く必要があります。 この接続を開くには、ドライバーは、プラグ アンド プレイ マネージャーからハードウェア リソースとして受信した接続 ID を使用します。 詳細については、「SPB周辺機器 の接続 ID」を参照してください。
SpbCx と SPB コントローラー ドライバーは、SPB に接続された周辺機器の読み取りと書き込みの要求を共同で処理します。 IRP_MJ_READ 要求に応答して、SPB コントローラーは、周辺機器からドライバー提供のバッファーに指定されたバイト数を転送します。 IRP_MJ_WRITE 要求に応答して、SPB コントローラーは、ドライバー提供のバッファーから周辺機器に指定されたバイト数を転送します。
0 バイトを転送する IRP_MJ_READ または IRP_MJ_WRITE 要求の場合、SpbCx は STATUS_SUCCESS ステータス コードを使用して要求を完了しますが、操作は実行しません。
SpbCx と SPB コントローラー ドライバーは、次の SPB 固有の I/O 制御コード (IOCTL) も処理します。
SPB 周辺機器ドライバーは、これらの IOCTL を使用して、I/O 転送シーケンスを実行 します。 I/O 転送シーケンスは、1 つのアトミック バス操作として実行されるバス転送 (読み取りおよび書き込み操作) の順序付けされたセットです。 これらの IOCTL の詳細については、「I/O 転送シーケンス」を参照してください。
特定の SPB コントローラーの SPB コントローラー ドライバーは、ハードウェア固有の機能を実行するカスタム IOCTL をサポートしている場合があります。 これらは、SpbCx が処理しない IOCTL であり、SPB コントローラーのハードウェア ベンダーが、ハードウェア固有の操作を実行する必要がある SPB 周辺機器ドライバーの利点をサポートしています。 SPB 周辺機器ドライバーが SpbCx も SPB コントローラー ドライバーも認識しない IOCTL を送信した場合、操作は実行されず、I/O 要求、エラー ステータス値 STATUS_NOT_SUPPORTED で完了します。
SPB に接続された周辺機器のドライバーは、通常、ユーザー モード ドライバー フレームワーク (UMDF) ドライバーまたはカーネル モード ドライバー フレームワーク (KMDF) ドライバーのいずれかです。 読み取り、書き込み、または IOCTL 要求を SPB に接続された周辺機器に送信するには、UMDF ドライバーは IWDFIoRequest::Send などのメソッドを呼び出します。 KMDF ドライバーは、WdfIoTargetSendReadSynchronously、WdfIoTargetSendWriteSynchronously、WdfIoTargetSendIoctlSynchronousously などのメソッドを呼び出します。
SPB に接続された周辺機器に I/O 要求を送信する方法を示すコード例については、次のトピックを参照してください。