この記事では、I2C トランスポート経由で HID をサポートするデバイスのドライバー スタックについて説明します。
アーキテクチャと概要
HID I2C ドライバー スタックは、Microsoft によって提供される既存のコンポーネントと新しいコンポーネント、および I2C シリコン製造元によって提供されるコンポーネントで構成されます。 次の図は、スタックとこれらのコンポーネントを示しています。
Windows 8 には、オペレーティング システムと効果的に通信するための低電力でシンプルなバス用のインターフェイスが用意されています。 このインターフェイスは単純な周辺機器バス (SPB) と呼ばれ、相互集積回路 (I2C) やシリアル周辺機器インターフェイス (SPI) などのバスをサポートします。 SPB の詳細については、「Simple Peripheral Bus」を参照してください。
Windows 8 には、HID over I2C のプロトコル仕様バージョン 1.0 を実装する KMDF ベースの HID ミニポート ドライバーが用意されています。 このドライバーの名前は HIDI2C.sys です。 Windows では、互換性のある ID の一致に基づいてこのドライバーが読み込まれます。これは、Advanced Configuration and Power Interface (ACPI) によって公開されます。 ドライバーは、HID IOCTL と API セットを使用するソフトウェアの HID IOCTL アプリケーション レベルの互換性を使用するアプリを保証します。 デバイスは、注意が必要な場合、またはデータがある場合にホストをアサートします。 ただし、アサーションが発生する前に、GPIO 接続が存在する必要があります。
注: HIDI2C.sys デバイス ドライバーでは、I2C バスのみがサポートされます。 Windows 8 では、SPI、SMBUS、またはその他の低電力バスはサポートされていません。
I2C コントローラー ドライバー
I2C コントローラー ドライバーは、読み取りおよび書き込み操作を実行するシリアル周辺機器バス (SPB) IOCTL インターフェイスを公開します。 このドライバーは、実際のコントローラー組み込み関数 (I2C など) を提供します。 SPB クラス拡張機能は、コントローラー ドライバーに代わって、リソース ハブとの対話をすべて処理し、同時ターゲットを管理するために必要なキューを実装します。
注 : HID I2C ドライバーは、SPB プラットフォームと互換性のある I2C バスがないシステムでは機能しません。 お使いのデバイス システム上の I2C バスが SPB プラットフォームと互換性があるかどうかを確認するには、システムの製造元にお問い合わせください。
GPIO コントローラー ドライバー
汎用入出力 (GPIO) コントローラーは、GPIO 経由でデバイスから割り込みを提供します。 このコントローラーは、多くの場合、新しいデータやその他のイベントを Windows に通知するために GPIO ピンを使用する単純な下位コンポーネントです。 GPIO は、I2C チャンネル以外の方法でデバイスを制御することもできます。
リソース ハブ
SoC プラットフォーム上の接続は、SoC で使用されるバス上のデバイス列挙の標準がないため、通常は検出できません。 そのため、これらのデバイスは、Advanced Configuration and Power Interface (ACPI) で静的に定義する必要があります。 さらに、コンポーネントには、厳密な分岐ツリー構造ではなく、複数の依存関係が複数のバスにまたがっていることがよくあります。
リソース ハブは、すべてのデバイスとバス コントローラー間の接続を管理するプロキシです。 HIDI2C ドライバーは、リソース ハブを使用して、デバイスを開く要求を適切なコントローラー ドライバーに再ルーティングします。 リソース ハブの詳細については、「SPB 接続デバイスの接続 ID」を参照してください。