Windows USB设备驱动开发:HLK测试指南
Windows USB设备驱动开发:HLK测试指南
Windows硬件实验室工具包(HLK)测试可用于系统、USB主机控制器、集线器和设备的其他测试。这些测试涵盖基本设备功能、可靠性和与Windows的兼容性。本文将详细介绍在HLK中进行USB设备开发测试的相关内容,包括测试的先决条件、硬件要求、测试选择、建议的测试、USB-IF测试要求以及常见故障排除等。
先决条件
在开始运行徽标测试之前,请确保满足以下要求:
- 若要运行这些测试,至少需要两台计算机:一台测试服务器和一台测试客户端;
- 测试客户端必须具有最新版本的Windows;
- 测试客户端必须具有集成或作为加载项卡的EHCI和xHCI控制器。控制器必须公开用户可访问的根端口(没有集成中心);
- 从Windows Hardware Lab Kit下载将Windows HLK下载到测试服务器;
在HLK中运行USB测试的硬件要求
若要运行HLK测试,需要:
- 主控制器(集成或作为加载项卡)、集线器或设备进行认证。在测试客户端上打开设备管理器,并确保要使用的USB控制器公开用户可访问的根端口(没有集成集线器)。
- 符合USB-IF的外部SuperSpeed集线器,用于评估系统兼容性。我们已使用以下中心测试HLK测试:
- Texas Instruments SuperSpeed(USB 3.0)Hub参考设计板(TUSB8040EVM)。
- SuperMUTT包。MUTT设备作为中心和控制器测试的测试设备。此处提供了完整的一组要求:
- USB总线控制器测试先决条件
- USB Hub.Connectivity测试先决条件
USB的HLK测试选择
适用于系统、主机控制器、集线器或设备的USB测试将在HLK Studio中自动选择。在Windows HLK入门中执行步骤1-5后,请确保:
- 在步骤5中,在HLK Studio的“选择”选项卡中选择了正确的设备。
- 在步骤6中,适用于设备的所有测试都显示在HLK工作室的“测试”选项卡中。 若要运行这些测试,必须在左侧检查框中选择测试,然后单击“运行所选测试”。本文档的以下部分列出了USB测试测试。
建议的Windows HLK测试
除了HLK Studio中自动选择的所有USB测试外,我们还建议使用连接到受测系统、控制器或集线器的MUTT或SuperMUTT运行基础测试。对于系统提交,这些是系统基础知识(SysFund)测试,对于控制器、中心或设备提交,这些是设备基础知识(DevFund)测试。
- SysFund系统基础知识
- 设备基础知识(DevFund)
建议用于系统开发的USB测试
如果要构建新系统,建议使用本文中的测试。若要运行本文中列出的DF测试,必须具有MUTT设备。根据具体阶段,需要运行以下命令来更新设备的驱动程序:
muttutil -updatedriver <driver_inf>.inf
MuttUtil工具包含在MUTT软件包中。如果要生成新系统,建议进行以下USB HCK测试:
阶段1 - 系统启动
- DF - 在基本) 之前和之后使用IO睡眠(
- DF - PNP(禁用和启用),带IO之前和之后(基本)
- USB公开端口控制器测试
- USB xHCI传输速度测试
- USB3终止
阶段2 - 系统集成
- DF - 在(功能) 之前和之后重启IO
- DF - 睡眠和PNP(禁用和)启用IO之前和之后(功能)
- USB xHCI传输速度测试
阶段3 - 系统优化
系统1
- DF - 在(认证) 期间使用IO休眠
- DF - 并发硬件和操作系统(CHAOS)测试(认证)
系统2
- DF - 睡眠和PNP(禁用和)启用IO之前和之后(功能)
- USB xHCI传输速度测试
如果支持扩展坞,则系统3:
- 在停靠的系统上运行为系统集成阶段列出的测试。
USB-IF测试
USB硬件(特别是USB设备或主机控制器)必须满足USB-IF的机电要求才能获得Windows认证。USB-IF认证涵盖USB设备和主机控制器的更深入测试,并确保高质量的实现。
早期版本的Windows硬件认证工具包要求制造商将其设备提交到USB-IF进行测试。新版本的HLK USB-IF测试要求允许制造商从USB-IF网站下载并运行测试,然后断言这些测试已通过HLK。如果设备已通过USB-IF认证,则需要向HLK提供设备的USB-IF测试ID(TID)。
即使USB设备通过了当前的Microsoft Windows认证计划要求,其中许多设备也不完全符合USB规范。最常见的示例包括:
- 中心:通常失败,因为它们报告它们实际上只有总线电源时具有外部电源。错误报告会导致总线上的电压条件无效。
- 硬盘驱动器:通常由于USB总线的耗电过多而无法正确枚举,因此会发生故障。在许多情况下,这些硬盘驱动器需要非标准电缆才能正常工作。
- 闪存驱动器:通常失败,因为它们无法正确处理描述符请求;这会导致设备挂起,并使Microsoft操作系统描述符失败。
- 读卡器:通常失败,因为它们未进入选择性挂起状态。
- 打印机:通常失败,因为它们不会从待机状态恢复。
- 音频:通常失败,因为它们不会从待机状态恢复。
不合规的USB设备可能会导致用户体验不佳、公共关系困难、产品退货、产品支持呼叫量高,以及与已发货产品中的服务bug相关联的成本增加。
USB-IF测试的Windows HLK要求
设备(Device.Connectivity.UsbDevices.UsbifCertification):
我们强烈建议通过USB-IF认证。但是,Windows HLK要求Device.Connectivity.UsbDevices.UsbifCertification不再需要USB设备的USB-IF认证。该要求指出,设备可以经过USB-IF认证,或者USB-IF的一部分认证测试可以在设备上运行。主机控制器(Device.BusController.UsbController.UsbifCertification)
USB主机控制器制造商必须获得完整的USB-IF认证才能满足各自的Windows HLK要求。Hubs(Device.Connectivity.UsbDevices.UsbifCertification)
USB集线器制造商必须获得完整的USB-IF认证才能满足各自的Windows HLK要求。
系统制造商在选择要集成到其系统中的USB主机控制器时,应了解这些要求。这些要求可以显著改善USB设备的客户体验。它们有助于防止崩溃和挂起的关键原因,并减少排查和调试不合规问题所花费的时间。
Windows硬件认证提交选项
此图显示了如何获取Windows认证的过程流。
可以使用以下方法之一提交USB设备进行Windows认证,以满足新的USB-IF测试要求:
- USB-IF认证
从USB-IF授权的独立测试实验室获取USB-IF认证,然后提交设备以获得Windows认证资格。可以选择以下选项之一来获取设备或主机控制器的USB-IF认证:
将设备提交到USB-IF授权的独立测试实验室进行测试。
备注 它通常需要一到两周的授权独立测试实验室来测试单个USB设备是否符合USB规范。
若要将USB设备提交到授权的独立测试实验室进行USB-IF认证,制造商必须在实验室注册,并具有有效的供应商ID(VID)。
设备成功通过USB-IF认证测试后,你拥有该设备的以下权限:
可以将USB徽标用于设备的宣传册、包装和产品信息。
可以在USB-IF集成商列表中列出。
将设备带到USB-IF赞助的合规性研讨会。每年在美国举办四次研讨会,在亚洲举办一次研讨会。
设备通过USB-IF认证测试后,你将收到来自测试实验室或车间的测试ID号(TID)。运行设备的其余Windows HLK测试时,请向Windows HLK提供此TID编号。
在授权的独立测试实验室测试和认证USB设备的成本因实验室而异。某些授权的独立测试实验室为某些关联企业提供批量折扣或折扣。在任何USB-IF赞助的合规性研讨会上测试和认证USB设备都无需支付任何费用。你必须是USB-IF的成员才能参加USB-IF赞助的合规性研讨会。
- USB-IF自测试
下载USB命令验证程序测试工具和USB互操作性测试文档,并从USB-IF运行所需的测试。然后提交设备以获取Windows认证资格。
USB主机控制器和集线器不符合USB-IF自测试选项的条件,必须获得完整的USB-IF认证。
如果你决定使用USB-IF自测试选项来获取Windows认证,则必须至少执行以下USB-IF测试:
USB命令验证程序测试:USB命令验证程序测试验证设备理解和接受常见USB命令的能力。
USB互操作性测试:USB互操作性测试针对设备与其他USB外设共存的功能和能力。
这些测试在Windows HLK外部下载并运行。请注意,这些测试必须在最新版本的Windows上运行,仅(USB-IF)指定的,即使你提交的USB设备是多个Windows版本的Windows认证资格。测试结果适用于所有Windows版本的所有Windows认证提交。
以下步骤介绍如何执行所需的USB-IF测试,以限定设备获得Windows认证。
- 从USB软件和硬件工具下载USB命令验证程序测试工具(USB3CV)以及互操作性测试文档。
- 运行下表中指定的USB硬件的USB-IF测试:
- 如果测试通过,请输入字符串“SELFTEST”作为测试ID(TID,)输入HLK中的USB-IF认证验证测试。
Windows HLK中USB测试的常见故障
适用于USB的DevFund测试
- 错误条件:设备状态检查失败,并显示一个错误,指示MUTT设备不存在。
- SuperMUTT作为驱动程序运行Winusb.sys或Usbtcd.sys。可以通过安装MUTT软件包来获取驱动程序和驱动程序安装包文件。
- 确保设备管理器将SuperMUTT的硬件ID显示为“USB\VID_045E&PID_078F”。注意PID_078E不正确。
- 确保设备管理器(按连接查看>设备)显示xHCI控制器下游枚举的SuperMUTT。
- 在USBView中,确保SuperMUTT设备以SuperSpeed运行。注意可以从Microsoft Windows软件开发工具包(SDK)中的安装Windows调试工具包安装USBView。或者,USBView安装在Windows驱动程序工具包(WDK)的调试器文件夹中。
- 确保MUTT固件是最新的。在提升的提示符下,在安装MUTT软件包的目录中运行“muttutil -updatefirmware”。
- 如果问题仍然存在,请报告以下附件的问题:
设备管理器和USBView的屏幕截图,其中显示了上述列表中的项1-4。
MuttUtil命令的输出。
- 错误条件:DevFund在简单的I/O传输过程中失败。
- 转到https://aka.ms/usbtrace并下载usbtrace.cmd。
- 使用此脚本捕获事件的驱动程序日志,以便进一步调查。
- 使用bug附加%SystemDrive%\Windows\Tracing的所有内容。
- 保存并附加失败测试的.hlkx文件。
- 错误条件:MUTT设备已连接到系统,但未安装正确的驱动程序。
最有可能的驱动程序安装失败,或者设备没有最新的固件。安装Winusb.sys或Usbtcd.sys作为驱动程序。可以通过安装MUTT软件包来获取驱动程序和驱动程序安装包文件。