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

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 引脚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值