USB 协议分析仪(USB Sniffer)

本页包含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即可(记得下次使用的时候改回来)

八、推荐的USB 协议文章

这里推荐一篇USB协议的文章,写的挺好的,大家第一次接触USB协议的可以看看这篇大神写的博文,转自CSDN: USB通信协议深入理解

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注