本页包含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抓包。
资料下载: (压缩包中已包含 wireshark )
因为大部分人无法直接访问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 即可(备注这里一定要根据自己USB从设备的速度进行设置,如果速度设置不匹配,会对抓包产生影响(出现error帧)或者抓不到数据包的情况,每一次抓不同的USB设备前都需要设定正确的速度 ) 关于速度部分的详细内容,可以参考本文的第七部分
- 一些常见的设备速度仅供参考:
- High-Speed(480 Mbps):U盘、USB摄像头、声卡、采集卡等大带宽设备,另外一些芯片的下载器如FT2232这种也属于High-Speed(FT芯片衍生出的串口也属于High-Speed)
- Full-Speed(12 Mbps) : 新式鼠标、新式键盘、普通的串口转USB(如CH340方案)等,部分芯片的下载器如 Jlink (老版本) 也属于Full -Speed ,有些很早很早的老式低速U盘也是FS的。
- Low-Speed(1.5 Mbps):老式鼠标、老式键盘、遥控器等低速HID设备
- 特例:当通讯的过程中增加了 USB HUB(PC–>USB SNIFFER –> USB HUB ( 在中间) –>USB从设备 )那实际通讯速度要以USB HUB的速度为准。
- 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)

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

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


经过这样的过滤后,界面中只保留了控制传输阶段(如描述符请求)相关的帧。需要注意的是,这种过滤方式会屏蔽掉除了描述符请求以外的其他USB通信内容,因此可能错过大量有用的信息。这里只作为演示用,大家根据实际情况增加或者屏蔽过滤器关键词。
当然你也可以屏蔽某些关键词,比方说采集到的数据包含有大量SOF包影响我们的观察,我们只需要屏蔽SOF关键词即可 ,右键SOF 选择作为过滤器应用->非选中,即可对SOF数据包进行屏蔽

当然关键词也是可以随意组合的,选准备作为过滤器,将多个协议或者地址之类的关键字通过“且”,”或”进行组合,最后按下Apply display Filter按键即可。

六、刷固件(非必要,不建议新手操作),
如果您有重新刷固件的需求,github的原作者有详细的过程介绍,这里不再展开,感兴趣的可以自行翻看https://github.com/ataradov/usb-sniffer,因为刷机失败会导致原有硬件不能正常工作,所以建议有一定操作能力的人再研究操作。
七、关于速度模式
速度这里一定要根据自己USB从设备的速度进行设置,如果速度设置不匹配,会对抓包产生影响(出现error帧)或者抓不到数据包的情况,每一次抓不同的USB设备前都需要设定正确的速度
- 一些常见的设备速度仅供参考:
- High-Speed(480 Mbps):U盘、USB摄像头、声卡、采集卡等大带宽设备,另外一些芯片的高速下载器如FT232/FT2232方案的属于High-Speed(FT芯片衍生出的串口也属于High-Speed)
- Full-Speed(12 Mbps) : 用于新式鼠标、新式键盘、普通的串口转USB(如CH340方案)等,部分芯片的下载器如 Jlink (老版本) 也属于Full -Speed,有些很早很早的老式低速U盘也是FS的。
- Low-Speed(1.5 Mbps):老式鼠标、老式键盘、遥控器等低速HID设备
- 特例:当通讯的过程中增加了 USB HUB(PC–>USB SNIFFER –> USB HUB ( 在中间) –>USB从设备 )那实际通讯速度要以USB HUB的速度为准。
如果您不确定自己的设备属于哪一种速度,可以分别用High Full Low三种速度进行抓包。速度设置错误的情况大致可以从下面几个方面判断:当出现这三种情况的时候,可以尝试切换采集的速度。
- 抓到的包出现了非常多PHY ERROR信息 (很可能是High 或者Full 设备弄混了)
- 抓到的包反复出现Undefined(DP=2 / DM=3) 之类的错误 (如果是硬件在采集过程中重新插USB从设备也可能会触发一次Undefined(DP=2 / DM=3) 这个是正常的)
- 抓到的包永远都是 J/ K SE0 之类的 ,没有任何DATA等数据包 (这种通常是错误的把Low设备 设置成了 HIGH 或者FULL了)
如果您的速度设置正确,应该能看到类似下图这样 有DATA 有ACK,有IN ,有OUT,有设备描述符请求等数据包。(下图速度是老式USB 键盘 速度模式Low)

