windows USB 设备驱动开发- USB Type-C支持(二)

devtools/2024/11/9 16:45:02/

Microsoft 提供 USB Type-C® 连接器系统软件接口 (UCSI) 符合规范的 ACPI 传输驱动程序。 如果你的设计包含带有 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 功能控制器客户端驱动程序编程接口,为功能控制器编写自定义客户端驱动程序。

SoC 供应商可能会为你提供用于进行充电器检测的 USB 功能下层筛选器驱动程序。 如果使用内置 Synopsys USB 3.0 或 ChipIdea USB 2.0 客户端驱动程序,则可以实现自己的筛选器驱动程序。

  • USB 主机端驱动程序

USB 主机端驱动程序是适用于与 EHCI 或 XHCI 兼容的 USB 主机控制器的一组驱动程序。 如果角色切换驱动程序枚举主机角色,则会加载驱动程序。 如果主机控制器不符合规范,则可以使用 USB 主机控制器扩展 (UCX) 编程接口编写自定义驱动程序。 

Windows 10 移动版不支持所有 USB 设备类。

  • USB 连接器管理器

Microsoft 提供带有 Windows (UcmUcsiCx.sys) 的 UCSI 随机驱动程序,它实现了在 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中的以下通知:
  • 1. 支持的提供程序功能更改:协商的电源级别更改;
  • 2. GET_CONNECTOR_STATUS:系统或控制器必须在GET_CONNECTOR_STATUS内支持以下连接器状态更改:支持的提供程序功能更改和协商的电源级别更改;
     
适用于 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 要求规范版本 2.0 或更高版本的 UCSI PPM 在 ACPI 固件中的 UCM-UCSI ACPI 设备 下实现以下_DSM函数,并返回非零值以指示 UCSI OPM 应遵循报告的 UCSI 规范版本。

  • Arg0:UUID = 6F8398C2-7CA4-11E4-AD36-631042B5008F
  • Arg1:修订 ID = 0
  • Arg2:函数索引 = 5
  • Arg3: (未使用空包)

返回值:

 备注 对于 UCM-UCSI ACPI 设备,这是现有 _DSM 方法中的一个新函数。 此_DSM方法的其他功能应已根据 UCSI 文档的 Intel BIOS 实现实现 。 函数 0(返回所有受支持函数的位掩码)也应相应地更新。

UCSI 的示例流

本部分中给出的示例描述了 USBType C 硬件/固件、UCSI 驱动程序和操作系统之间的交互。

DRP 角色检测

1.USB Type C 硬件/固件检测到设备附加事件,Windows 10 系统 DRP 系统最初成为 UFP 角色。
a.该固件发送指示连接器中的更改的通知。
b.UCSI 驱动程序发送GET_CONNECTOR_STATUS请求。
c.固件响应其连接状态 = 1,连接器合作伙伴类型 = DFP。 
2.USB 函数堆栈中的驱动程序响应枚举。
3.USB 连接器管理器类扩展可识别 USB 功能堆栈已加载,因此系统处于错误状态。 它通知 UCSI 驱动程序向固件发送“设置 USB 操作角色”和“设置电源方向角色”请求。
4.USB Type-C 硬件/固件使用 DFP 启动角色交换操作。

检测充电器不匹配错误条件

1.USB TypeC 硬件/固件检测到已连接充电器,并协商默认电源协定。 它还观察到充电器没有为系统提供足够的电源。

2.USB Type 硬件/固件设置了缓慢充电速度。

a.该固件发送指示连接器中的更改的通知。
b.UCSI 驱动程序发送GET_CONNECTOR_STATUS请求。
c.固件响应的连接状态 = 1,连接器合作伙伴类型=DFP,电池充电状态 = 慢/滴答。
3.USB 连接器管理器类扩展向 UI 发送通知,以显示充电器不匹配故障排除消息。

如何测试 UCSI

可通过多种方式测试 UCSI 实现。 要测试 UCSI BIOS/EC 实现中的单个命令,请使用 MUTT 软件包中提供的 UCSIControl.exe。 要测试完整的 UCSI 实现,请使用 Windows Hardware Lab Kit (HLK) 中可找到的 UCSI 测试,以及Type C 手动互操作过程中的步骤。

UCSIControl.exe

