次の方法で共有


USB Type-C® コネクタ システム ソフトウェア インターフェイス (UCSI) ドライバー

Microsoft は、高度な構成および電源インターフェイス (ACPI) トランスポート用の USB Type-C® コネクタ システム ソフトウェア インターフェイス (UCSI) 仕様に準拠したドライバーを提供します。 設計に ACPI トランスポートを備えた組み込みコントローラーが含まれている場合は、システムの BIOS/EC に UCSI を実装し、インボックス UCSI ドライバー (UcmUcsiCx.sys および UcmUcsiAcpiClient.sys) を読み込みます。

UCSI 準拠ハードウェアが ACPI 以外のトランスポートを使用している場合は、UCSI クライアント ドライバーを記述する必要があります。

組み込みコントローラーを備えたシステムの USB Type-C コンポーネントをサポートするためのドライバー

組み込みコントローラーを使用するシステムの例を次に示します。

USB Type-C ソフトウェア コンポーネントの図。

前の例では、USB ロールの切り替えはシステムのファームウェアで処理され、USB ロール スイッチ ドライバー スタックは読み込まれません。 別のシステムでは、デュアル ロールがサポートされていないため、ドライバー スタックが読み込まれない可能性があります。

上の図では、

  • USB デバイス側ドライバー

    USB デバイス側ドライバー 機能/デバイス/周辺機器にサービスを提供します。 USB 関数コントローラー クラス拡張機能は、MTP (メディア転送プロトコル) と BC 1.2 充電器を使用した充電をサポートしています。 Microsoft では、Synopsys USB 3.0 および ChipIdea USB 2.0 コントローラー用のインボックス クライアント ドライバーを提供しています。 の USB 関数コントローラー クライアント ドライバー プログラミング インターフェイス 使用して、関数コントローラー用のカスタム クライアント ドライバーを作成できます。 詳細については、「USB 関数コントローラー用 Windows ドライバーの開発」参照してください。

    SoC ベンダーは、充電器検出用の USB 関数下位フィルター ドライバーを提供する場合があります。 インボックス Synopsys USB 3.0 または ChipIdea USB 2.0 クライアント ドライバーを使用している場合は、独自のフィルター ドライバーを実装できます。

  • USB ホスト側ドライバー

    USB ホスト側ドライバーは、EHCI または XHCI 準拠の USB ホスト コントローラーで動作するドライバーのセットです。 ロール スイッチ ドライバーがホスト ロールを列挙すると、ドライバーが読み込まれます。 ホスト コントローラーが仕様に準拠していない場合は、USB ホスト コントローラー拡張機能 (UCX) プログラミング インターフェイスを使用してカスタム ドライバーを記述できます。 詳細については、「USB ホスト コントローラー用の Windows ドライバーの開発 」を参照してください。

    Windows 10 Mobile では、USB デバイス クラス のすべてがサポートされているわけではありません。

  • USBコネクターマネージャー

    Microsoft は、USB Type-C コネクタ システム ソフトウェア インターフェイス仕様で定義されている機能を実装する、Windows (UcmUcsiCx.sys) を備えた UCSI インボックス ドライバーを提供しています。 この仕様では、UCSI の機能について説明し、ハードウェア コンポーネント デザイナー、システム ビルダー、およびデバイス ドライバー開発者向けのレジスタとデータ構造について説明します。

    このドライバーは、コントローラーが埋め込まれたシステムを対象としています。 このドライバーは、Microsoft が提供する USB コネクタ マネージャー クラス拡張ドライバー (Ucmcx.sys) へのクライアントです。 ドライバーは、ファームウェアへの要求を開始してデータまたは電源の役割を変更したり、ユーザーにトラブルシューティング メッセージを提供するために必要な情報を取得したりするなどのタスクを処理します。

Windows で必要な UCSI コマンド

すべての UCSI 実装で必要なコマンドについては、UCSI 仕様を参照してください。

