一、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

硬件连接方式A

硬件连接方式 B

硬件连接方式B

1.2.2 数据采集

以下介绍使用 USB 总线协议分析仪进行数据采集的一般步骤:

1.将 USB 分析仪硬件的 M 口与运行 USB2.0 Monitor软件的主机相连。
2.点击软件“开始”按钮,选择显示模式。
• 全显示模式:代表显示全部数据。
• 只显示新插入设备(推荐模式):只显示开启分析后,新插入设备的数据,可以有效避免广播包(由HUB产生)与未解析设备的问题。
3.按照方式 A方式 B,将 USB 分析仪硬件的 A/B 口与被监视的主机和 USB 设备相连。
4.当 A/B口开始数据通信时,软件中的数据列表实时显示采集到的数据。

1.2.3 常见问题

Q1:已将 USB 总线分析仪硬件连接好,但开始按键仍处于禁用状态,无法采集数据?

A1:出现此现象可能有以下原因:

  1. 开启了多个 USB2.0 Monitor 程序;
  2. 驱动程序安装未成功;
  3. USB 数据线连接异常。

Q2:软件的设备列表中显示 <Device>,没有显示配置、接口的信息。

A2:出现此现象可能有以下原因:

  1. 分析仪未采集到枚举阶段的设备描述符及相关信息。排除广播包的存在,可以在采集数据时,先点击开始按钮再先连接需要旁听的设备,或者右键-<Device> -> 重启设备(注意此方法需要M口与AB口设备在同一主机下)
  2. 点击清空按钮导致清除设备列表,若要保留设备列表需要在基础设置界面勾选清空时保留设备列表。

1.3 界面布局

分析仪上位机软件界面默认状态如下图,可使用右上方的界面布局按钮进行自定义调整。

软件默认布局

1.3.1 数据列表

上位机提供三种形式的数据列表,分别以 包、事务和传输 为基本单位进行显示。

数据包列表

如下图所示,点击图中布局按钮能从数据包(packet)的角度观察数据。此视图与WCH USBMonitor v1.1一致

数据包列表

事务列表

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

事务列表

传输列表

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

传输列表

1.3.2 解码视图

此视图对列表中选中的数据,进行解码和显示,主要包括以下功能:

• USB 协议传输层关键信息提取
• USB 协议控制传输中事务信息的分阶段显示
• USB 协议事务层详细信息显示

如下图所示,选中控制传输内容,可以在右边的解码视图中查看相应的解码信息,包括控制请求,描述符解码,事务状态等信息

解码视图

1.3.3 过滤导航

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

过滤导航窗口

设备信息树子窗口

设备信息树子窗口使用树形控件的方式,可视化显示设备信息。按照设备的端点和描述符布局分为以下几个层次:
• 第一层(设备层)显示设备地址、传输速度、名称(产品字符串,VID/PID)以及同时旁听 HUB 及其下游设备时,下游设备所在的端口号。
• 第二层(配置层)显示设备的配置描述符信息
• 第三层(接口层)显示配置下的接口描述符信息
• 第四层(端点层)显示接口下的端点描述符信息

地址层中 <Default> 对应默认 0 地址; 若出现 <Device> 表示捕获数据中的该地址对应的设备描述符相关信息不完整, 若要排除是广播信号可以点击复位按钮或右键菜单->复位设备(需要按照方式 A进行硬件连接),观察该设备是否重新枚举。

当同一个地址出现多次时,会在标识相应的出现顺序,点击提示信息可以直接定位到对应的 SetAddress 。

事务类型子窗口

如下图所示,事务类型子窗口跟随上方的设备信息树,负责事务的分类和数量统计。

过滤导航窗口

通过软件复位设备

点击复位按钮,软件将尝试复位没有获取到描述符信息的设备(标识为 <Device> ),详见 2.7 节介绍

1.3.4 原始数据视图

• 点击数据列表中的传输项、事务项、数据包项会显示对应项数据阶段的原始数据
• 复制按钮可以选择将原始数据复制为 C 风格或 ASM 风格

原始数据

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 状态栏

