一、USB 总线分析仪使用说明
1.1 概述
USB2.0 总线协议分析仪是一种多用途的 USB 产品开发和测试工具,主要用于捕获 USB 总线(Universal Serial Bus,通用串行总线)上传输的数据,并通过上位机软件(USB2.0 Monitor)进行实时分析显示。软件支持多角度展示协议信息、自定义解析解码与二次开发、多条件组合过滤查找、根据插入设备生成设备树、计算传输速度等丰富功能。
在 USB 产品开发中,USB2.0 总线分析仪有利于 USB 产品开发人员迅速定位问题,从而加速开发进程,缩短产品的上市周期;在 USB 设备制造中, USB2.0 总线分析仪可便捷的测试产品的稳定性,改善 USB 产品的质量;在 USB学习中,USB2.0 总线分析仪是 USB 学习的得力助手,让 USB 学习不再枯燥。
本章节主要介绍分析仪的基本用法,帮助用户快速上手使用; 第二章介绍了一些实用功能,帮助用户提高工作效率 ; 第三、四章各自分享分析仪的 应用案例和 USB 协议相关知识。
1.2 开始使用
1.2.1 硬件连接
分析仪硬件包含监视端(M 口)和采集端(A/B 口),M 口接入USB2.0Monitor软件所在的主机,A/B 口接入被监视的 USB 设备和主机。
有以下两种硬件连接方式。
硬件连接方式 A

硬件连接方式 B

1.2.2 数据采集
以下介绍使用 USB 总线协议分析仪进行数据采集的一般步骤:
1.2.3 常见问题
Q1:已将 USB 总线分析仪硬件连接好,但开始按键仍处于禁用状态,无法采集数据?
A1:出现此现象可能有以下原因:
- 开启了多个 USB2.0 Monitor 程序;
- 驱动程序安装未成功;
- USB 数据线连接异常。
Q2:软件的设备列表中显示 <Device>,没有显示配置、接口的信息。
A2:出现此现象可能有以下原因:
- 分析仪未采集到枚举阶段的设备描述符及相关信息。排除广播包的存在,可以在采集数据时,先点击开始按钮再先连接需要旁听的设备,或者右键-<Device> -> 重启设备(注意此方法需要M口与AB口设备在同一主机下)
- 点击清空按钮导致清除设备列表,若要保留设备列表需要在基础设置界面勾选清空时保留设备列表。
1.3 界面布局
分析仪上位机软件界面默认状态如下图,可使用右上方的界面布局按钮进行自定义调整。

1.3.1 数据列表
上位机提供三种形式的数据列表,分别以 包、事务和传输 为基本单位进行显示。
数据包列表
如下图所示,点击图中布局按钮能从数据包(packet)的角度观察数据。此视图与WCH USBMonitor v1.1一致

事务列表
如下图所示,点击图中布局按钮能从事务(Transcation)的角度观察数据。此视图与WCH USB2.0Monitor v1.2一致

传输列表
如下图所示,点击传输列表能从传输(Transfer)的角度观察数据

1.3.2 解码视图
此视图对列表中选中的数据,进行解码和显示,主要包括以下功能:
如下图所示,选中控制传输内容,可以在右边的解码视图中查看相应的解码信息,包括控制请求,描述符解码,事务状态等信息

1.3.3 过滤导航
过滤导航窗口分为 设备信息树子窗口 和 事务类型统计子窗口。

设备信息树子窗口
地址层中 <Default> 对应默认 0 地址; 若出现 <Device> 表示捕获数据中的该地址对应的设备描述符相关信息不完整, 若要排除是广播信号可以点击复位按钮或右键菜单->复位设备(需要按照方式 A进行硬件连接),观察该设备是否重新枚举。
当同一个地址出现多次时,会在标识相应的出现顺序,点击提示信息可以直接定位到对应的 SetAddress 。
事务类型子窗口
如下图所示,事务类型子窗口跟随上方的设备信息树,负责事务的分类和数量统计。

通过软件复位设备
1.3.4 原始数据视图

