SPB コントローラーは、 単純な周辺機器バス (SPB) を制御し、SPB に接続されている周辺機器との間でデータを転送するデバイスです。 SPB コントローラーのハードウェア ベンダーは、コントローラーのハードウェア機能を管理するための SPB コントローラー ドライバーを提供します。
Windows 8 以降、SPB フレームワーク拡張機能 (SpbCx) は 、単純な周辺機器バス (SPB) 用のコントローラー ドライバーの開発を簡略化します。 SpbCx は、 Kernel-Mode Driver Framework (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 要求を送信するドライバーは、 Kernel-Mode Driver Framework (KMDF) を使用するカーネル モード ドライバーか、 User-Mode Driver Framework (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 コントローラーに送信する必要があります。