SerCx2 アーキテクチャの概要
SerCx2 は、シリアル コントローラー ドライバーと連携して、周辺機器ドライバーとシリアル接続周辺機器が通信できるようにします。 通常、シリアル コントローラはチップ上の SoC (システム オン チップ) チップに統合されていて、SoC チップの外部にあるが同じプリント基板にはんだ付けされた周辺機器との Low Pin Count 通信を実現します。
次の図は、シリアル接続された周辺機器とこのデバイスのドライバーの間の通信経路を示しています。 この周辺機器ドライバーは、カーネル モードまたはユーザー モードで実行され、周辺機器が接続されているシリアル ポートに I/O 要求を送信します。
SerCx2 とシリアル コントローラー ドライバーの両方がカーネル モードで実行され、SerCx2 デバイス ドライバー インターフェイス (DDI) を介して相互に通信します。 シリアル コントローラー ドライバーは、SerCx2 によって実装されるドライバーサポート メソッドを呼び出します。 SerCx2 は、シリアル コントローラー ドライバーによって実装されるイベント コールバック関数を呼び出します。
通常、シリアル コントローラーのハードウェア レジスタはメモリにマップされます。 シリアル コントローラー ドライバーはこれらのレジスタに直接アクセスし、シリアル ポートの構成してシリアル ポートに接続されている周辺機器との間のデータを転送します。 データ転送が長い場合、SerCx2 では通常、DMA 転送が使用されます (前の図では示されていません)。
周辺機器ドライバーが周辺機器への論理接続を開くために必要な情報は、接続 ID と呼ばれる特殊な種類のハードウェア リソースにカプセル化されます。 詳細については、「シリアル接続された周辺機器の接続 ID」を参照してください。
通常、ドライバーのみが I/O 要求をシリアル コントローラーに直接送信します。 ユーザー モード アプリケーションがシリアル接続された周辺機器と通信する必要がある場合、デバイスの周辺機器ドライバーは、アプリケーションとデバイスの間の仲介役として機能します。 アプリケーションが周辺機器との間でデータを転送する必要がある場合、アプリケーションは書き込み (IRP_MJ_WRITE) 要求または読み取り (IRP_MJ_READ) 要求を周辺機器ドライバーに送信し、周辺機器ドライバーは対応する書き込みまたは読み取り要求をシリアル コントローラーに送信して応答します。 さらに、周辺機器ドライバーは、シリアル ポートを構成するデバイス I/O 制御要求 (IOCTL) を送信できます。 SerCx2 でサポートされている IOCTL の一覧については、「シリアル I/O 要求インターフェイス」を参照してください。
シリアル コントローラーに I/O 要求を送信する周辺機器ドライバーは、カーネル モード ドライバー フレームワーク (KMDF) を使用するカーネル モード ドライバーか、ユーザー モード ドライバー フレームワーク (UMDF) を使用するユーザー モード ドライバーのいずれかです。 SerCx2 は、周辺機器ドライバーによってシリアル コントローラーに送信される I/O 要求のキューを管理します。
読み取りまたは書き込み要求に応答して、SerCx2 は 1 つ以上の I/O トランザクションを開始して、シリアル コントローラーと要求内のデータ バッファーの間でデータを移動します。 各 I/O トランザクションは、プログラムされた I/O (PIO) または DMA を使用して、シリアル コントローラーと要求のデータ バッファーの間でデータを転送します。 シリアル コントローラー ドライバーでサポートされる I/O トランザクションの種類は、シリアル コントローラーのハードウェア機能によって異なります。 詳細については、「SerCx2 I/Oトランザクションの概要」を参照してください。