Microsoft USB 测试工具 (MUTT) 是用于测试 USB 硬件与 Microsoft USB 驱动程序堆栈互操作性的设备集合。 本文简要概述了不同类型的 MUTT 设备、可以使用设备运行的测试,并建议控制器、中心、设备和 BIOS/UEFI 测试的拓扑。
若要与 MUTT 设备通信,需要 MUTT 软件包。 此包包含多个测试工具和驱动程序,使硬件测试工程师可以测试其 USB 控制器或集线器与 Microsoft USB 驱动程序堆栈的互操作性。 测试工具验证 USB 主机控制器软件、硬件 (包括固件) 以及主机控制器和设备之间安装的任何 USB 集线器。
如何获取 MUTT 设备
本文中列出的制造商销售运行互操作性测试所需的 MUTT 硬件板。
MUTT
- 基于 CY3681 EZ-USB FX2 开发工具包的设计, (赛普拉斯 FX2);
- 与 FX2 功能兼容,例如高速和全速传输到批量、常时、控制、中断终结点;
- 模拟来自 USB 2.0 设备的流量;
MUTT 包
MUTT Pack 是 USB 2.0 集线器和 FX2 设备的组合,用于控制集线器并充当下游设备。
- 基于 Cypress Hub 和 Cypress FX2 的设计;
- 中心功能。 这可以作为多 TT 或单 TT 高速集线器运行;模拟过流;
- 公开可以打开或关闭的下游端口;
- 模拟 USB 2.0 集线器行为;
- 可以在自供电或总线供电模式下运行;
MUTT Pack 有两个 USB 连接器。 标准 B 连接器用于将 MUTT 包插入主机系统。 标准 A 连接器位于 MUTT Pack 上嵌入式中心的下游,可用于本文档 后面部分介绍的其他设备测试。
如何为 MUTT 包供电
MUTT Pack 使用小型跳线 (见图 3) 在自供电模式和总线供电模式之间切换。 在总线供电模式下,主机系统的 USB 总线为 MUTT Pack 供电。 在自供电模式下,MUTT Pack 使用外部 5V 电源适配器供电。
使用以下流程图确定如何为 MUTT Pack 提供支持,请勿在没有电源跳线的情况下使用 MUTT 包。
下图显示了如何使用跳线通过主机系统的 USB 总线为 MUTT Pack 供电:
下图显示了如何使用跳线通过外部电源适配器为 MUTT 包供电:
在 MUTT Pack 上更改跳线时,断开与主机系统的任何现有电源适配器和电缆的连接。
SuperMUTT
- 基于 FX3 EZ-USB FX3 的设计。
- 实现 SuperSpeed 功能,例如批量流功能。
- 模拟 USB 3.0 设备流量。
- 此设备不支持低速操作。
- SuperMUTT 的图片。
SuperMUTT 包
SuperMUTT 包是两个设备在一起。 它是一个 USB 3.0 集线器,下游有一个 Cypress FX2 设备。 设备控制中心,还充当下游设备。 SuperMUTT 包模拟 USB 3.0 集线器行为。
下游设备是 2.0 设备,而不是 USB 3.0 设备。
DR MUTT
在测试受测设备的主机模式时,DR MUTT 的作用类似于 SuperMutt,但它也可以切换到主机模式来测试受测设备的功能模式。
USB Type-C ConnEx
USB Type-C 连接练习器 (USB Type-C ConnEx) 是一个自定义防护板,具有四对一开关,用于自动执行 USB Type-C 互操作性方案。 该防护板设计为将 Arduino 用作微控制器。
MUTT 软件包中的工具
MUTT 软件包包含多个要用于 MUTT 设备的工具。 工具套件包括固件升级应用程序、驱动程序安装包以及向设备发送传输的应用程序。
下载 MUTT 软件包
Microsoft USB 测试工具 (MUTT) 软件包包含硬件测试工程师的测试工具,用于测试其 USB 控制器或集线器与 Microsoft USB 驱动程序堆栈的互操作性。 随附的文档简要概述了不同类型的 MUTT 硬件,并建议控制器、集线器、设备和 BIOS/UEFI 测试的拓扑。 该文档还包含有关如何运行测试、在 USB 驱动程序堆栈中跟踪事件和在内核调试器中捕获信息的过程信息。
测试工具说明
MuttUtil
MuttUtil 在 MUTT 设备上执行各种任务。
- 汇报测试设备的固件;
- 为 MUTT 设备安装驱动程序;
- 验证设备是否已安装且未出错;
- 更改设备的运行总线速度;
- 将设备配置为在指定时间段后发送恢复唤醒信号;
- 对于 MUTT 包,它将集线器设置为全速或高速运行;作为单 TT 或多 TT 中心;
MuttUtil 嵌入在包含的测试脚本的安装部分中,以确保测试设备正确升级到最新固件。 该工具包含在 MUTT 软件包中。
将 CMUTTUtil.exe 用于 CMUTT (SuperMUTT) 设备。 例如,运行 CMuttUtil.exe -updatefirmware 以更新 CMUTT 上的映像。 可以从 Microsoft USB 测试工具概述 (MUTT) 设备中所述的 MUTT 软件包安装 CMuttUtil.exe。
如何运行 MuttUtil
MuttUtil 帮助: 运行以下命令以获取命令行选项的列表:
MUTTUtil.exe
查找连接到系统的所有 MUTT 设备
MUTTUtil.exe -list
: : HARDWARE ID : PROBLEM CODE : DRIVER
DEVICE : 0 : USB\VID_045E&PID_0611&REV_0034 : 0 : WINUSB
DEVICE : 1 : USB\VID_045E&PID_078E&REV_8011 : 28 :
Return value: 1
上述命令指示系统附加了 SuperMUTT (1) 和 MUTT Pack (0) 。 Microsoft 提供的内核模式驱动程序(Winusb.sys)是 SuperMUTT 设备的函数驱动程序。
MUTT Pack 设备的问题代码 28 指示没有为设备加载驱动程序。
更改 MUTT 设备的个性
MUTT 设备还用作 USB UWP 应用示例的测试设备。 在这种情况下,必须通过运行 -SetWinRTUsb 选项来更新固件。 在本练习中,SuperMUTT 设备设置为 WinRT 个性。
若要将其更改回 MUTT 个性,请使用以下命令:
MuttUtil.exe -# 1 -MuttPersonality
c:\Program Files (x86)\USBTest\x64>MuttUtil.exe -MuttPersonality
Looking for MUTT devices
Send command to change device personality
Return value: 0
c:\Program Files (x86)\USBTest\x64>MuttUtil.exe -list
: : HARDWARE ID : PROBLEM CODE : DRIVER
DEVICE : 0 : USB\VID_045E&PID_078F&REV_0034 : 0 : WINUSB
Return value: 1
请注意,硬件 ID 已更改为 USB\VID_045E&PID_078F&REV_0037。 修订版本指示固件版本号。
为 MUTT 设备安装驱动程序
为包含安装信息的驱动程序指定 INF 文件。 例如,
MUTTUtil.exe -UpdateDriver USBTCD.inf
c:\Program Files (x86)\USBTest\x64>MuttUtil.exe -UpdateDriver USBTCD.inf
Return value: 0
c:\Program Files (x86)\USBTest\x64>MuttUtil.exe -list
: : HARDWARE ID : PROBLEM CODE : DRIVER
DEVICE : 0 : USB\VID_045E&PID_078F&REV_0034 : 0 : USBTCD
Return value: 1
上述命令将现有驱动程序替换为指定的 USBTCD.sys 驱动程序。 驱动程序包含在 MUTT 软件包中。
如果附加了多个 MUTT 设备,可以同时更新驱动程序。
MUTTUtil.exe -# 0 -# 1 -MultiUpdateDriver USBTCD.inf usbfx2.inf
上述命令为设备 0 安装 USBTCD.sys,为设备 1 安装 Winusb.sys 等。
更新 MUTT 设备上的固件
MuttUtil.exe -UpdateFirmware
c:\Program Files (x86)\USBTest\x64>MuttUtil.exe -UpdateFirmware
Looking for MUTT devices
0: Updating device firmware from version 34 to version 37
Erasing EEPROM -- this takes approx 30 seconds
Writing core firmware image
Writing Table at sector 0x09
Writing Table at sector 0x0A
Writing Table at sector 0x0B
Writing Table at sector 0x0C
Writing Table at sector 0x0D
Writing Table at sector 0x0E
Writing Table at sector 0x0F
Writing Table at sector 0x10
Writing Table at sector 0x08
0: Resetting device
Return value: 0
c:\Program Files (x86)\USBTest\x64>MuttUtil.exe -list
: : HARDWARE ID : PROBLEM CODE : DRIVER
DEVICE : 0 : USB\VID_045E&PID_078F&REV_0037 : 0 : USBTCD
Return value: 1
仅当设备中的版本旧时, 命令才使用固件更新 EEPROM。 固件映像嵌入工具中。 如果设备的版本比工具安装的固件版本更新,则它不会替换设备中的固件。 如果要替换设备中的固件而不考虑版本,请改为使用 -ForceUpdateFirmware 选项运行 MuttUtil。
更新固件的另一种方法是将其直接写入 EEPROM 或 RAM。 为此,必须具有固件文件。
若要擦除 EEPROM,请使用 -EraseEEPROM 选项
断开连接、重新连接和重新枚举设备
MuttUtil.exe -Reconnect
MuttUtil.exe -CyclePort
上述命令会导致设备断开连接,然后在同一端口上重新连接。
选项 -CyclePort 会导致设备断开连接并重新连接到端口,但设备未以电气方式断开连接。 设备在软件中断开连接并重新连接。 此操作会导致设备重置,PnP 管理器会重新生成设备节点。
若要重置 MUTT Pack 或 SuperMUTT Pack 设备的中心,请使用以下命令:
MuttUtil.exe -# 1 -ResetHub
更改设备的速度
可以使用以下命令更改 MUTT 设备的设备速度:
MuttUtil.exe -# 0 -SetFullSpeed
MuttUtil.exe -# 1 -SetHighSpeed
命令会导致设备断开连接,然后以指定的速度在同一端口上重新连接。
如果要更改 MUTT Pack 或 SuperMUTT Pack 的中心速度以全速模式运行,请使用 -HubFS 命令:
MuttUtil.exe -# 1 -HubFS
发送恢复信号以唤醒系统
通常,在用户执行某些操作时,设备 (低功率) 发送恢复信号。 可以使用以下命令模拟该行为:
MuttUtil.exe -WakeAfterSuspend 5000
命令将设备配置为在总线暂停 5 秒后发送恢复信号。
还可以使用 -DisconnectAfterSuspend 选项将设备配置为在总线挂起后的特定时间段内断开连接和重新连接。
设置和清除端口下游端口上的过流 - MUTT Pack 和 SuperMUTT Pack
这些命令设置并清除 Mutt-Pack 公开端口的过流引脚。
MuttUtil.exe -# 1 -SetOvercurrent
MuttUtil.exe -# 1 -ClearOvercurrent
将集线器转换为 TT 高速集线器 - MUTT Pack 和 SuperMUTT Pack
可以使用以下命令将中心设置为作为多 TT 高速集线器或单 TT 高速集线器运行:
MuttUtil.exe -# 1 -HubHSMultiTT
MuttUtil.exe -# 1 -HubHSSingleTT