次の方法で共有


Windows での USB Type-C 低速充電通知の要件

USB Type-C の採用により、ユーザーは最適でない電源を使用してシステムを充電できます。 この記事では、ハードウェア ベンダーとファームウェア ベンダー向けに、ユーザーが USB Type-C 電源を接続した際の電力ネゴシエーションで電力コントラクトが最適ではないとわかった場合に、その情報を Windows で通知する方法について説明します。

USB Type-C 充電

ユーザーに一貫したエクスペリエンスを提供するために、Microsoft はシステム認証要件 USBTypeCCharging を定義しました。 この要件によると、バッテリーを搭載したシステムに USB Type-C ポートがあり、そのポートを使用してシステムを充電できる場合、そのポートは USB Type-C および電力供給 (PD) の仕様に加えて、次の条件を満たす必要があります。

  • システムは、システムに十分な電力を提供する USB Type-C 充電器を使用して、完全に放電したバッテリーから充電できる必要があります。
  • システムのすべての USB Type-C ポートはシステムの充電をサポートしている必要があります。
  • システムのすべての USB Type-C ポートは、15 ワットでの給電をサポートする必要があります。
  • システムは、システムに十分な電力を供給する PD 準拠の充電器からの充電を許可する必要があります。
  • システムとソフトウェアは、製造元に関係なく、すべての PD 準拠の電源 (充電器、ハブ、ドックなど) を同じように扱う必要があります。
  • すべての USB Type-C 充電通知は、サード パーティ製ソフトウェアによって提供されるのではなく、Windows の組み込み通知に依存する必要があります。

Windows では、コンピューターに接続した充電器やドックが供給する電力が、電力コントラクトのネゴシエーション後に、コンピューターの最適な充電に必要な電力よりも低いとわかった場合、ユーザーにその情報を通知することができます。 この機能は、次のタイプの UcmCx ドライバーによって管理される USB Type-C コネクタを備えたすべてのコンピューターにあります。

  1. UCSI 対応のコンピューターでは、Windows のインボックス UCM-UCSI ACPI クライアント ドライバーが、USB Type-C コネクタを管理しています。 このソリューションをお勧めするのは、Windows によって提供されるドライバーを使用するため、OEM や IHV が独自のドライバーを開発する必要がないためです。
  2. ハードウェアまたはファームウェアに PD ステート マシンを実装し、UCSI に準拠していないコンピューター用の UcmCx クライアント ドライバー

UCSI 対応コンピューター

UCSI 対応マシンには通常、PD ステート マシンを管理する Platform Policy Manager (PPM) ファームウェアを含むコントローラーが組み込まれています。 この管理は OS Policy Manager (OPM) に対して透過的です。OPM が Windows のインボックス UCSI ドライバーに実装されているエンティティであるためです。 PPM は、UCSI 仕様で規定された対話メカニズムを使用して OPM とやり取りします。

PPM が低速充電について OPM に通知できるメカニズムを次に示します。 低速充電は、コネクタの電力ロールが電力消費側である場合にのみ Windows にレポートされます。

  1. PPM から OPM への通知であり、コネクタ変更インジケーター (CCI) が、低速充電通知の送信元となるコネクタ番号に設定されています。 この通知に応答して、OPM は PPM に GET_CONNECTOR_STATUS UCSI コマンドを送信します。 PPM は、次のビットが設定された GET_CONNECTOR_STATUS データでこのコマンドに応答する必要があります。

    1. コネクタ ステータス変更 (16-0) バッテリー充電ステータス変更ビットが 1 に設定されます。
    2. バッテリー充電能力ステータス (65-64)- 充電していない (値 0)、充電速度が遅い (値 2)、または充電速度が非常に遅い (値 3) に設定されます。
  2. コンピューターがシャットダウン中または Sx (x > 0) にあるときに低速充電器が接続された場合、OPM がブート後または Sx 復帰後に PPM に GET_CONNECTOR_STATUS を送信するときに、PPM はバッテリー充電能力ステータスを上記 1b で説明した 3 つの値のいずれかに設定する必要があります。 Sx 復帰時、OPM は通常、PPM_RESET の後に GET_CONNECTOR_STATUS コマンドを PPM に送信します。

    逆に、コンピューターが Sx (x > 0) にあるときに公称充電器が接続された場合、OPM は GET_CONNECTOR_STATUS を送信するときに、GET_CONNECTION_STATUS データのバッテリー充電能力ステータス フィールド (65-64) が公称充電速度 (値 1) に設定されていることを求めます。

