透過採用 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 可以在使用者插入電源線或充電座時通知使用者,該停電座已交涉的電源合約比計算機最佳充電所需的電源合約還要少。 這項功能存在於所有具有 USB Type-C 連接器的機器中,這些連接器是由下列 UcmCx 驅動程式類型所管理:
- 在 支援UCSI 的機器上,UCM-UCSI ACPI用戶端驅動程式會管理USB Type-C連接器的收件匣。 建議使用此解決方案,因為它使用 Windows 提供的驅動程式,而且不依賴 OEM 或 IHV 開發自己的驅動程式。
- 已實作硬體或韌體中 PD 狀態機器且不符合 UCSI 規範之電腦的 UcmCx 用戶端驅動程式。
支援UCSI的電腦
支援UCSI的電腦通常具有內嵌控制器,其中包含平台原則管理員 (PPM) 韌體來管理 PD 狀態機器。 此管理對OS原則管理員而言是透明的 (OPM) ,這是收件匣 UCSI 驅動程式所實作的OS實體。 PPM 會使用 UCSI規格 所配置來與 OPM 互動的互動機制。
以下是 PPM 可通知 OPM 緩慢充電的機制。 只有在連接器的電源角色是電源取用者時,才會向 Windows 回報緩慢充電。
從 PPM 到 OPM 的通知,其連接器變更指標 (CCI) 設定為要從中緩慢充電通知的連接器號碼。 為了回應此通知,OPM 會將 GET_CONNECTOR_STATUS UCSI 命令傳送至 PPM。 PMM 應該使用GET_CONNECTOR_STATUS設定下列位的數據來回應此命令。
- 連接器狀態變更 (16-0) 電池充電狀態變更位設定為 1。
- 電池充電功能狀態 (65-64) 設為 未 充電 (值 0) 、緩慢充電速率 (值 2) 或非常慢的充電速率 (值 3) 。
如果當機器關閉或 Sx (x > 0) 時連線速度緩慢,PPM 必須設定電池充電功能狀態,以反映上述 1b 中提及的三個值之一,當 OPM 在開機或 Sx 繼續之後傳送GET_CONNECTOR_STATUS至 PPM。 在 Sx 繼續時,OPM 通常會在PPM_RESET之後將 GET_CONNECTOR_STATUS 命令傳送至 PPM。
相反地,如果機器處於 Sx (x 0) 時,當計算機處於 Sx (x>0) 時,OPM 預期GET_CONNECTION_STATUS數據具有電池充電功能狀態字段, (65-64) 設定為標準充電速率, (當 OPM 傳送GET_CONNECTOR_STATUS時,) 值 1) 。
BatteryChargingCapabilityStatus::NotCharging (值 0)
GET_CONNECTOR_STATUS::Batter Charging Capability Status' “Not Charging” 值為 0,這也是預設值。 因此,除非連接器狀態變更 (16-0) 電池充電狀態變更位設定為 1,否則 OPM 無法判斷這是預設值,或 PPM 明確將它設定為 0 以指出未充電。 如果此位設定為 0,當狀態為 [未充電] 時,OS 可能會忽略電池充電狀態。
因此,對 PPM 的強建議是一律設定連接器狀態變更, (16-0) 電池充電狀態變更位為 1,回報不是/緩慢/非常慢的充電。 這項建議是讓 PPM 實作更容易管理充電狀態。
緩慢且非常緩慢充電的特殊案例
本節不包含 OEM、IHV 或 UCSI 韌體擁有者的任何特定建議。 而是描述收件匣 UCSI 驅動程式在設計 UCSI 韌體時可能有用的充電通知採用的特定邏輯。
在合作夥伴附加之後的第一個通知上,當 UCSI 驅動程式取得GET_CONNECTOR_STATUS的回應數據之後,即使連接器狀態變更 (16-0) 電池充電狀態變更位未設定為 1,UCSI 驅動程式仍會回報操作系統的緩慢充電速度,如果下列條件成立:
- 連接器狀態變更 (16-0) :ConnectChange 指出這是合作夥伴的第一個附加通知。
- 電池充電功能狀態 (62-65) 設定為值 2 或 3。
此行為背後的理由是 UCSI 驅動程式不知道是否刻意收費,因為其值為 0,這也是預設值。 不過,可以處理值 2 和 3,而不需依賴電池充電狀態變更。 如需詳細資訊,請參閱下一節。
UCSI 合規性測試
由於最佳的電源合約是計算機特有的,因此 Windows 不會針對 Windows 上的 慢速 或 未充電 快顯通知提供測試,因為測試現在會知道要驗證通知的電源等級。 不過,我們建議 OEM 使用下列使用 USB Type-C MUTT 作為埠合作夥伴的 UCSI 合規性測試,驗證其電池充電通知是否如預期般運作:
UCMCx 用戶端驅動程式
UcmCx 用戶端驅動程式會管理 USB Type-C 連接器,而不符合 UCSI 規格規範。 除了向OS回報USB Type-C連接器的其他資訊之外,類別延伸模組也會讓OS知道USB Type-C 連接器的充電等級變更。 以下是透過用戶端驅動程式的 UmCx DIS,可能會通知作業系統 UCM_CHARGING_STATE 連接器。
UcmConnectorTypeCAttach:回報連結至 UCM 的新埠夥伴時,用戶端可以使用輸入參數來報告充電等級 UCM_CONNECTOR_TYPEC_ATTACH_PARAMS::ChargingState
UcmConnectorPdConnectionStateChanged:同時向 UCM 回報 RDO 以取得交涉的電源合約。 用戶端可能會使用 UCM_CONNECTOR_PD_CONN_STATE_CHANGED_PARAMS::ChargingState 回報充電等級
UcmConnectorChargingStateChanged:用戶端驅動程式想要將充電狀態更新為 OS 的任何情況。 這個 DDI 的 Param2 包含連接器的充電狀態。
請考慮下列列舉 值UCM_CHARGING_STATE 向使用者顯示快顯通知:
- UcmChargingStateNotCharging
- UcmChargingStateSlowCharging
- UcmChargingStateTrickleCharging