可以使用 UCSIControl.exe 在 UCSI BIOS/EC 实现中测试各个命令。 此工具使你可以通过 UCSI 驱动程序将 UCSI 命令发送到固件。 它要求加载并运行驱动程序,同时还启用了驱动程序的测试接口。 默认情况下,不启用此接口,以防止零售系统上未经授权的用户访问它。

  1. 在设备管理器 (devmgmt.msc) 中找到名为“UCSI USB 连接器管理器” 的设备节点。 节点位于“通用串行总线控制器” 类别下。
  2. 选择并按住(或右键单击)该设备,然后选择“属性”并打开“详细信息”选项卡。
  3. 从下拉列表中选择“设备实例路径” ,并记下属性值。
  4. 打开注册表编辑器 (regedit.exe)。
  5. 导航到此项下的设备实例路径。HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\<device-instance-path>\Device Parameters
  6. 创建一个名为“TestInterfaceEnabled” 的 DWORD 值,并将该值设置为 0x1。
  7. 通过在“设备管理器”中的设备节点上选择“禁用” 选项,然后选择“启用” 来重启设备。 或者,你可以重启电脑。

可以通过运行 UcsiControl.exe /? 查看帮助。

下面是常用命令:

常见问题解答:

Windows 版本

  • Windows 10 桌面版(家庭版、专业版、企业版和教育版)
  • Windows 10 移动版

USB Type-C 连接器功能对称和可逆设计

  • 连接器是 对称的。 电缆的两端都有一个 USB Type-C 连接器,允许主机和功能设备使用 USB Type-C 连接器。 下面是比较连接器的图像:
  • 连接器设计为 可逆。 传统的连接器必须“右向上”连接。 使用可逆设计,连接器可以翻转。

支持所有 USB 设备速度

连接器可以支持低速、全速、高速、超高速 (包括 SS+) 的 USB 设备。

备用模式

连接器可以支持 备用模式。 备用模式功能允许非 USB 协议通过 USB 电缆运行,同时保留 USB 2.0 和充电功能。 目前,最常用的备用模式是 DisplayPort/DockPort 和 MHL。

DisplayPort/DockPort

此备用模式允许用户通过 USB 连接器将音频/视频投影到外部 DisplayPort 显示器。

MHL

MHL 备用模式允许用户将视频/音频投影到支持 MHL 的外部显示器。

广告牌错误消息

如果用户连接附加的电脑或手机不支持的 USB Type-C 备用模式设备或适配器,则设备或适配器可以公开包含错误条件相关信息的 Billboard 设备,以帮助用户解决问题。

增加的功率限制

具有 USB Type-C 连接器的系统具有更高的功率限制,最多可支持 5V、3A、15W。

此外,连接器还可以选择支持 USB 供电 OEM 定义的 电源传送 功能。 如果连接器支持供电,USB Type-C 系统可以是电源提供商或使用者,支持高达 100W。

支持 USB 双重角色

外围设备可以使用 USB Type-C 连接器连接到移动系统,从而将移动系统的传统角色从功能更改为主机。 当同一系统连接到电脑时,系统将恢复函数的角色,而电脑将成为主机。

需要协商备用模式的操作系统输入,例如 DP 2 通道与 DP 4 通道

否。 操作系统 (或任何 Microsoft 提供的软件组件) 在选择备用模式方面不起任何作用。 该决策由连接器的驱动程序做出,特别是 USB 连接器管理器 (UCM) 客户端驱动程序。 驱动程序通过使用硬件接口与连接器的固件通信来执行此操作。

使用 Type-C 和 PD 预操作系统充电

启用 OS 前充电由 OEM 拥有。 可以选择不实现 USB 电源传送,并在 USB Type-C 电源级别充电,直到启动到操作系统。

当手机是 USB 主机时为手机充电,以启用 Continuum 等停靠方案

以下是需要考虑的一些事项:

  • 必须实现 USB 电源传送,以便可以独立交换电源和数据角色。
  • 扩展坞的上游端口应实现为 USB Type C规范中定义的充电 UFP。第 4.8.4 部分,版本 1.1。
  • 如果扩展坞解析为 DFP,则应请求DR_Swap;如果解析为 UFP,则应请求PR_Swap。

初始 DFP 是电源,因此必须更改数据角色。 初始 UFP 是电源接收器,因此必须更改电源角色。 可以在这些回调函数的实现中执行这些操作:

Windows 10 移动版支持 USB 广告牌设备

是的,如果你将手机连接到支持 USB 广告牌的设备,根据 广告牌设备的 USB 设备类定义规范,用户会收到通知。 不需要 USB 连接器管理器 (UCM) 客户端驱动程序来处理通知。 如果系统无法识别备用模式,请不要进入该模式。

