本页包含USB 协议分析仪的介绍,注意事项,使用流程等一些资料
模块主图:

一、功能介绍:
本USB 协议分析仪适用于 USB 通信协议分析、数据抓取,方便开发者调试和研究 USB 设备通信。(支持USB2 .0及以下版本协议)
本 USB 分析仪基于开源设计 USB Sniffer 进行二次硬件调整,原开源设计链接:https://github.com/ataradov/usb-sniffer (也感谢原作者提供的开源设计 USB Sniffer,为像我们这样的USB开发者们带来了那么好的工具,也为USB协议的调试带来了极大的便利和启发。)
- 在原有设计的基础上,对设计进行了以下优化:
- 全新 PCB 设计:重新绘制主板,将原先的二层板升级为四层板,提高信号稳定性和抗干扰能力。
- 保留外部触发接口:兼容原设计的外部触发引脚,方便扩展应用。
- 更小的尺寸(5.5 x 3.5 cm):在保证性能不变的前提下,调整了器件封装,优化布局,尽可能缩小主板尺寸,使其更便携。
- 所有器件均采购于立创云汉之类的电子商城,芯片保证全新正品(无任何拆机翻新件)
主板接口:一路USB A口接通讯device, 一路TYPE C口接通讯主机host , 一路TYPE C口负责USB抓包。
资料下载:
因为大部分人无法直接访问github网站,这里也将github的工程文件(包含原作者的硬件原理图,PCB,可执行的固件等)下载下来上传到网盘了,方便大家下载研究(包含Wireshark软件):https://pan.baidu.com/s/1VyImNMzXhXVNgC44E0y4tw 提取码: ipbi
二、Wireshark软件安装:
1)下载Wireshark软件
直接在wireshark软件官网下载 https://www.wireshark.org/download.html 直接下载最新版本的即可。(这里对windows的系统要求是x64的)

2) 安装 Wireshark软件
双击打开刚才下载的Wireshark软件, 一路默认点Next和Noted进行安装(安装路径请保留默认路径),备注:如果需要保留软件抓取USB的功能,这里可以按下图勾选USBPcap(因为我们已经有硬件USB抓包功能了,所以USBPCAP可选也可以不选,但是这里仍然推荐安装,因为软件USBPcap抓到的数据比较上层(抓到的数据更少一些),硬件USB SNIFFER抓到的数据包包含更多底层SOF之类通讯握手的信息)

之后点击Install 进行软件的安装。安装完成后会弹出完成界面,点finish 结束即可。
三、对Wireshark软件进行设置
复制usb_sniffer_win.exe文件(usb_sniffer_win.exe文件存在于压缩包usb-sniffer-main.zip中的路径/bin 下)到Wireshark安装目录的excap文件夹下( C:\Program Files\Wireshark\extcap 目录下),如果该路径不存在,需要自行创建一下。

备注:如果之前装了360之类的杀毒或者安全软件,会提示文件存在风险,这里一定要添加白名单,否则文件会被强制删除(如果被强制删除了,可以在杀毒软件的隔离区中将文件找回,找回的时候一定要添加白名单)

这里看清楚文件,选中刚才被安全软件删除的usb_sniffer_win.exe(可别选错把其他的病毒给放出来了,可以对下时间,路径,和文件名)

恢复原先所在目录,并添加白名单

四、USB Sniffer 进行设置 (捕获速度、空帧折叠等参数)
打开Wireshark软件, 点击选中USB Sniffer, 并点击USB Sniffer 左侧的设置符号

在弹出的窗口中您可以配置捕获速度、空帧折叠、触发类型以及限制捕获的数据包数量(0 表示无限制)
- Capture Speed: 速度根据实际的硬件进行选择,如果是高速设备就选择High -Speed 即可(备注大部分芯片这里选用High-Speed即可,但是也有少部分芯片不适用于High-Speed,比方说我们经常用的CH340,CH340这里选Full-Speed更合适,详情看本文最后)
- Fold empty frames(空帧折叠) : 用于隐藏或简化那些无关键数据的帧(如空闲时候的SOF NAK ACK等握手帧,可以让用户更快的定位关键帧,大家可以根据实际使用场景进行开关,推荐勾选上)
- Capture Trigger: 手动设置触发类型(与硬件上的IN 引脚相关联),如果不用硬件触发就保留默认Disabled
- Capture Limit: 抓取的数据包数量 设置0(表示无限制)

五、对USB数据进行抓包
连接示意图如下,其中C<–>B 之间相当于原先的数据流。 C和B之间通讯的抓包数据将通过A上传给装有Wireshark软件的PC电脑。

1) 按上图先连接好A (USB CAP)和 B(To HOST)两个type C端口,暂时不接C(TO TARGET)接口,这样才能抓到DEVICE 和PC通讯的枚举过程。
2)双击刚才的USB Sniffer,进入USB抓包捕获界面

正常进入后,系统会自动进入抓包状态,如果系统不在抓包状态,那么手动点击开始按钮开始抓包,待抓包进行中时再将设备(该处以U 盘为例子)插上主板的Device 接口(TYPE A口,对应之前的图编号C)

如果正常的话,系统将抓下完整的通讯过程,如果系统一直在刷新最新的数据,可以按下开始边上的停止捕获按键。
从下图我们可以看到抓到的一些数据包(这些包中包含SE0,J,K等状态)

