共用方式為


USB Type-C® 連接器系統軟體介面 (UCSI) 驅動程式

Microsoft提供符合 USB Type-C® 連接器系統軟體介面(UCSI)規範的驅動程式,以用於進階設定和電源介面(ACPI)傳輸。 如果您的設計包含具有 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 行動裝置版不支援 所有 USB 裝置類別

  • USB 連接器管理員

    Microsoft 隨附於 Windows 中提供 UCSI 內建驅動程式(UcmUcsiCx.sys),用於實現 USB Type-C 接頭系統軟體介面規範中定義的功能。 規格描述 UCSI 的功能,還解釋了暫存器和數據結構,適用於硬體元件設計師、系統建置者和設備驅動程式開發人員。

    此驅動程式適用於內嵌控制器的系統。 此驅動程式是Microsoft提供的USB連接器管理員類別擴充驅動程式的用戶端(Ucmcx.sys)。 驅動程式會處理的工作包括發出請求給韌體以變更數據或電源角色,以及獲取所需資訊來向使用者提供疑難解答訊息。

Windows 所需的 UCSI 命令

如需所有 UCSI 實作中所需的命令,請參閱 UCSI 規格。

除了標示為 必要的命令之外,Windows 還需要下列命令:

  • GET_ALTERNATE_MODES
  • 獲取相機支持
  • GET_PDOS
  • SET_NOTIFICATION_ENABLE:系統或控制器必須在SET_NOTIFICATION_ENABLE內支援下列通知:
    • 支援的提供者功能變更
    • 交涉的權力等級變更
  • GET_CONNECTOR_STATUS:系統或控制器必須在GET_CONNECTOR_STATUS內支援這些連接器狀態變更:
    • 支援的提供者功能變更
    • 談判的權限等級變更

如需在 BIOS 中實作 UCSI 所需的工作相關信息,請參閱 Intel BIOS 實作 UCSI

UCM-UCSI 適用於 UCSI 2.0 及更新的 ACPI 裝置

從 Windows 11 版本 22H2 9 月更新開始,Windows UCM-UCSI ACPI 設備驅動器支援 UCSI 規格版本 2.0 和 2.1。 UCSI 規格 2.0 在其資料結構的記憶體映射中有大幅改變,這些改變在 UCSI 規格中的表 3-1 資料結構中有定義。 若要維持回溯相容性,Windows 需要 UCSI PPM 2.0 版或更新版本,才能在 ACPI 韌體中 UCM-UCSI ACPI 裝置 下實作下列_DSM函式,並傳回非零值,以指出 UCSI OPM 應遵循回報的 UCSI 規格版本。

  • Arg0:UUID = 6F8398C2-7CA4-11E4-AD36-631042B5008F
  • Arg1:修訂標識碼 = 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方法的其他功能應該已按照 Intel BIOS UCSI 檔案的 版本來實現。 函式 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. 韌體會以連線狀態=1、連接器對端類型=DFP 和電池充電狀態=慢充/涓流充電回應。
  3. USB 連接器管理擴充類別會將通知傳送給使用者介面(UI),以顯示充電器不符的疑難排解訊息。

如何測試UCSI

有許多方式可以測試您的UCSI實作。 若要測試 UCSI BIOS/EC 實作中的個別命令,請使用 UCSIControl.exe,其提供於 MUTT Software Pack中。 若要測試完整的 UCSI 實作,請使用 Windows 硬體實驗室套件 (HLK) 中找到的 UCSI 測試,以及 Type-C 手動 Interop 程式中的步驟。

UCSIControl.exe

您可以使用 UCSIControl.exe,在 UCSI BIOS/EC 實作中測試個別命令。 此工具可讓您透過UCSI驅動程式將UCSI命令傳送至韌體。 它需要載入並執行驅動程式,並同時啟用驅動程式的測試介面。 根據預設,此介面不會啟用,以防止零售系統上未經授權的使用者存取。

  1. 在 Device Manager (devmgmt.msc) 中找到名為 UCSI USB Connector Manager的裝置節點。 節點位於 通用序列總線控制器 類別之下。

  2. 選取並按住裝置(或按滑鼠右鍵),然後選取 屬性,並開啟 詳細資料 選項卡。

  3. 從下拉式清單中選取 [裝置實例路徑,並記下屬性值。

  4. 開啟註冊表編輯器 (regedit.exe)。

  5. 流覽至此金鑰下的裝置實例路徑。

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\<裝置實例路徑>\裝置參數

  6. 建立名為 TestInterfaceEnabled 的 DWORD 值,並將值設定為 0x1。

  7. 在裝置管理員的裝置節點上選取 [停用] 選項,然後選取 [啟用],以重新啟動裝置。 或者,您可以重新啟動電腦。

您可以運行 UcsiControl.exe /?來檢視說明。

以下是常見的命令:

UCSI 命令 UcsiControl.exe 命令
PPM 重設 UcsiControl.exe 傳送 0 1
連接器重設 軟重設:UcsiControl.exe 發送 0 10003

硬重置:UcsiControl.exe 傳送 0 810003
設定通知打開 所有通知:UcsiControl.exe 傳送 0 ffff0005

僅完成命令:UcsiControl.exe 傳送 0 00010005

沒有通知:UcsiControl.exe 傳送 0 00000005
取得能力 UcsiControl.exe 傳送 0 6
取得連接器功能 UcsiControl.exe 傳送 0 10007
設定 UOM DFP:UcsiControl.exe 傳送 0 810008

UFP:UcsiControl.exe 發送 0 1010008

DRP:UcsiControl.exe 傳送 0 2010008
設定UOR DFP:UcsiControl.exe 發送 0 810009

UFP:UcsiControl.exe 傳送 0 1010009

接受:UcsiControl.exe 傳送 0 2010009
設定 PDR 提供者:UcsiControl.exe 傳送 0 81000B

取用者:UcsiControl.exe 傳送 0 101000B

接受:UcsiControl.exe 傳送 0 201000B
取得 PDO 本機來源:UcsiControl.exe 傳送 7 00010010

本機接收:UcsiControl.exe 傳送 3 00010010

遠端來源:UcsiControl.exe 傳送 7 00810010

遠端接收:UcsiControl.exe 傳送 3 00810010
取得連接器狀態 UcsiControl.exe 傳送 0 010012
取得錯誤狀態 UcsiControl.exe 傳送 0 13