在早期版本的 Windows 上支持 USB Type-C

Windows 10之前的 Windows 版本不支持 USB Type-C。

早期版本的 Windows 上的 UCSI 支持

Windows 10之前的 Windows 版本不支持 UCSI。

如何测试 UCSI 的实现

若要测试实现,请遵循 USB Type-C 手动互操作性测试过程中提供的准则。 我们建议在 Windows Hardware Lab Kit (HLK) for Windows 10 中运行 USB 测试。 这些测试列在 适用于 USB 的 Windows 硬件认证工具包测试中。

不同错误的条件和 UI

Windows 10可以显示一组 USB Type C错误消息,以帮助告知用户 USB Type-C 硬件和软件的不同组合的限制。 例如,如果连接到 USB Type-C 连接器的充电器不够强大、与系统不兼容或连接到非充电端口,则用户可能会收到“设备充电缓慢”消息。 

将非 PD 端口连接到 PD 提供程序,并将 PD 使用者连接到非 PD 提供程序的系统

非 PD 端口尝试使用 USB Type-C 当前级别为系统充电。 

将 Thunderbolt、SuperMHL 或 PCI Express 连接到不支持这些功能的电脑

备用模式功能允许非 USB 协议 ((如 Thunderbolt、SuperMHL) )通过 USB 电缆运行,同时保留 USB 2.0 和充电功能。 如果用户连接运行Windows 10的附加电脑或手机不支持的 USB Type-C 备用模式设备或适配器,则会检测到错误情况,并向用户显示一条消息。

  • 如果设备或适配器公开了广告牌设备,则用户会看到有关错误条件的信息,以帮助解决问题。 Windows 10为广告牌设备提供内置驱动程序,并通知用户发生了错误。
  • 用户可能会看到错误通知“尝试改善 USB 连接”。 
  • 为了获得最佳结果,请确保电脑、手机或电缆满足备用模式设备或适配器的要求。

Windows 中通过 USB Type-C 对 MTP 的支持和限制

桌面版Windows 10支持发起方角色中的 MTP;Windows 10 移动版支持响应者角色中的 MTP。

下游设备和集线器如何与 USB 连接器管理器 (UCM)

UCM 是自己的设备堆栈。 Windows 10 USB Type-C 支持包括所需的管道,以确保不同的类驱动程序知道如何与不同的 USB Type-C 连接器进行通信。 若要获得对 USB Type-C 的Windows 10支持,必须插入 UCM 设备堆栈。

HLK 测试的 USB Type C MUTT 要求

适用于 Windows 10 的 Windows HLK 包含 USB 主机和功能控制器的测试。 若要测试系统,请使用 USB C-A 适配器。 这些测试列在 适用于 USB 的 Windows 硬件认证工具包测试中。

Microsoft 支持在同一Windows 10 SKU 之间传输 P2P 数据

这不是有效的连接。

  • 不能连接运行桌面版Windows 10的两台电脑。
  • 无法连接运行Windows 10 移动版的两个移动设备。

如果用户尝试建立此类连接,Windows 会显示一条错误消息。 

唯一有效的连接是在 Windows Mobile 设备和 Windows 桌面设备之间。

UCM 类扩展 (UcmCx) 与 PMIC 或电池驱动程序通信以获取/设置充电状态

在软件辅助充电平台上,UcmCx 与 PMIC 和电池子系统通信。 客户端驱动程序可以通过硬件接口与硬件通信来确定充电级别。 在硬件辅助平台上,嵌入式控制器负责充电。 UcmCx 不参与该过程。

HLK 对 USB Type-C 的支持

在适用于 Windows 10 的 Windows HLK 中,没有特定于 USB Type C 的测试。 建议在 Windows HLK 中运行 USB 测试以Windows 10。 这些测试列在 适用于 USB 的 Windows 硬件认证工具包测试中。

UCSI

USB Type-C 连接器系统软件接口 (UCSI) 规范 介绍了 USB Type-C 连接器系统软件接口 (UCSI) 的功能,并介绍了硬件组件设计人员、系统构建者和设备驱动程序开发人员的寄存器和数据结构。

Microsoft 提供具有 Windows 的内置驱动程序(UcmUcsi.sys),可实现规范定义的功能。 此驱动程序适用于具有嵌入式控制器的系统。