必須としてマークされているコマンドに加えて、Windows には次のコマンドが必要です。

  • GET_ALTERNATE_MODES
  • GET_CAM_SUPPORTED
  • GET_PDOS
  • SET_NOTIFICATION_ENABLE: システムまたはコントローラーは、SET_NOTIFICATION_ENABLE内で次の通知をサポートする必要があります。
    • サポートされるプロバイダー機能の変更
    • ネゴシエートされた電力レベルの変更
  • GET_CONNECTOR_STATUS: システムまたはコントローラーは、GET_CONNECTOR_STATUS内で次のコネクタの状態の変更をサポートする必要があります。
    • サポートされるプロバイダー機能の変更
    • ネゴシエートされた電力レベルの変更

BIOS に UCSI を実装するために必要なタスクについては、「UCSIの Intel BIOS 実装」を参照してください。

UCSI 2.0 以降に対応した UCM-UCSI ACPI デバイス

Windows 11 バージョン 22H2 9 月の更新プログラム以降、Windows UCM-UCSI ACPI デバイス ドライバーは UCSI 仕様バージョン 2.0 および 2.1 をサポートしています。 UCSI 仕様 2.0 には、UCSI 仕様の表 3-1 データ構造で定義されているデータ構造のメモリ マッピングに重大な変更があります。 下位互換性を維持するために、Windows では、仕様バージョン 2.0 以上の UCSI PPM が、ACPI ファームウェアの UCM-UCSI ACPI デバイス の下に次の_DSM関数を実装し、0 以外の値を返して、UCSI OPM が報告された UCSI 仕様バージョンに従う必要があることを示す必要があります。

  • Arg0: UUID = 6F8398C2-7CA4-11E4-AD36-631042B5008F
  • Arg1: リビジョン ID = 0
  • Arg2: 関数インデックス = 5
  • Arg3: 空のパッケージ (使用されていません)

戻り値:

要素 オブジェクトの種類 説明
UsePpmReportedUcsiVersion 整数 (32 ビット) 0x00000000 (既定値): UCSI 仕様表 3-1 で定義されている VERSION 構造 値が 2.0 以上の場合、UCSI OPM は UCSI 仕様 1.2 に従います。 それ以外の場合、UCSI OPM は、VERSION 構造体の値に従って UCSI 仕様に従います。

手記

UCM-UCSI ACPI デバイスの場合、これは既存の _DSM メソッドの新しい関数です。 この_DSMメソッドの他の機能は、UCSI ドキュメントの Intel BIOS 実装に従って実装されている必要があります。 サポートされているすべての関数のビットマスクを返す関数 0 も、それに応じて更新する必要があります。

UCSI のフローの例

このセクションで説明する例では、USB Type-C ハードウェア/ファームウェア、UCSI ドライバー、およびオペレーティング システム間の相互作用について説明します。

DRP 役割の検出

  1. USB Type-C ハードウェア/ファームウェアがデバイス接続イベントを検出し、Windows 10 システム DRP システムが最初に UFP ロールになります。
    1. ファームウェアは、コネクタの変更を示す通知を送信します。
    2. UCSI ドライバーは、GET_CONNECTOR_STATUS要求を送信します。
    3. ファームウェアは、接続状態 = 1、コネクタ パートナーの種類 = DFP に応答します。 ​
  2. USB 関数スタック内のドライバーは、列挙に応答します。
  3. USB コネクタ マネージャー クラス拡張機能は、USB 関数スタックが読み込まれたことを認識するため、システムの状態が間違っています。 UCSIドライバーに、USB操作ロールの設定 を送信し、電源方向ロールの設定 要求をファームウェアに送信するよう指示します。
  4. USB Type-C ハードウェア/ファームウェアは、DFP とのロール スワップ操作を開始します。