1.3.5 工具栏
图标 | 名称 | 功能描述 | 快捷键 |
---|---|---|---|
![]() |
打开 | 打开已有的*.usmn文件,进行数据的再次分析 | Ctrl + O |
![]() |
保存 | 将显示数据保存为指定名称的*.usmn格式文件 | Ctrl + S |
![]() |
开始 | 开始记录WCH USB2.0总线分析仪所采集的数据 | Ctrl + E |
![]() |
停止 | 停止记录WCH USB2.0总线分析仪所采集的数据 | Ctrl + R |
![]() |
清除 | 清屏,将当前信息栏中显示的数据全部清除 | Ctrl + X |
![]() |
自动滚动 | 自动滚动到最新抓取的数据 | Ctrl + A |
![]() |
查找 | 用于快速搜索指定数据,详见 2.3 节 | Ctrl + F |
![]() |
翻转检测 | 检测存在翻转异常的事务,详见 2.5 节 | ———— |
![]() |
标记 | 显示已添加标记的数据,通过右键菜单栏添加/删除标记 | ———— |
![]() |
设置 | 显示软件设置界面 | Ctrl + G |
![]() |
过滤按钮 | 隐藏/显示特定类型的事务/数据 | ———— |
![]() |
展开SPLIT过滤按钮 | 展开与SPIL事务有关的过滤按钮 | ———— |
![]() |
开始过滤 | 应用当前的过滤设置 | ———— |
![]() |
停止过滤 | 清空所有过滤条件并生效 | ———— |
![]() |
过滤总览 | 过滤总览界面,显示当前设置的所有过滤条件 | Ctrl + L |
1.3.6 状态栏

1.4 过滤功能简介
数据过滤的操作方式,如下图所示:
1.5 查找与标记
在事务信息栏输入事务信息(地址、端点、事务结构、数据长度、数据内容)。
查找统计栏中显示满足条件的事务数量,点击查找全部标记记录查找范围中的前100个结果的位置。

1.6 右键菜单
可以通过在相应项目上单击鼠标右键,在“数据列表”和“设备信息窗口”上打开弹出式菜单。在弹出式菜单上提供了一些快捷操作,见下文介绍。
1.6.1 数据列表之右键菜单
1.6.2 设备信息窗口之右键菜单
1.7 软件设置
除 1.3 节 介绍的关于界面布局的设置外,软件还提供了以下自定义配置,如下图所示,可以在菜单栏点击【文件】->【设置】,弹出软件设置对话框,进行查看。

对于列表配色可以直接选择对应窗口标题栏的配色按钮进行配置,如下图所示:

二、软件特色功能简介
USB 2.0 Monitor (v1.3) 在实现基本的数据显示/查找功能之外,提供了一系列特色功能,帮助用户更高效地获得数据中的有效信息。
2.1 设备信息列表
设备信息列表位于过滤导航窗口。软件在解析出采集数据中的描述符信息后,使用树形结构分层显示设备信息,并在此结构之上提供便捷的数据过滤操作。

2.2 只显示新插入设备
在此显示设置下,只显示新插入(出现)的地址上的相关数据。可以自动隐藏 USB 广播数据。

2.3 查找与标记
在事务信息栏输入事务信息(地址、端点、事务结构、数据长度、数据内容)。
查找统计栏中显示满足条件的事务数量,点击查找全部标记记录查找范围中的前100个结果的位置。

2.4 时间间隔计算
在 USB 设备开发调试过程中经常需要查看数据之间的时间间隔,利用分析仪的时间戳功能和标记等功能,可以快速查看事务或包之间的时间间隔。

2.5 PID DATA 0/1 翻转检测
USB 协议使用数据翻转同步机制(Data toggle synchronization)实现数据传输的同步。 在 4.3 节中介绍了数据传输中 DATA 翻转的常见情况。
USB 2.0 Monitor 软件可以对设备翻转错误情况的检测和标记。(检测范围不包括同步端点和 SPLIT 事务下的数据)
只需在工具栏点击翻转检测按钮,如果存在翻转错误的事务,标记窗口将会记录错误事务位置。