测试在 Windows 10 上运行的 UCSI 实现

建议在 Windows HLK 中运行 USB 测试以Windows 10。 这些测试列在 适用于 USB 的 Windows 硬件认证工具包测试中。

在 Windows 10 上测试 UCMCx 客户端驱动程序

建议在 Windows HLK 中运行 USB 测试以Windows 10。 这些测试列在 适用于 USB 的 Windows 硬件认证工具包测试中。

UCM 类扩展处理的 VBus/VConn 控制和角色切换操作

UCM 类扩展可能会从操作系统获取更改连接器的数据或电源方向的请求。 当它收到这些请求时,它会调用客户端驱动程序实现 的 EVT_UCM_CONNECTOR_SET_DATA_ROLE 和 EVT_UCM_CONNECTOR_SET_POWER_ROLE 回调函数 (如果连接器实现 PD) 。 在实现中,客户端驱动程序应控制 VBUS 和 VCONN 引脚。


http://www.ppmy.cn/devtools/59397.html

相关文章

在 Linux 上使用 lspci 命令查看 PCI 总线硬件设备信息

lspci 命令用于显示 Linux 系统上的设备和驱动程序 当在个人电脑或服务器上运行 Linux 时&#xff0c;有时需要识别该系统中的硬件。lspci 命令用于显示连接到 PCI 总线的所有设备&#xff0c;从而满足上述需求。该命令由 pciutils 包提供&#xff0c;可用于各种基于 Linux 和…

Log4j的原理及应用详解(五)

本系列文章简介&#xff1a; 在软件开发的广阔领域中&#xff0c;日志记录是一项至关重要的活动。它不仅帮助开发者追踪程序的执行流程&#xff0c;还在问题排查、性能监控以及用户行为分析等方面发挥着不可替代的作用。随着软件系统的日益复杂&#xff0c;对日志管理的需求也日…

基于复旦微JFMQL100TAI的全国产化FPGA+AI人工智能异构计算平台,兼容XC7Z045-2FFG900I

基于上海复旦微电子FMQL45T900的全国产化ARM核心板。该核心板将复旦微的FMQL45T900&#xff08;与XILINX的XC7Z045-2FFG900I兼容&#xff09;的最小系统集成在了一个87*117mm的核心板上&#xff0c;可以作为一个核心模块&#xff0c;进行功能性扩展&#xff0c;能够快速的搭建起…

优化Cocos Creator 包体体积

优化Cocos Creator 包体体积 引言一、优化图片文件体积&#xff1a;二、优化声音文件体积&#xff1a;三、优化引擎代码体积&#xff1a;四、 优化字体字库文件大小&#xff1a; 引言 优化Cocos Creator项目的包体体积是一个常见且重要的任务&#xff0c;尤其是在移动设备和网…

论文 | LEAST-TO-MOST PROMPTING ENABLES COMPLEXREASONING IN LARGE LANGUAGE MODELS

论文主题&#xff1a; 这篇论文提出了“从简单到复杂提示”&#xff08;Least-to-Most Prompting&#xff09;这一新的提示策略&#xff0c;旨在解决大语言模型在解决比提示示例更复杂的问题时表现不佳的难题。 核心思想&#xff1a; 将复杂问题分解成一系列更简单的子问题。按…

Vue:axios请求数据转存leanCloud

思路&#xff1a; 采用axios请求需要的数据&#xff0c;查看leanCloud中数据批量存储的格式&#xff0c;将两个数据进行对比&#xff0c;将请求得到的数据封装为云服务存储的格式&#xff0c;再发leanCloud存储数据的请求完成转存 1.封装js代码 //批量操作新增数据 import r…

CREC晶振产品分类

CREC晶振大类有石英晶体谐振器、石英晶体振荡器、石英晶体滤波器 其中石英晶体谐振器&#xff1a; KHZ石英谐振器 车规级32.768KHz石英谐振器 专为汽车RTC应用而设计&#xff0c;通过AECQ-200可靠性测试&#xff0c;满足汽车电子的高标准时频需求&#xff0c;为客户提供可靠…

Linux 驱动开发 举例

Linux驱动开发涉及编写内核模块或设备驱动程序&#xff0c;以便让Linux内核能够识别和控制硬件设备。以下是一个简单的Linux驱动开发示例&#xff0c;这个示例将展示如何创建一个简单的字符设备驱动。 示例&#xff1a;简单的字符设备驱动 1. 定义设备驱动结构 首先&#xf…