SPB コントローラー ドライバーの概要
SPB コントローラーは、SPB (simple peripheral bus) を制御し、SPB に接続された周辺機器との間でデータを転送するデバイスです。 SPB コントローラーのハードウェア ベンダーにより、コントローラーのハードウェア機能を管理するための SPB コントローラー ドライバーが提供されます。
Windows 8 以降、SPB フレームワーク拡張機能 (SpbCx) は、単純な周辺機器バス (SPB) 用のコントローラー ドライバーの開発を簡略化します。 SpbCx は、カーネル モード ドライバー フレームワーク (KMDF) のシステム提供の拡張機能です。 SPB コントローラー デバイスのハードウェア ベンダーは、ハードウェア固有のすべてのドライバー操作を実行するコントローラー ドライバーを提供します。 このドライバーは SpbCx と通信して SPB コントローラーに固有の操作を実行し、KMDF と直接通信して汎用ドライバー操作を実行します。
たとえば、SPB コントローラー ドライバーは通常、KMDF の WdfDeviceInitSetPnpPowerEventCallbacks メソッドを呼び出して電源イベント コールバックを受信するために登録し、WdfInterruptCreate メソッドを呼び出してドライバーの割り込みサービス ルーチン (ISR) を SPB コントローラーからの割り込みに接続します。 SPB 固有の操作を実行するために、SPB コントローラーは SpbCx デバイス ドライバー インターフェイス (DDI) を介して SpbCx と通信します。
SpbCx は、SBP コントローラー ドライバーと連携して、SPB に接続されている周辺機器の I/O 要求を処理します。 SpbCx は、SPB コントローラー ドライバーに共通する処理タスクを実行します。 これらのタスクには、SPB コントローラーの I/O 要求キューの管理が含まれています。 これらのキューには、バスに接続されている周辺機器を管理するドライバーからの I/O 要求が含まれています。 SPB コントローラー ドライバーは、これらの要求を処理するのに必要なすべてのハードウェア固有の操作を実行します。
次の図は、SPB コントローラー ドライバーと SpbCx を示しています。
SPB コントローラー ドライバーと SpbCx はどちらもカーネル モードで実行され、SpbCx DDI を介して相互に通信します。 SPB コントローラー ドライバーは、SpbCx によって実装されるドライバー サポート メソッドを呼び出します。 SpbCx は、SPB コントローラー ドライバーによって実装されるイベント コールバック関数を呼び出します。
SPB コントローラーに I/O 要求を送信するドライバーは、カーネル モード ドライバー フレームワーク (KMDF) を使用するカーネル モード ドライバー、またはユーザー モード ドライバー フレームワーク (UMDF) を使用するユーザー モード ドライバーのいずれかです。 これらのドライバーは、SPB に接続された周辺機器との間でデータを転送する読み取りおよび書き込み要求を送信することができます。 さらに、ドライバーは、SPB 固有の操作を実行する I/O 制御 (IOCTL) 要求を送信することができます。
SPB コントローラー ドライバーは、SPB コントローラー デバイスのハードウェア レジスタに直接アクセスして、SPB に接続されている周辺機器との間でデータ転送を開始します。 I2C などの SPB の場合、これらのデータ転送は比較的低速で行われます。 SPB コントローラーのハードウェア レジスタはメモリ マップされる可能性がありますが、周辺機器のレジスタには SPB を介して順次アクセスする必要があります。
SPB に接続された周辺機器との間でデータを転送する I/O 要求に応答して、SPB コントローラー ドライバーはバス転送を開始し、I/O 要求を保留中としてマークして転送が完了するのを待たずに戻ります。 その後、SPB コントローラー ハードウェアが転送を完了すると、コントローラーは割り込みを通知し、SPB コントローラー ドライバーの ISR は保留中の I/O 要求を完了、または要求された I/O 操作で次の転送を開始します。
ドライバーのみが、SPB コントローラーに直接 I/O 要求を送信することができます。 ユーザー モード アプリケーションが SPB に接続された周辺機器との間でデータを転送する場合、アプリケーションは SPB 周辺機器ドライバーに依存して、対応する読み取りまたは書き込み要求を SPB コントローラーに送信する必要があります。