2.6 HID 报表解析
选中数据列表中 HID类设备的 HID 报表描述符请求后,在解码视图中查看 HID 报表描述符的解码信息。

2.7 通过软件复位设备
当硬件按照方式 A连接时,用户可通过软件复位指定设备,无需手动插拔设备。
如下图所示,设备先连接分析仪后开始采集,采集数据中没有描述符相关信息,所以 Addr 13 处显示 <Device>。 可以通过点击复位按钮使得设备重新枚举。

也可以通过 右键 -> 复位设备,重新枚举具体设备。下图演示中对 Addr 15(一个 HUB)进行复位,HUB 下游设备也会跟着重新枚举。

2.8 支持长久挂机
软件支持挂机测试,不会因数据量大导致内存占用过高。显示控件采用懒加载机制,采集数据定时写入磁盘可以自定义设置缓冲目录,限制采集数据大小。

2.9 显示 NRZI 波形图
数据列表右键菜单 -> 显示 NRZI 波形图,或在传输列表中鼠标悬停在“+”位置弹出 NRZI 波形图窗口,具体操作如下图演示:

三、USB 总线协议分析仪应用实例分享
以下内容从实际应用角度,介绍 USB 总线协议分析仪的使用场景(范围)和主要功能。
3.1 采集与分析 Linux/Mac/BIOS 等环境下的 USB 数据
按照 硬件连接方式B 连接硬件,先打开软件开始采集,然后连接键盘,打开被检测主机进入BIOS。分析仪将记录BIOS下的鼠标枚举数据。(示例数据 BOOT_MOUSE.usmn)

3.2 采集与分析组合设备(Composite Devcie)数据
组合设备具有可以独立控制的多接口。 关于组合设备与复合设备的区别可以查看 4.4.2
如下图所示,当被采集设备为组合设备时,以多串口组合设备为例,在设备管理器和其他软件中可以看到两个串口。通过USB分析仪抓取数据,在设备列表中可以清晰地看到设备的接口及接口下端点的分布,通过过滤功能快速查看某一接口的通讯数据。
3.3 采集与分析 HUB 相关设备数据
3.3.1 过滤 HUB 广播包(分析仪处于 HUB 下游口)
当 USB 总线中接入 HUB 且被采集设备位于该 HUB 下时,分析仪可能采集到HUB 广播数据。
例如,当拓扑结构如下图,且图中 DEV 设备为高速设备时,采集到的数据中存在广播包。关于 HUB 广播行为可查看 4.4.1 节 USB 广播包产生原因 介绍。

示例文件 U盘_broadcast.usmn 中记录了采集 U 盘数据时存在广播包的情况。

3.3.2 采集 HUB 复合设备(Compound Device)数据
Compound 设备 包含一个内嵌的 USB HUB 和一个或者多个不可移动的 USB 设备。关于 composite 设备与 compound 设备的区别可以查看 4.4.2 节介绍。
下面以一种带有 3 个 USB 接口的 USB 网卡设备为例,进行抓包分析。
按 2.2 节 介绍,连接硬件,先点击开始采集,再接入网卡设备。

如上图所示,在设备列表中可以看出 该网卡位于 USB HUB 的端口 1。
3.3.3 HUB 下设备未工作现象分析(分析仪处于HUB上游口)
按 2.2节 介绍,连接硬件,先点击开始采集,再接入 USB HUB 和下游设备。
测试对象为4端口的高速HUB,使用5个HUB 一拖四,四个下游HUB均接入串口设备。拓扑结构如下图

利用USB分析仪分析HUB下设备状态
接入设备后,在USB设备列表中查看设备是否枚举。下图对比可以看出,地址为 42 的 HUB 的 Port 3 端口上设备枚举未成功。

快速筛选出指定地址的数据
结合USB 协议,接下来,我们查看地址为 42 的 HUB 设备发生了什么。
右键USB 设备列表中的 Addr 42,只显示此设备。

工具栏点击 NAK 快速过滤按钮