BatteryChargingCapabilityStatus::NotCharging (値 0) に関する特別な考慮事項

GET_CONNECTOR_STATUS::Batter Charging Capability Status の「Not Charging」値は 0 で、これは既定値でもあります。 したがって、コネクタ ステータス変更 (16-0) バッテリー充電ステータス変更ビットが 1 に設定されていない限り、OPM はこれが既定値なのか、PPM によって充電していないことを示すために 0 に明示的に設定されたのかを判断できません。 このビットが 0 に設定されている場合、OS は、ステータスが Not Charging である (充電されていない) ときにバッテリー充電ステータスを無視することがあります。

したがって、PPM について強くお勧めするのは、充電していない/低速/非常に低速の充電をレポートするときには、常にコネクタ ステータス変更 (16-0) バッテリー充電ステータス変更ビットを 1 に設定することです。 この推奨事項は、充電ステータスを管理するための PPM の実装を簡素化することです。

低速充電と超低速充電の特別なケース

このセクションには、OEM、IHV、または UCSI ファームウェアの所有者に対する具体的な推奨事項は含まれていません。 むしろ、充電通知に関して Windows のインボックス UCSI ドライバーが採用する特定のロジックについて説明します。これは、UCSI ファームウェアの設計時に役立つ知識となる可能性があります。

デバイスが別のデバイスに接続された後の最初の通知で、GET_CONNECTOR_STATUS の応答データを取得した後、以下の条件が満たされる場合、コネクタ ステータス変更 (16-0) バッテリー充電ステータス変更ビットが 1 に設定されていなくても、UCSI ドライバーは OS に低速充電をレポートします。

  1. コネクタ ステータス変更 (16-0): ConnectChange は、これが別のデバイスの最初の接続通知であることを示します。
  2. バッテリー充電能力ステータス (62-65) が値 2 または 3 に設定されます。

この振る舞いの背後にある理由は、UCSI ドライバーはその値が 0 であり、これが既定値であるため、Not Charging (充電されていないこと) が意図的であったかどうかを知らないということです。 しかし、値 2 と 3 は、バッテリー充電ステータスの変更に依存せずに処理できます。 詳細については、次のセクションを参照してください。

UCSI 準拠テスト

最適な電力コントラクトはコンピューターに固有のものであるため、Windows では Slow (低速充電) や Not Charging (充電されていない) などのトースト通知のテストを提供していません。テストでは、通知の検証対象となる電力レベルがわからないためです。 ただし、OEM には、USB Type-C MUTT を USB Type-C ポートに接続して行う UCSI 準拠テストを使用して、PPM から OPM へのバッテリー充電通知が想定どおりに機能しているかを検証することをお勧めします。

UCMCx クライアント ドライバー

UcmCx クライアント ドライバーは、UCSI 仕様に準拠せずに USB Type-C コネクタを管理します。 USB Type-C コネクタに関するその他の情報を OS にレポートする中で、クラス拡張機能は USB Type-C コネクタの充電レベルの変化について OS に通知し続けます。 クライアント ドライバーがコネクタの UCM_CHARGING_STATE を OS に通知するために使用できる UmCx DDI を次に示します。

  1. UcmConnectorTypeCAttach: UCM に新しい USB Type-C デバイスが接続されたことをレポートするとき、クライアントは入力パラメーターの UCM_CONNECTOR_TYPEC_ATTACH_PARAMS::ChargingState を使用して充電レベルをレポートできます。

  2. UcmConnectorPdConnectionStateChanged: 電力ネゴシエーションでわかった ROD を UCM にレポートするときに使用します。 クライアントは、UCM_CONNECTOR_PD_CONN_STATE_CHANGED_PARAMS::ChargingState を使用して充電レベルをレポートできます。

  3. UcmConnectorChargingStateChanged: クライアント ドライバーが OS に充電状態を更新する場合に使用します。 この DDI の Param2 には、コネクタの充電状態が含まれます。

次の列挙型 UCM_CHARGING_STATE の値を考慮して、ユーザーにトースト通知を表示します。

  • UcmChargingStateNotCharging
  • UcmChargingStateSlowCharging
  • UcmChargingStateTrickleCharging