状态栏

A. 设备状态:显示设备连接状态
B. 读取速度:通讯数据采集速度
C. 原始数据:通讯数据总数
D. 分析进度:通讯数据的分析进度

1.4 过滤功能简介

数据过滤的操作方式,如下图所示:

1.5 查找与标记

在事务信息栏输入事务信息(地址、端点、事务结构、数据长度、数据内容)。

查找统计栏中显示满足条件的事务数量,点击查找全部标记记录查找范围中的前100个结果的位置。

查找与标记

1.6 右键菜单

可以通过在相应项目上单击鼠标右键,在“数据列表”和“设备信息窗口”上打开弹出式菜单。在弹出式菜单上提供了一些快捷操作,见下文介绍。

1.6.1 数据列表之右键菜单

右键_数据列表

1.6.2 设备信息窗口之右键菜单

右键_设备信息

1.7 软件设置

1.3 节 介绍的关于界面布局的设置外,软件还提供了以下自定义配置,如下图所示,可以在菜单栏点击【文件】->【设置】,弹出软件设置对话框,进行查看。

软件设置

• 基础设置:支持设置字体大小、启动时最大化、跟随系统缩放、数据清空时是否弹出提示信息以及数据清空时保留设备信息
• 存储设置:支持设置缓存文件位置、缓冲区大小(100 ~ 1024 MB)及当超出缓存大小程序如何运行
• 列表配色:支持用户自定义数据列表中字体配色和背景配色
• 热键设置:支持用户修改热键

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

软件设置

二、软件特色功能简介

USB 2.0 Monitor (v1.3) 在实现基本的数据显示/查找功能之外,提供了一系列特色功能,帮助用户更高效地获得数据中的有效信息。

2.1 设备信息列表

设备信息列表位于过滤导航窗口。软件在解析出采集数据中的描述符信息后,使用树形结构分层显示设备信息,并在此结构之上提供便捷的数据过滤操作。

USB设备列表

2.2 只显示新插入设备

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

只显示新插入设备

2.3 查找与标记

在事务信息栏输入事务信息(地址、端点、事务结构、数据长度、数据内容)。

查找统计栏中显示满足条件的事务数量,点击查找全部标记记录查找范围中的前100个结果的位置。

查找与标记

2.4 时间间隔计算

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

• 方式一:利用时间戳原点

• 方式二:利用事务标记功能。如下图所示,使用 ctrl + 鼠标左键 快速添加标记。

2.5 PID DATA 0/1 翻转检测

USB 协议使用数据翻转同步机制(Data toggle synchronization)实现数据传输的同步。 在 4.3 节中介绍了数据传输中 DATA 翻转的常见情况。

USB 2.0 Monitor 软件可以对设备翻转错误情况的检测和标记。(检测范围不包括同步端点和 SPLIT 事务下的数据)

只需在工具栏点击翻转检测按钮,如果存在翻转错误的事务,标记窗口将会记录错误事务位置。

翻转检测

2.6 HID 报表解析

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

HID报表描述符解码

2.7 通过软件复位设备

当硬件按照方式 A连接时,用户可通过软件复位指定设备,无需手动插拔设备。

如下图所示,设备先连接分析仪后开始采集,采集数据中没有描述符相关信息,所以 Addr 13 处显示 <Device>。 可以通过点击复位按钮使得设备重新枚举。

使用复位按钮复位设备

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

右键复位设备

2.8 支持长久挂机

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

采集缓冲设置

2.9 显示 NRZI 波形图

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

显示NRZI波形

三、USB 总线协议分析仪应用实例分享

以下内容从实际应用角度,介绍 USB 总线协议分析仪的使用场景(范围)和主要功能。

3.1 采集与分析 Linux/Mac/BIOS 等环境下的 USB 数据

按照 硬件连接方式B 连接硬件,先打开软件开始采集,然后连接键盘,打开被检测主机进入BIOS。分析仪将记录BIOS下的鼠标枚举数据。(示例数据 BOOT_MOUSE.usmn)