查找指定地址端点的数据并标记
结合USB HUB类设备相关协议,观察传输列表数据,HUB 设备的中断IN端点会上报 Port 状态。
使用查找标记功能定位。发现中断IN端点第一次返回 0x16(如果检测到四个Port均有设备插入将上报数据0x1E ),说明该 HUB 并未检测到 Port 3 有设备插入。

3.4 设备枚举异常原因分析
不正确地修改 USB 描述符容易导致 USB 枚举出现故障。示例文件中提供了一个“端点描述符长度错误”的示例。

四、USB 2.0 协议知识分享
4.1 USB 2.0 协议数据格式简介
下图以最常见的 控制传输,请求设备描述符 为例,说明协议结构关系

4.1.1 域(Field)
一个包由有不同的域组成。
4.1.2 包(Packet)
包类型一般可分以下四种:

1. Token packets:由主机发送。包结构包含一个 PID 字节、11 位地址和一个 5 位 CRC。
2. Data packets:数据包结构包含 PID 字节、数据字段和 16 位 CRC。数据字段可以携带 0 ~ 1023 字节的数据。
3. Handshake packets:仅由一个 PID 字节组成。有三种类型的握手数据包:
4. Start of Frame packets(SOF):SOF 包由递增的 11 位帧号组成。 在全速总线上,该数据包由主机每 1 毫秒发送一次,在高速总线上每 125 us 发送一次,指示一帧的开始。
软件中,数据包列表从包(Packet)的角度展示采集信息
4.1.3 事务(Transaction)
每笔事务最多可以分为三个相位(phase)。这三个相位依序产生,分别是令牌(token)、数据(data)和握手(handshake)。 每个相位包含一个或两个包(packet)。
组成事务的包因端点类型而异。有四种终结点类型:批量(Bulk)、控制(Control)、中断(Interrupt)和同步(ISO)。同步传输不需要握手相位
USB 上的所有通信都是由主机发起的。在令牌相位,主机发出令牌包,令牌包决定了事务中数据包的传送方向和数据传递的路径(地址,端点)。 令牌包可以是 IN、OUT 或 SETUP。
在数据相位,发射器将发送一个数据包。对于 IN 请求,设备可能会在数据阶段发送 NAK 或 STALL 数据包,以指示它无法为收到的令牌提供服务。
在握手相位,接收方可以发送 ACK、NAK 或 STALL,指示交易的成功或失败。
软件中,事务列表从事务(Transaction)的角度展示采集信息
4.1.4 传输(Transfer)
软件中,传输列表从传输(Transfer)的角度展示采集信息
批量(Bulk)传输
批量传输通常用在数据量大、对数据的实时性要求不高的场合。如下图所示,批量传输中有三种事务: IN 事务、OUT 事务、PING 事务(高速)。

可以打开示例文件中的 U盘传输,查看批量传输。
中断(Interrupt)传输
中断传输在一定时间间隔请求一次。设备可以在描述符中指定主机的查询间隔。一般在鼠标、键盘等输入设备中使用。如下图所示,中断传输中使用 IN 事务和 OUT 事务。

同步(Isochronous)传输
等时传输(同步传输)用在数据量大、对实时性要求高的场合。
如下图所示,同步传输中的事务不需要握手时相,因此也没有 CRC 校验和重传机制。所以一般用于需要保留带宽且具有高容错能力的设备,比如音视频等多媒体设备。

控制(Control)传输
下图摘自USB 2.0 规范,展示了控制传输的数据流。按数据流的传输方向, 分为控制读传输,控制写传输和无数据的传输三种。一次传输又可以拆分成建立阶段(Setup Stage),可选的数据阶段(Data Stage)和状态阶段(Status Stage)。

通过USB分析仪,观察具体的传输数据,可以更好地理解控制传输过程。
双击软件的传输列表中的传输层,展开对应的事务层显示。下面分别展示了 获取描述符请求和设置地址请求在软件的传输列表中的显示。

控制读(以Get Descriptor请求为例)

无数据阶段的控制传输(以Set Address请求为例)
选中传输层内容,可以在右边的解码视图中查看相应的解码信息。 如下图所示,解码视图分阶段列出一次控制传输所携带的信息。

