USBデバイスドライバー(パソコン側ドライバー)

USBデバイスをパソコンに接続して使用する場合は、パソコン側に、そのデバイスに対応したデバイスドライバーを用意する必要があります。以下では、WindowsのUSBデバイスドライバーについて説明します。

USBメモリー(マスストレージクラス)、USBマウスやキーボード(HIDクラス)など、代表的なデバイスクラスに準拠したデバイスの場合は、Windowsに標準で同梱されているドライバーを利用することができます。しかし、Windows標準のドライバーが利用できない場合や、ベンダー独自の通信プロトコルを用いる場合には、そのデバイス専用のドライバーを用意しなければなりません。

パソコンにUSBデバイスが接続されると、まずUSBバスドライバーがこれを検出し、このデバイスがどのようなデバイスであるかを特定します。これをエニュメレーションと呼びます。エニュメレーションはコントロール転送によって行われます。パソコンはデバイスに対して各種の標準リクエストを発行し、デバイスからディスクリプターを取得します。ディスクリプターによって、パソコンはこのデバイスがどのようなデバイスであるかを知ることができます。

ディスクリプターの取得に成功すると、Windowsはその内容に応じて適切なデバイスドライバーを呼び出します。個々のデバイスドライバーがどのデバイスの制御を担当するかは、ドライバー本体(○○○.sysファイル)ではなく、それと同時に配布されるINFファイル(○○○.infファイル)に記述されています。マスストレージクラスやHIDクラスといったデバイスクラスに準拠するドライバーは、特定のクラスIDを持つデバイスを制御します。ベンダー独自の通信プロトコルを用いるドライバーの場合は、特定のベンダーID、プロダクトIDを持つデバイスを制御します。

USBデバイスドライバーの機能には次のようなものがあります。

デバイスとの通信

デバイスドライバは、パソコン⇔デバイス間の通信の詳細を隠ぺいし、アプリケーションに対してWindows標準のAPIを公開します。このAPIはファイルの入出力と共通になっています。すなわち、アプリケーションはファイルに対して入出力を行うのと同じ方法によってデバイスに対して入出力を行うことができます。これによってアプリケーションは、バルク転送・インタラプト転送といったUSBの転送方式の詳細を意識することなくデバイスを制御することができます。

プラグアンドプレイ

USBデバイスはプラグアンドプレイに対応しています。パソコンの動作中に新たなUSBデバイスが接続されると、これに対応するデバイスドライバーが呼び出されます。
ドライバーはデバイスとの通信をただちに開始できるよう適切な準備を行います。またUSBデバイスが抜去されるときは、ドライバーはデバイスとの通信を終了し、必要な後処理を行います。

電源管理

デバイスはいくつかの電源状態を持ちます。電源ON、OFFの他にスリープ状態を持つものもあります。ドライバーはパソコン本体の電源状態やデバイスとの通信状況に応じてデバイスの電源状態を変更し、余分な電力消費を抑制します。

USB開発の効率アップはこちら