手機的充電接口將統一使用USB Type-C的,它的尺寸小,又纖薄,傳輸速度,不用分方向正反都可以插,借電能力也強,擴展性也不錯,東坡這里附上USB Type-C驅動程序下載,下面還附上了制作教程,有興趣的可以試一試。
USB Type-C和USB3.1的區別
USB 3.1是一個行業標準,該標準由英特爾等大公司發起。USB 3.1最大的特點就是數據傳輸極為迅速,理論上速度可以達到10Gbps。而USB Type-C則是一種連接器的規范,由Type-C插頭和Type-C插座組成。
在最新的USB 3.1標準中,有三種接口樣式,一個是Type-A(即Standard-A,傳統計算機上最常見的USB接口樣式),一個是Type-B(既Micro-B,目前主流Android智能手機使用的接口樣式),另外一個就是Type-C(即上面提到的全新設計的接口樣式)。
那么我們應該就能很容易理解了。雖然USB Type-C是基于USB 3.1進行設計的,但這并不意味著使用這種連接方式的設備就一定都是支持USB 3.1標準的;而與我們所想的正相反的是,對于較為老舊的USB 3.0 Type-A接口的設備來說,卻是能夠兼容USB 3.1標準的。
編寫 USB Type-C 連接器驅動程序
UCM 通過使用 WDF 類擴展客戶端驅動程序模型進行設計。類擴展 (UcmCx) 是一個 Microsoft 提供的 WDF 驅動程序,它提供了客戶端驅動程序可以調用的接口以報告有關連接器的信息。UCM 客戶端驅動程序使用連接器的硬件接口,并保持類擴展注意發生在控制器上的事件。相反,類擴展調用客戶端驅動程序實現的回調函數來響應操作系統事件。
若要啟用系統上的 USB Type-C 連接器,則必須編寫客戶端驅動程序。
開始之前...
安裝 適用于你的開發計算機的最新 Windows 驅動程序工具包 (WDK)。該工具包帶有編寫 UCM 客戶端驅動程序所需的頭文件和庫,具體來說,你將需要:
你可以編寫可在用戶模式或內核模式下運行的 UCM 客戶端驅動程序。對于用戶模式,它綁定了 UMDF 2.x 庫;對于內核模式,它為 KMDF 1.15。對于任意一種模式,編程接口都相同。
存根庫,(UcmCxstub.lib)。該庫將轉換由客戶端驅動程進行的調用,并將它們傳遞給 UcmCx。
頭文件,UcmCx.h。
確定你的客戶端驅動程序是否支持 USB Type-C 連接器和 USB 功率輸出的高級功能。
如果支持,你可以使用 USB Type-C 連接器、USB Type-C 擴展塢和附件以及 USB Type-C 充電器生成 Windows 設備。客戶端驅動程序將報告允許操作系統實現關于系統中 USB 和電源消耗的策略的連接器事件。
在你的目標計算機上安裝 Windows 10 桌面版(家庭版、專業版、企業版和教育版),或使用 USB Type-C 連接器安裝 Windows 10 移動版。
熟悉 UCM 以及它與其他 Windows 驅動程序交互的方式。請參閱體系結構:適用于 Windows 系統的 USB Type-C 設計。
熟悉 Windows 驅動程序基礎 (WDF)。推薦閱讀:使用 Windows 驅動程序基礎開發驅動程序,由 Penny Orwick 和 Guy Smith 編寫。
UCM 類擴展提供的服務摘要
UCM 類擴展保持操作系統隨時了解數據和電源角色、充電級別和已協商的 PD 合約發生的更改。在客戶端驅動程序與硬件交互時,它必須通知類擴展這些更改發生的時間。類擴展提供了一組客戶端驅動程序可用來發送通知(本主題中已討論)的方法。下面是提供的服務:
數據角色配置
在 USB Type-C 系統上,數據角色(主機或函數)取決于連接器的 CC 引腳的狀態。你的客戶端驅動程序將從你的端口控制器讀取 CC 行(請參閱基礎結構:Windows 系統的 USB Type-C 設計)狀態,以確定該端口已解析為上行端口 (UFP) 還是下行端口 (DFP)。 它會將該信息報告給類擴展,以便它可以將當前角色報告給 USB 角色切換驅動程序。
注意 USB 角色切換驅動程序在 Windows 10 移動版系統上使用。 在 Windows 10 桌面版系統上,類擴展和角色切換驅動程序之間的通信是可選的。此類系統可能不使用雙角色控制器,在此情況下,不使用角色切換驅動程序。
電源角色和充電
你的客戶端驅動程序將讀取 USB Type-C 電流播發,或與合作伙伴連接器協商 PD 電源合約。
在 Windows 10 移動版系統上,選擇相應充電器的決策由軟件輔助。客戶端驅動程序會將合約信息報告給類擴展,以便它可以將充電級別發送至充電仲裁驅動程序 (CAD.sys)。CAD 選擇要使用的電流強度,并將充電級別信息轉發到電池子系統。
在 Windows 10 桌面版系統上,由硬件選擇相應的充電器。客戶端驅動程序可以選擇獲取該信息,并將其轉發到類擴展。或者,該邏輯可以由不同的驅動程序實現。
數據和電源角色更改
在協商 PD 合約后,數據角色和電源角色可能會發生更改。這一更改可能由你的客戶端驅動程序或合作伙伴連接器引發。 客戶端驅動程序會將該信息報告給類擴展,以便它可以相應地重新配置一些內容。
數據和/或電源角色更新
操作系統可能會確定當前數據角色不正確。 在此種情況下,類擴展將調用你的驅動程序的回調函數,以執行必要的角色交換操作。
客戶端驅動程序的預期行為
你的客戶端驅動程序負責執行以下任務:
檢測 CC 行上的變化,并確定合作伙伴的類型(如 UFP、DFP 等)。 為此,驅動程序必須實現完整的 Type-C 狀態機,如 USB Type-C 規范中所定義。
根據在 CC 行上檢測到的方向,配置你的 Mux。 這包括打開你的 PD 發射器/接收器,并處理和響應 PD 消息。 為此,驅動程序必須實現完整的 PD 接收器和發射器狀態機(如 USB 功率輸出 2.0 規范中定義)。
做出 PD 策略決策,如協商合約(作為源或接收器)、角色交換等。 客戶端驅動程序負責確定最合適的合約。
播發和協商備用模式,并在檢測到備用模式時配置 Mux。客戶端驅動程序負責確定要協商的備用模式。
對連接器的 VBus/VConn 控制。
1. 初始化 UCM 連接器對象 (UCMCONNECTOR)
UCM 連接器對象 (UCMCONNECTOR) 表示 USB Type-C 連接器,并且是 UCM 類擴展和客戶端驅動程序之間的主要句柄。該對象跟蹤連接器的操作模式和電源功能。
下面是客戶端驅動程序檢索連接器的 UCMCONNECTOR 句柄的序列摘要。調用 WdfDeviceCreate 后,在你的驅動程序的 EvtDriverDeviceAdd 回調函數中執行這些任務來創建框架設備對象。
通過向 UCM_MANAGER_CONFIG 結構傳遞引用來調用 UcmInitializeDevice。
在 UCM_MANAGER_CONFIG 結構中,指定 UCM_CONNECTOR_TYPEC_CONFIG 結構中 USB Type-C 連接器的初始化參數。這包括連接器的操作模式,無論它是下行端口、上行端口,還是支持雙重角色的端口。當連接器是電源時,它還將指定 USB Type-C 電流強度。可以對 USB Type-C 連接器進行設計,以便它可以充當 3.5 毫米音頻插孔。如果硬件支持該功能,則必須相應地初始化連接器對象。
在結構中,還必須注冊客戶端驅動程序的回調函數,以便處理數據角色。
此回調函數與由 UCM 類擴展調用的連接器對象相關聯。 此函數必須由客戶端驅動程序實現。
EVT_UCM_CONNECTOR_SET_DATA_ROLE
當連接到合作伙伴連接器時,將連接器的數據角色交換為指定的角色。
如果你的客戶端驅動程序想要支持 PD(即能夠處理連接器的功率輸出 2.0 硬件實現),還必須初始化 UCM_CONNECTOR_PD_CONFIG 結構,該結構可指定 PD 初始化參數。這包括電源流,不管連接器是電源接收器還是電源。
在結構中,還必須注冊客戶端驅動程序的回調函數,以便處理電源角色。
此回調函數與由 UCM 類擴展調用的連接器對象相關聯。 此函數必須由客戶端驅動程序實現。
EVT_UCM_CONNECTOR_SET_POWER_ROLE
當連接到合作伙伴連接器時,將連接器的電源角色設置為指定的角色。
調用 UcmConnectorCreate 并檢索連接器的 UCMCONNECTOR 句柄。請確保在返回你的客戶端驅動程序的 EvtDevicePrepareHardware 之前調用此方法。
2. 報告合作伙伴連接器附加事件
當檢測到與合作伙伴連接器連接時,客戶端驅動程序必須調用 UcmConnectorTypeCAttach 。此調用將通知 UCM 類擴展,從而進一步通知操作系統。此時,系統可以開始以 USB Type-C 級別充電。
UCM 類擴展也會通知 USB 角色切換驅動程序 (URS)。根據合作伙伴的類型,URS 配置主機角色或函數角色中的控制器。調用此方法之前,請確保你的系統上的 Mux 已正確配置。否則,如果系統處于函數角色中,它將以不正確的速度(高速而不是 SuperSpeed)連接。
3. 報告 USB Type-C 播發更改
在初始附加事件中,合作伙伴連接器會發送電流播發。如果合作伙伴是 USB Type-C 下行端口,播發將指定合作伙伴連接器的電流強度。否則,由 UCMCONNECTOR 句柄(本地連接器)表示的播發將指定本地連接器的電流強度。此初始播發可能會在連接的生存期內發生更改。這些更改必須由客戶端驅動程序監視。
如果本地連接器是電源接收器,并且電流播發發生更改,則客戶端驅動程序必須 檢測電流播發中的更改并將其報告給類擴展。在 Windows 10 移動版系統上,該信息由 CAD.sys 和電池子系統用于調整它從源抽取的電流量。若要將電流強度中的更改報告給類擴展,客戶端驅動程序必須調用UcmConnectorTypeCCurrentAdChanged。
4. 報告新協商的 PD 合約
如果你的連接器支持 PD,那么在初始附加事件后,將有 PD 消息在連接器及其合作伙伴連接器之間進行傳輸。在這兩個合作伙伴之間,PD 合約的協商將確定連接器可以吸收的或允許合作伙伴吸收的電流強度。每次 PD 合約發生更改時,客戶端驅動程序都必須調用這些方法,以便將更改報告給類擴展。
每當客戶端驅動程序獲取來自合作伙伴的源功能播發(主動提供或其他方式)時,它都必須調用這些方法。本地連接器(接收器)僅在合作伙伴是源時從合伙伙伴處獲取主動提供的播發。此外,本地連接器可以從能夠成為源的合作伙伴(即使該合作伙伴當前是接收器)顯式請求源功能。 通過向該合作伙伴發送Get_Source_Caps 消息來完成此交換。
調用 UcmConnectorPdPartnerSourceCaps 以報告由合作伙伴連接器播發的源功能。
調用 UcmConnectorPdConnectionStateChanged 以報告合約的詳細信息。在“請求數據對象”中對該合約進行了描述,如功率輸出 2.0 規范中所定義。
相反,每次本地連接器(源)向合作伙伴播發源功能時,客戶端驅動程序都必須調用這些方法。此外,當本地連接器收到來自合作伙伴的 Get_Source_Caps 消息時,他必須使用本地連接器的源功能響應。
調用 UcmConnectorPdSourceCaps 以報告由系統播發到合作伙伴連接器的源功能。
調用 UcmConnectorPdConnectionStateChanged 以報告當前已協商的 PD 合約的連接功能。
5. 報告電池充當狀態
如果充電級別不恰當,客戶端驅動程序可能會通知 UCM 類擴展。 類擴展會將此信息報告給操作系統。系統會使用此信息顯示一條用戶通知,即充電器未以最佳狀態給系統充電。 可通過以下方法來報告充電狀態:
這些方法可指定充電狀態。如果報告的級別為 UcmChargingStateSlowCharging 或 UcmChargingStateTrickleCharging(請參閱UCM_CHARGING_STATE),操作系統將顯示用戶通知。
6. 報告 PR_Swap/DR_Swap 事件
如果連接器從合作伙伴接收電源角色 (PR_Swap) 或數據角色 (DR_Swap) 交換消息,則客戶端驅動程序必須通知 UCM 類擴展。
UcmConnectorDataDirectionChanged
在處理 PD DR_Swap 消息后,調用此方法。完成此調用后,操作系統會將新角色報告給 URS,這將刪除現有角色驅動程序,并為新角色加載驅動程序。
UcmConnectorPowerDirectionChanged
在處理 PD PR_Swap 消息后,調用此方法。在 PR_Swap 之后,需要重新協商 PD 合約。客戶端驅動程序必須通過調用步驟 4 中所述的方法報告該 PD 合約協商。
7. 實現回調函數來處理電源和數據角色交換請求
UCM 類擴展可能會收到更改連接器的數據或電源方向的請求。在此情況下,它將調用客戶端驅動程序的 EVT_UCM_CONNECTOR_SET_DATA_ROLE 和EVT_UCM_CONNECTOR_SET_POWER_ROLE 回調函數的實現(如果連接器實現 PD)。客戶端驅動程序之前在調用 UcmConnectorCreate 時已注冊過這些函數。
客戶端驅動程序通過使用硬件接口執行角色交換操作。
EVT_UCM_CONNECTOR_SET_DATA_ROLE
在回調實現中,客戶端驅動程序可以:
將 PD DR_Swap 消息發送到端口合作伙伴。
調用 UcmConnectorDataDirectionChanged 來通知類擴展該消息序列已成功或未成功完成。
EVT_UCM_CONNECTOR_SET_POWER_ROLE
在回調實現中,客戶端驅動程序可以:
調用UcmConnectorPowerDirectionChanged 來通知類擴展該消息序列已成功或未成功完成。
注意
客戶端驅動程序可以異步(即不是從回調線程)調用 UcmConnectorDataDirectionChanged 和 UcmConnectorPowerDirectionChanged。在典型的實現中,類擴展調用回調函數,該回調函數導致客戶端驅動程序啟動硬件事務來發送消息。當該事務完成時,硬件將通知驅動程序。驅動程序將調用這些方法來通知類擴展。
8.報告合作伙伴連接器分離事件
客戶端驅動程序必須在結束連接合作伙伴連接器時調用 UcmConnectorTypeCDetach 。此調用將通知 UCM 類擴展,從而進一步通知操作系統。
使用案例示例:已連接到電腦的移動設備
當運行 Windows 10 移動版的設備通過 USB Type-C 連接連接到運行 Windows 10 桌面版的電腦時,操作系統將確保該移動設備是上行端口 (UFP),因為只有在此方向下 MTP 才能正常運行。 在此情況下,以下是數據角色更正的序列:
運行于移動設備上的客戶端驅動程序通過調用 UcmConnectorTypeCAttach 來報告一個附加事件,并且將合作伙伴連接器報告為下行端口 (UFP)。
客戶端驅動程序通過調用 UcmConnectorPdPartnerSourceCaps 和 UcmConnectorPdConnectionStateChanged 來報告 PD 合約。
UCM 類擴展將通知 USB 設備端驅動程序,從而使這些驅動程序響應來自主機的枚舉。操作系統信息通過 USB 進行交換。
UCM 類擴展 UcmCx 將調用客戶端驅動程序的回調函數來更改角色:EVT_UCM_CONNECTOR_SET_DATA_ROLE 和EVT_UCM_CONNECTOR_SET_POWER_ROLE。
注意 如果兩臺 Windows 10 移動版設備互相連接,將不執行角色交換,并且系統將通知用戶該連接無效。
- PC官方版
- 安卓官方手機版
- IOS官方手機版