4.2 了解 USB 设备枚举过程
所谓枚举阶段就是主机了解插入的 USB 设备的功能并未接下来的数据交换(应用程序的通信)做准备的过程。 通常我们采集USB的数据都是位于 HUB 的下游口,观察不到 HUB 的行为。所以我们将 HUB 上游口接入分析仪,采集 HUB 接入设备的过程和设备枚举的过程。
No.371 HUB 未接入设备时被挂起,总线状态变为全速。

No.374 下游接入设备后,主机发送 Clear Feature(DEVICE_REMOTE_WAKEUP) 请求唤醒 HUB。
No.385 ~ No.432 HUB 通过 Get Port Status 获取每个 Port 的状态。 HUB的状态数据可以在右侧解码视图中查看

No.432 检测到 Port 4 下 设备接入。之后 No.447 使用 Set Port Feature(C_PORT_CONNECTION) 清除标记 Port 4 的 Connect 标志
No.457 再次获取 Port 状态,确定新设备已连接。之后, 在发起第一次复位之前,至少等待 100 ms 以使得插入操作的完成以及设备电源稳定工作。
No.573 去抖结束后,通过 Set Port Feature(PORT_RESET) 向端口请求以启用端口并使连接的设备准备好使用。
No.1167 HUB 状态更改端点上报 Port 4 状态变化,No.1171, 获知 Port is enabled No.1190~No.1199 清除 C_PORT_RESET 标志位并确认;

No.1250 通过默认地址端点第一次发出设备描述符请求;
No.1278 ~ No.1913 发出第二次复位信号;
No.1961 Set Address 11;
No.1987 第二次请求设备描述符,长度18;
No.2034 获取配置描述符;
No.2265~No.2286 获取字符串描述符,包括 Language ID 和 Product ID;
No.2365~No.2455 再次获取设备描述符和配置描述符;
No.2675 设置配置,设备枚举完成。
可以从示例文件夹中查看具体数据内容。
4.3 USB 2.0 中 Data 翻转同步和重试机制学习
USB 协议中使用 PID DATA0 和 DATA1 以及数据收发器中的切换串行位(separate data toggle sequence bits),来实现事务的串行同步机制。 同步端点不支持 Data toggle synchronization。而在高速、高带宽的同步端点和中断端点中使用 data PID sequencing 技术替代 data toggle synchronization 机制。 这部分内容的介绍参考在 USB 2.0 规范的 5.9 和 8.6 节中介绍。
USB2.0协议规范中,指示数据包的PID有四种。除DATA0和DATA1外,DATA2用于高速高带宽同步事务 ,MDATA 可能出现在 SPLIT 分离包或高速同步事务中。不同的传输类型中数据包的翻转规律不同。
我们可以借助分析仪观察具体数据翻转情况,在数据列表视图可以清晰的看到事务中数据包的 PID。下方截图为隐藏 NAK 状态的事务以及 SOF 包之后,控制传输中获取配置描述符的过程。

4.4 USB HUB相关知识
4.4.1 USB 广播包产生原因及如何过滤广播包
USB HUB 提供 USB 设备与主机之间的电器接口,上游口面向主机,下游口面向设备。
下图摘自 USB2.0 规范 11.1.2 节,显示了 HUB 中上行和下行数据包的信号连接行为。

这张图从右往左:
如果当被采集设备和其它 USB 设备接入同一个 HUB 控制器或者总线上存在 USB HUB 时,在分析仪中可能采集到 HUB 发往其它设备的广播包。
4.4.2 复合设备(Compound Device)、组合设备(Composite Devcie)
复合设备(Compound Device)
复合设备是多个设备通过一个HUB形成的一个复合设备,在PC上显示为一个设备。其拓扑结构如下图。(详见 USB 2.0 规范 5.2.3 节)

组合设备(Composite Devcie)
组合设备是一个设备拥有多个接口,在PC上设备管理器会显示多个设备,常见如键盘。具体实例可参考采集与分析组合(Composite)设备数据