我们也可以通过屏蔽关键字来让软件只显示我们感兴趣的信息,如我们右键Protocol中的USB,然后选择作为过滤器应用->选中


经过这样过滤后,观察界面就只剩下协议是USB的部分(包含获取设备描述符之类的),更方便我们对数据进行分析。
当然关键词也是可以随意组合的,选准备作为过滤器,将多个协议或者地址之类的关键字通过”且”,”或”进行组合,最后按下Apply display Filter按键即可。

六、刷固件(非必要,不建议新手操作),
如果您有重新刷固件的需求,github的原作者有详细的过程介绍,这里不再展开,感兴趣的可以自行翻看https://github.com/ataradov/usb-sniffer,因为刷机失败会导致原有硬件不能正常工作,所以建议有一定操作能力的人再研究操作。
七、关于速度模式
经过项目上的实测下来,发现部分USB通讯不适用High-Speed模式,比方说CH340,实测CH340用High模式,会出现PHY ERROR,或者出现Undefined(DP=2 / DM=3) 之类的错误,造成抓不到我们要的数据的情形,遇到这种情况可以调整工作类型,把High-Speed改回Full-Speed即可(记得下次使用的时候改回来)

八、关于WIN7操作系统的一些问题
因为GITHUB上原作者只上传了W10 64位的驱动, 但是如果你使用的操作系统是WIN7的操作系统,可以通过Zadig 软件来打驱动。
我实际测试下来 USB SNIFFER 在WIN7下通过Zadig 来添加驱动没问题,但是遇到的一个新问题是Wireshark 最新版本并不支持WIN7系统,按照提示安装了最后支持WIN7的4.0版本,但是运行起来仍遇到dll方面的兼容问题,导致Wireshark无法启动。 也许比4.0更早的版本可以,这个只能大家自己去尝试了。
但是还是推荐大家使用WIN10 64位及以上的操作环境去运行USB SNIFFER。
九、 数据能否导入USB PACKET VIEW
答案是可以的, 不过因软件间存在差异,所以类似 WIRESHARK中的折叠空帧等特殊的帧 在USB PACKET VIEW中是显示ERROR的,但是大部分帧都可以正常显示。
方法参考:https://blog.csdn.net/weixin_43764787/article/details/143241323 (文中带解析脚本的USB PACKET VIEW包,这边也提供下载:链接:https://pan.baidu.com/s/1k_5Je_AqvnxPZ7PwNCoN0g 提取码:KB4U
- 操作过程如下:
- 1. WIRESHARK 抓包
- 2.保存或另存为刚才抓到的数据(选择PCAPNG格式)
- 3.用上文介绍的带特殊解析脚本的USB PACKET VIEW 导入(文件->打开)刚才保存的PCAPNG即可(导入界面格式选择 opensouce sniffer pcapng file (*.pcapng) )。

另外,网上有些帖提供USB PACKET VIEW的直接抓包控件,实际我这边也发给一些客户测试了,可以抓,但是效果似乎没有WIRESHARK抓包后 导入到USB PACKET VIEW的效果好,本文不作介绍了。(硬件是一样的,大家可以自己尝试)
十、大家使用过程中遇到的一些问题汇总:
- 问题一:
- 问题描述:将鼠标直接连接到 USB Sniffer 时,Wireshark 可以正常解析其通信数据;但当鼠标通过一个 USB HUB 再连接到 Sniffer 时(PC–>USB SNIFFER –> USB HUB ( 在中间) –>鼠标 ),Wireshark 报出大量 “USB PHY error” 等错误。
- 问题原因:造成这个问题的原因是我们设置的Capture Speed 与实际通讯链路的数率不匹配造成的(HUB 与 PC 之间为 High Speed 连接,而鼠标如果直接与PC直接连接是工作在Full Speed下。两种情况其实是不相同的)
- 解决方法:所以这里我们根据实际链路速率正确设置抓包速率再进行抓包即可
- 问题二:
- 问题描述: 之前Wireshark一直有USB Sniffer选项并且可以正常时使用,现在突然没有了
- 问题原因: 这是因为之前复制到Wireshark安装目录的excap文件夹下usb_sniffer_win.exe文件被杀毒软件或者安全软件误删了
- 解决方法: 按照本文正文中的介绍重新复制该文件(也可到杀毒软件的隔离区中找到并恢复该文件),记得要添加白名单(否则仍然可能被再次删除)
- 问题三:
- 问题描述: 原本电脑直接连接设备时通信正常,但在中间加上 USB Sniffer 后通信失败。
- 问题原因:
- 加上 USB Sniffer 后,通信线路变成两段:
- 第一段:电脑 ↔ USB Sniffer
- 第二段:USB Sniffer ↔ 设备
- 如果其中任意一段较长,比如达到 1.5 米或以上,总线长(两段相加)可能超过 USB 规范限制,导致信号衰减、反射或时序问题,造成通信失败。
- 解决方法: 使用更短的 USB 数据线,以提高通信稳定性。
十一、推荐的USB 协议文章
这里推荐一篇USB协议的文章,写的挺好的,大家第一次接触USB协议的可以看看这篇大神写的博文,转自CSDN: USB通信协议深入理解