充電器の不一致エラー状態の検出

  1. USB Type-C ハードウェア/ファームウェアは、充電器が接続されていることを検出し、既定の電源コントラクトをネゴシエートします。 また、充電器がシステムに十分な電力を供給していないことを確認します。

  2. USB Type-C ハードウェア/ファームウェアは、低速充電ビットを設定します。

    1. ファームウェアは、コネクタの変更を示す通知を送信します。
    2. UCSI ドライバーは、GET_CONNECTOR_STATUS要求を送信します。
    3. ファームウェアは、Connect Status = 1、Connector Partner Type=DFP、Battery Charging Status = Slow/Trickle で応答します。
  3. USB コネクタ マネージャー クラス拡張機能は、充電器の不一致のトラブルシューティング メッセージを表示する通知を UI に送信します。

UCSI をテストする方法

UCSI 実装をテストする方法は多数あります。 UCSI BIOS/EC 実装で個々のコマンドをテストするには、UCSIControl.exeを使用します。これは、MUTT Software Packで提供されています。 完全な UCSI 実装をテストするには、Windows ハードウェア ラボ キット (HLK) にある UCSI テストと、Type-C 手動相互運用手順の手順の両方を使用します。

UCSIControl.exe

UCSIControl.exeを使用して、UCSI BIOS/EC 実装内の個々のコマンドをテストできます。 このツールを使用すると、UCSI ドライバーを介して UCSI コマンドをファームウェアに送信できます。 ドライバーを読み込んで実行し、ドライバーへのテスト インターフェイスを有効にする必要があります。 既定では、このインターフェイスは、リテール システム上の承認されていないユーザーがアクセスできないようにするために有効になっていません。

  1. デバイス マネージャー (devmgmt.msc) 内の UCSI USB コネクタ マネージャーという名前のデバイス ノードを見つけます。 ノードは、ユニバーサル シリアル バス コントローラー カテゴリの下にあります。

  2. デバイスを長押し (または右クリック) し、[プロパティ] 選択し、[の詳細] タブを開きます。

  3. ドロップダウンから [デバイス インスタンス パス を選択し、プロパティ値をメモします。

  4. レジストリ エディター (regedit.exe) を開きます。

  5. このキーの下のデバイス インスタンス パスに移動します。

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\<デバイスインスタンスパス>\デバイスパラメータ

  6. TestInterfaceEnabled という名前の DWORD 値を作成し、値を 0x1 に設定します。

  7. デバイス マネージャーのデバイス ノードで [ を無効にする] オプションを選択し、[を有効にする] 選択して、デバイスを再起動します。 または、PC を再起動することもできます。

UcsiControl.exe を実行してヘルプを表示できますか?.

一般的なコマンドを次に示します。

UCSI コマンド UcsiControl.exe コマンド
PPM のリセット UcsiControl.exe 0 1 を送信する
コネクタのリセット ソフト リセット: UcsiControl.exe Send 0 10003

ハード リセット: UcsiControl.exe 0 810003を送信する
通知の有効化の設定 すべての通知: UcsiControl.exe 0 ffff0005 を送信します。

コマンド完了のみ: UcsiControl.exe 0 00010005を送信する

通知なし: UcsiControl.exe 0 00000005を送信する
Get Capability UcsiControl.exe 0 6 を送信する
コネクタ機能の取得 UcsiControl.exe 0 10007 を送信する
UOM の設定 DFP: UcsiControl.exe 0 810008を送信する

UFP: UcsiControl.exe Send 0 1010008

DRP: UcsiControl.exe Send 0 2010008
UOR の設定 DFP: UcsiControl.exe 0 810009を送信する

UFP: UcsiControl.exe Send 0 1010009

承諾: UcsiControl.exe 0 2010009を送信する
PDR の設定 プロバイダー: UcsiControl.exe Send 0 81000B

コンシューマー: UcsiControl.exe Send 0 101000B

承諾: UcsiControl.exe Send 0 201000B
PDO を取得する ローカル ソース: UcsiControl.exe Send 7 00010010

ローカル シンク: UcsiControl.exe Send 3 00010010

リモート ソース: UcsiControl.exe Send 7 00810010

リモート シンク: UcsiControl.exe Send 3 00810010
コネクタの状態を取得する UcsiControl.exe 0 010012を送信する
エラーの状態を取得する UcsiControl.exe 0 13 を送信する