2_BIOS_MOUSE.png

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 盘数据时存在广播包的情况。

  • 如果有采集设备的枚举过程,通过设备列表可以快速定位 U盘对应的地址。
  • 如果没有枚举过程,可以直接不显示广播包对应的地址。
  • 软件的过滤条件设置后再次采集时默认保留。所以,如果被采集的主机端除被采集设备外没有发送插拔(广播包的地址不变)不需要二次设置针对广播包的地址过滤。
  • 广播包过滤

    3.3.2 采集 HUB 复合设备(Compound Device)数据

    Compound 设备 包含一个内嵌的 USB HUB 和一个或者多个不可移动的 USB 设备。关于 composite 设备与 compound 设备的区别可以查看 4.4.2 节介绍。

    下面以一种带有 3 个 USB 接口的 USB 网卡设备为例,进行抓包分析。

    2.2 节 介绍,连接硬件,先点击开始采集,再接入网卡设备。

    Compound Device

    如上图所示,在设备列表中可以看出 该网卡位于 USB HUB 的端口 1。

    3.3.3 HUB 下设备未工作现象分析(分析仪处于HUB上游口)

    2.2节 介绍,连接硬件,先点击开始采集,再接入 USB HUB 和下游设备。

    测试对象为4端口的高速HUB,使用5个HUB 一拖四,四个下游HUB均接入串口设备。拓扑结构如下图

    HUB下多级设备

    利用USB分析仪分析HUB下设备状态

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

    快速筛选出指定地址的数据

    结合USB 协议,接下来,我们查看地址为 42 的 HUB 设备发生了什么。

    右键USB 设备列表中的 Addr 42,只显示此设备。

    2_5_1

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

    2_5_2

    查找指定地址端点的数据并标记

    结合USB HUB类设备相关协议,观察传输列表数据,HUB 设备的中断IN端点会上报 Port 状态。

    使用查找标记功能定位。发现中断IN端点第一次返回 0x16(如果检测到四个Port均有设备插入将上报数据0x1E ),说明该 HUB 并未检测到 Port 3 有设备插入。

    2_5_3

    3.4 设备枚举异常原因分析

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

  • 传输列表中,枚举阶段无 Set Configuration请求,判定设备枚举失败。
  • No.20 设置地址成功。
  • 点击传输列表,在右侧解码视图中检查描述符时候成功获取。
  • 右侧解码视图中高亮标识出端点描述符的长度字段错误。
  • 端点描述符长度错误导致枚举失败

    四、USB 2.0 协议知识分享

    4.1 USB 2.0 协议数据格式简介

    • 一个传输(Transfer)由多个事务(Transaction)组成;
    • 一个事务由多个包(Packet)组成;
    • 包是 USB 总线中数据通信的基本单元,是数据传输的最小单位。

    下图以最常见的 控制传输,请求设备描述符 为例,说明协议结构关系

    制传输结构关系

    4.1.1 域(Field)

    一个包由有不同的域组成。

    SYNC:所有包都以 SYNC 开头, 此字段将接收器与发射器的时钟同步。对于低速和全速模式, 此字段长度为 8 字节,对于高速模式,此字段长度为 32 字节。
    PID:包 ID。它指示正在发送的数据包类型。 此字段的长度为 8 位。前四位标识数据包的类型,后四位是前四位的逐位取反,有助于检测错误。
    PID_TYPE
    ADDR:此字段包含 USB 设备的指定地址。 它占 7 bits,这意味着它可以支持 127 个设备。
    ENDP:此字段指定终结点编号。 它占 4 bits,这意味着它可以指示 16 个可能的端点。
    Frame Number:帧号域,占 11 bits, 在每个(微)帧开始时使用 SOF 令牌包发送,帧号字段由主机递增发送,在达到其最大值 7FFH 时重新从 0 开始。
    DATA:数据域,以字节为单位,范围从 0 到 1024 字节, 包含书记和 USB 设备间需要传输的数据。
    CRC:CRC 代表 循环冗余校验。 此字段用于检查包中的数据是否存在错误。 对于令牌数据包,使用 5 位 CRC,对于数据包,使用 16 位 CRC。
    EOP:EOP 代表 数据包的结束。

    4.1.2 包(Packet)

    包类型一般可分以下四种:

    数据包类型与格式

    1. Token packets:由主机发送。包结构包含一个 PID 字节、11 位地址和一个 5 位 CRC。

    • IN,标识主机要读取 USB 设备的数据
    • OUT,标识主机要向 USB 设备写入数据
    • SETUP,用于控制传输的开始
    在 USB2.0 中,又添加了两个数据包:
    • PING,在发送 OUT + DATA 包之前,询问 USB 设备是否准备好接收输出/数据包对。
    • SPLIT,在高速 HUB 上挂载的低速/全速设备时,HUB 与主机的高速通信中使用

    2. Data packets:数据包结构包含 PID 字节、数据字段和 16 位 CRC。数据字段可以携带 0 ~ 1023 字节的数据。

    • 对于低速设备,数据字段最大为 8 字节
    • 对于全速设备,数据字段最大为 1023 字节。
    • 对于高速设备,数据字段最大为 1024 字节

    3. Handshake packets:仅由一个 PID 字节组成。有三种类型的握手数据包:

    • ACK,确认收到的数据包
    • NAK,指示当前无法接收或发送数据包,也用于指示没有要发送的数据
    • SATLL,指示设备处于错误状态或不支持主机的请求
    在 USB2.0 中,又添加了两个 PID:
    • NYET 指示 Split 事务未完成
    • ERR 指示 Split 事务失败

    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 ,主机正在向addr所在的设备的ep端点请求数据。
    • OUT ,主机正在向addr所在的设备的ep端点发送数据
    • 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分析仪,观察具体的传输数据,可以更好地理解控制传输过程。

    双击软件的传输列表中的传输层,展开对应的事务层显示。下面分别展示了 获取描述符请求和设置地址请求在软件的传输列表中的显示。

    3_传输_事务_包.png

    控制读(以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有四种。除DATA0DATA1外,DATA2用于高速高带宽同步事务 ,MDATA 可能出现在 SPLIT 分离包或高速同步事务中。不同的传输类型中数据包的翻转规律不同。

    控制传输中,Setup 事务的 PID 固定为 DATA0。数据阶段中的数据包从 DATA1 开始,DATA1 与 DATA0 交替翻转。状态阶段中的数据包通常是一个空包,其PID为DATA1。
    中断传输批量传输中 DATA0 与 DATA1 交替。PID 翻转从 DATA0 开始,如果端点错误或 STALL,PID 回到 DATA0。
    同步传输数据包PID序列,需要区分全速和高速模式。
    - 全速模式下的同步传输数据只使用 DATA0 包
    - 高速传输中会根据微帧中事务的个数不同使用不同的序列。
    详细信息可以查看 USB 2.0 规范的 5.9.2 节。

    我们可以借助分析仪观察具体数据翻转情况,在数据列表视图可以清晰的看到事务中数据包的 PID。下方截图为隐藏 NAK 状态的事务以及 SOF 包之后,控制传输中获取配置描述符的过程。

    4.4 USB HUB相关知识

    4.4.1 USB 广播包产生原因及如何过滤广播包

    USB HUB 提供 USB 设备与主机之间的电器接口,上游口面向主机,下游口面向设备。

    下图摘自 USB2.0 规范 11.1.2 节,显示了 HUB 中上行和下行数据包的信号连接行为。

    这张图从右往左:

  • 空闲(Idle)状态时 HUB 不创建任何来连接,所有的 port 都处在接收模式。
  • 当 HUB 下游端口启用,且检测到该端口上开始传输数据时,只会建立该端口与上行端口的连接,其它下行端口不会建立连接。
  • 当 HUB 中传输下行数据(downstream)时,HUB 以广播(broadcast)模式运行。 当集线器在其上游端口上检测到数据包开始时,它会与所有已启用的下游端口(且传输速度相同的端口)创建连接。未启用的端口不会接收到下行信号。
  • 如果当被采集设备和其它 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)设备数据