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 角色切換會在系統的韌體中處理,而且不會載入 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 角色偵測
- USB Type-C 硬體/韌體偵測到裝置附加事件,而 Windows 10 系統DRP系統一開始會成為UFP角色。
- 韌體會傳送通知,指出連接器中的變更。
- UCSI 驅動程式會傳送GET_CONNECTOR_STATUS要求。
- 韌體會回應其連線狀態 = 1,而連接器合作夥伴類型 = DFP。
- USB 函式堆疊中的驅動程式會回應列舉。
- USB 連接器管理員類別延伸模組會辨識 USB 函式堆疊已載入,因此系統處於錯誤狀態。 它會告訴 UCSI 驅動程式將 [設定 USB 作業角色] 和 [設定電源方向角色] 要求傳送至韌體。
- USB Type-C 硬體/韌體會使用 DFP 起始角色交換作業。
偵測不相符的錯誤狀況
USB Type-C 硬體/韌體偵測到感測器已連線並交涉預設電源合約。 它也會觀察到,電力不足,無法提供給系統。
USB Type-C 硬體/韌體會設定緩慢充電位。
- 韌體會傳送通知,指出連接器中的變更。
- UCSI 驅動程式會傳送GET_CONNECTOR_STATUS要求。
- 韌體會以連線狀態 = 1、連接器合作夥伴類型=DFP 和電池充電狀態 = 慢速/訣竅回應。
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命令傳送至韌體。 它需要載入並執行驅動程式,而且也會啟用驅動程式的測試介面。 根據預設,此介面不會啟用,以防止零售系統上未經授權的使用者存取此介面。
在名為 UCSI USB 連接器管理員的 裝置管理員 (devmgmt.msc) 中找到裝置節點。 節點位於 通用序列總線控制器 類別之下。
選取並按住 (或以滑鼠右鍵按兩下裝置上的) ,然後選取 [屬性],然後開啟 [詳細數據] 索引卷標。
從下拉式清單中選取 [裝置實例路徑 ],並記下屬性值。
開啟登錄編輯程式 (regedit.exe)。
流覽至此機碼底下的裝置實例路徑。
<HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\device-instance-path>\Device Parameters
建立名為 TestInterfaceEnabled 的 DWORD 值,並將值設定為 0x1。
在 裝置管理員 的裝置節點上選取 [停用] 選項,然後選取 [啟用],以重新啟動裝置。 或者,您可以重新啟動電腦。
您可以執行 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 |