SerCx2 で管理されるシリアル ポート上のデバイスの周辺機器ドライバー
通常、SerCx2 が管理するシリアルポートは、周辺機器に常時接続されています。 このデバイスは、シリアル ポートに I/O 要求を送信する周辺機器ドライバーによって制御されます。 これらのリクエストは、デバイスとの間でデータを転送し、シリアル ポートの状態を構成します。 周辺機器ドライバーによって送信された I/O 要求は、SerCx2 と関連するシリアル コントローラー ドライバーによって共同で処理されます。
多くの場合、シリアル コントローラーはシステム オン チップ (SoC) 集積回路に含まれています。 SoC チップ上のシリアル コントローラーのシリアル ポートに接続される可能性のある周辺デバイスの例には、GPS、無線 LAN、カメラ、Bluetooth デバイスなどがあります。
シリアル接続された周辺機器の周辺機器ドライバーは、通常、カーネル モード ドライバー フレームワーク (KMDF) ドライバーまたは ユーザー モード ドライバー フレームワーク (UMDF) ドライバーです。 このデバイスと通信するには、周辺機器ドライバーはまずシリアル コントローラーへの論理接続を開き、ドライバーが I/O 要求を送信できるファイル ハンドルを受信する必要があります。 詳細については、SerCx2 管理のシリアル ポートを開くをご覧ください。
このページの内容
シリアル ドライバー アーキテクチャ
次のブロック図は、周辺機器 (図の下部) とこのデバイスの周辺機器ドライバー (図の上部) の間の通信パスを形成するソフトウェアとハードウェアの層を示しています。 この例では、周辺機器はシリアル コントローラーのポートと GPIO コントローラーの割り込みピンに接続されています。
この例の周辺機器ドライバーは、I/O 要求を周辺機器に送信する UMDF ドライバーです。 これらのリクエストは、図の左側に示されている通信パスを通って移動します。 リクエストは SerCx2 とシリアル コントローラー ドライバーによって処理されます。 周辺機器ドライバーは、シリアル ポートのハードウェア構成を設定し (ボー レートの変更など)、シリアル ポートを介して周辺機器との間でデータを転送する I/O 操作を要求できます。 詳細については、I/O リクエスト パスをご覧ください。
周辺機器からの割り込みは、上の図の右側の通信パスを通って上に進みます。 この図の右下隅に示されているように、周辺デバイスからの割り込みピンは汎用 I/O (GPIO) コントローラーのピンに接続されています。 この GPIO ピンは、周辺機器から割り込み信号を受信するように構成されています。 SoC ベースのハードウェア プラットフォームでは、GPIO コントローラーがプログラマブル割り込みコントローラーの役割を果たすことがよくあります。 詳細については、割り込みパスをご覧ください。
図で灰色で示されている 2 つのブロックは、システム提供のモジュールです。 GPIO フレームワーク拡張機能 (GpioClx) は、Windows 8 以降で利用可能です。 SerCx2 と同様、GpioClx も KMDF の拡張機能です。 GpioClx は、さまざまな GPIO コントローラーに共通の機能を実行します。 GpioClx は、GPIO コントローラー内のすべてのハードウェア固有の操作を管理する GPIO コントローラー ドライバーと連携して動作します。 詳細については、GPIO ドライバー サポートの概要をご覧ください。
I O リクエスト パス
周辺機器にデータを送信するために、周辺機器ドライバーは書き込み (IRP_MJ_WRITE) 要求をシリアル コントローラーに送信します。 周辺機器からデータを受信するために、周辺機器ドライバーは読み取り (IRP_MJ_READ) 要求をシリアル コントローラーに送信します。
さらに、Windows は、周辺機器ドライバーがシリアル コントローラーに固有のさまざまな I/O 制御操作を実行するために使用できる一連のデバイス I/O 制御要求 (IOCTL) を定義します。 以下は、ペリフェラル ドライバーが要求できる I/O 制御操作の例です:
- シリアルポートがデータを送受信するボーレートを設定します。
- 読み取りおよび書き込みリクエストのタイムアウト間隔を設定します。
- 周辺機器ドライバーが通知を受信するシリアル ポートでのハードウェア イベントのセットを指定します。
SerCx2 は、インボックス シリアル ドライバー、Serial.sys、およびシリアル フレームワーク拡張機能 (SerCx) のバージョン 1 と同じシリアル IOCTL の多くをサポートします。 詳細情報:
- SerCx2 が特定のシリアル IOCTL をサポートしているかどうかを判断するには、シリアル I/O リクエスト インターフェイスの表をご覧ください。
- Windows シリアル I/O 要求インターフェイスによって定義されるすべてのシリアル IOCTL の詳細な説明については、シリアル デバイス制御要求をご覧ください。
- Serial.sys、SerCx、および SerCx2 の概要については、シリアル コントローラー ドライバーの概要をご覧ください。
割り込みパス
シリアル ドライバー アーキテクチャの図に示すように、周辺機器は GPIO ピンを使用してデバイスの割り込みを周辺ドライバーに送信します。 周辺デバイスからの割り込み信号に応答して、GPIO コントローラーはハードウェア割り込み (プライマリ 割り込みと呼ばれる) をプロセッサーに送信します。 オペレーティング システムは、この割り込みを GpioClx の ISR に送信します。 次に、GpioClx はどの GPIO ピンが割り込みを引き起こしたかを特定し、周辺デバイスから仮想割り込み (セカンダリ割り込みと呼ばれる) のためのグローバルシステム割り込み (GSI) 識別子を検索します。 GpioClx は GSI を HAL に供給し、HAL はペリフェラル ドライバーの ISR を呼び出します。 割り込みを処理するために、周辺機器ドライバーは通常、SerCx2 およびシリアル コントローラー ドライバーを介して 1 つ以上の I/O 要求を周辺機器に送信します。 プライマリ割り込みとセカンダリ割り込みの詳細については、GPIO 割り込みをご覧ください。
GPIO 割り込みは、周辺機器ドライバーが周辺機器のハードウェア イベントの通知を受信するための 1 つの方法にすぎません。 もう 1 つの方法は、シリアル ポートで特定の種類のハードウェア イベントが発生したときに、周辺機器ドライバーが SerCx2 およびシリアル コントローラー ドライバーからの通知を要求することです。 たとえば、周辺機器ドライバーは、シリアル コントローラーが周辺機器からシリアル データを受信したときに通知を受けるように要求できます。 これらの通知を要求するために、周辺機器ドライバーは IOCTL_SERIAL_SET_WAIT_MASK 要求を周辺機器に送信して監視するイベントのセットを指定し、次に IOCTL_SERIAL_WAIT_ON_MASK を送信します。これらのイベントのリッスンを開始するよう要求します。 これらの要求は、シリアル コントローラー ドライバーの助けを借りて、SerCx2 によって処理されます。 ペリフェラル ドライバーが監視できるイベントの種類の詳細については、IOCTL_SERIAL_SET_WAIT_MASK で説明されている SERIAL_EV_XXX を参照してください。
ただし、シリアル コントローラーは、D0 デバイスの電源状態にある場合にのみハードウェア イベントを検出できます。 シリアル コントローラーが低電力状態にある場合、周辺機器ドライバーはシリアル コントローラーからの通知に依存して、たとえばドライバーが読み取る新しいデータが周辺機器にいつあるかを知ることができません。 この場合、周辺デバイスは GPIO ピンを介して割り込み信号 (またはウェイク信号) を送信する必要があります。 GPIO コントローラーはほとんど電力を消費せず、通常、他のほとんどのデバイスが低電力状態に入った後もアクティブなままになります。