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驅動程式

    並非所有 USB 裝置類別都支援 Windows 10 行動裝置版。

  • USB 連接器管理員

    Microsoft 提供 UCSI 內建驅動程式與 Windows (UcmUcsiCx.sys) ,以實作 USB Type-C 連接器系統軟體介面規格中定義的功能。 此規格描述 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 所需的工作相關信息,請參閱 Intel BIOS 實作 UCSI

適用於 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 需要 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 (默认) :如果 VERSION 結構如 UCSI規格表3-1資料結構中所定義,則UCSI OPM的值為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. 韌體會以連線狀態 = 1、連接器合作夥伴類型=DFP 和電池充電狀態 = 慢速/訣竅回應。
  3. USB 連接器管理員類別延伸模組會將通知傳送給 UI,以顯示不相符的疑難解答訊息。

如何測試UCSI

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

UCSIControl.exe

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

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

  2. 選取並按住 (或以滑鼠右鍵按兩下裝置上的) ,然後選取 [屬性],然後開啟 [詳細數據] 索引卷標。

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

  4. 開啟登錄編輯程式 (regedit.exe)。

  5. 流覽至此機碼底下的裝置實例路徑。

    <HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\device-instance-path>\Device Parameters

  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 Send 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