八、关于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
备注,原CSDN 中的控件,时间戳会有问题,本站对上述CSDN版本USB PACKET VIEW中增加的插件部分做了重新调整(解决时间戳不准确的问题), 修改后的USB PACKET VIEW下载地址如下:https://pan.baidu.com/s/1EkPUvSkF-HCUQ7-F0Wrocg 提取码: wns9
- 操作过程如下:
- 1. WIRESHARK 抓包
- 2.保存或另存为刚才抓到的数据(选择PCAPNG格式)
- 3.用上文介绍的带特殊解析脚本的USB PACKET VIEW 导入(文件->打开)刚才保存的PCAPNG即可(导入界面格式选择 opensouce sniffer pcapng file (*.pcapng) )。

另外,网上有些帖提供USB PACKET VIEW的直接抓包控件,实际我这边也发给一些客户测试了,可以抓,但是效果似乎没有WIRESHARK抓包后 导入到USB PACKET VIEW的效果好,本文不作介绍了。(硬件是一样的,大家可以自己尝试)
另外经过测试,有部分帧在usb packet view 中是会显示ERROR的,包括空帧折叠, J,K等的电平事件, 以及HUB帧也会存报错的情况,这些报错信息无视就好。

如果不希望看到 ERROR帧, 可以直接点这个图标隐藏

十、本站整理的一些大家使用过程中遇到问题:
问题零:写在所有的问题前面,如果你发现你的电脑通过数据线无法连接USB SNIFFER, 请先检查你USB线是否是数据线,还是说仅仅是只能充电的充电线(市面上有些TYPE C线仅能充电,并不能作通讯用)
- 问题一:
- 问题描述:将鼠标直接连接到 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 数据线,以提高通信稳定性。
- 问题四:
- 问题描述:和手机通讯的部分场景(如carplay等)使用USB Sniffer后会直接导致通讯失败。
- 问题原因:经由用户测试反馈得到问题可能和数据线的苹果认证有关,普通的TYPE C数据线(包括赠送的)很多都不带IOS 认证,会导致通讯失败。
- 解决方法:尝试将和手机连接的这一段数据线更换成手机适配的原厂数据线。
- 问题五:偶然发现个别帧数据解析错误的情况
- 问题描述:偶然发现一例wireshark 出现数据解析错误的情况,但是经过对比发现数据采集上传是完整正确的,只是wireshark协议解析显示上出现了问题,如下图这样, 错误的把date 数据当作 token去解析了(提示Illegal了,并且 目标地址变成了错误的0.3.1)
- 解决方法:如果遇到这样解析出来比较诡异的帧,可以去usb packet view中同时间戳下查看下对比着分析(这里错误的帧在upv下识别出来就是DATA0)。
- 这个问题出现的比较少,但是有人遇到了,就拿出来说一下。

这个问题我也详细跟进了下,其实同样的帧(内容都是C3 00 00)在上下文两个地方解析出了两种情况,图一是解析错误的情况(当作token了),图二是解析正确的情况。(备注这里图一时间戳89.603491850的NAK并不是帧有问题造成的NAK,而是因为设备正忙没来得及响应,所以紧接着时间戳89.60371533秒时设备又尝试重新发送相同的数据包,这时候设备响应了ACK),前后的内容是相同的,只是wireshark解析上出了点问题。
也许这个问题在后续的wireshark版本中会解决,在此之前如果你在调试时候也遇到类似的问题不妨像我这样进行分析。


- 问题六:
- 问题描述:在仅仅连接A端 USB-CAP端口, 而另一端 B (TO HOST)端口未连接的情况下,即使C口连接负载USB设备,系统仍然会报一系列 USB PHY error
- 问题原因:USB 通讯链路因未正确连接而悬空,导致读取到的数据都是错误的。
- 解决方法:按照要求将B端的TYPE C口连接至采集端的USB 口即可。

十一、推荐的USB 协议文章
这里推荐一篇USB协议的文章,写的挺好的,大家第一次接触USB协议的可以看看这篇大神写的博文,转自CSDN: USB通信协议深入理解
上传的修改版本USB PACKET VIEW 还是不行,打开保存的wireshark文件 .pcapng ,没有反应,点击打开,是空白的,什么也不显示
你检查下 ,你wireshark 抓包的是否是USBCAP抓的, 换成 USB SNIFFER 抓包, 如果解决不了 阿里旺旺上私信我