从Bus Hound开始学USB之U盘

时间:2024-04-04 16:07:34

准备工作

一台安装了Bus Hound软件的电脑,一个U盘。
首先介绍一下Bus Hound这款软件工具,Bus Hound是由美国perisoft公司研制的一种专用于PC机各种总线数据包监视和控制的开发工具软件,是一个超级软件总线协议分析器,可用于捕捉来自设备的协议包和输入输出操作,本博客使用的版本是Bus Hound 6.01,软件启动界面如下图所示
从Bus Hound开始学USB之U盘
接下来轮到U盘登场,将U盘插入电脑,点击Bus Hound的Devices窗口,可以看到在U盘已出现在设备列表当中
从Bus Hound开始学USB之U盘
从Bus Hound开始学USB之U盘
下面将[30]USB Mass Storage Device前面的方框都选上,然后拔出U盘,再依次点击Capture窗口右下角的Stop按钮和Run按钮,这时将U盘插入电脑,将在Capture窗口中显示U盘上盘后的通信过程,如下图所示
从Bus Hound开始学USB之U盘

我们的USB之旅,将从这张图开始

从Bus Hound开始学USB之U盘
如上图所示,红色方框为设备列,在该列显示的数据,小数点前面的数字代表设备ID,小数点后面的数字代表端点号(endpoint),关于端点号后面再介绍;蓝色方框为阶段列,这里显示的是当前抓取的数据所代表的阶段类型,CTL表示USB的控制传输(control transport),IN代表数据输入;黄色方框表示数据列,与每个阶段对应的数据显示在此列中;紫色方框为描述列,对应每个阶段的文本说明,可为我们的判断带来便利。
接下来我们将通过讲解这一行行的数据来了解USB
从Bus Hound开始学USB之U盘
这是一条标准的USB请求(USB Device Requests),总共有8byte数据,USB协议中将其拆分成5个部分介绍

编号 名称 大小(byte) 含义
1 bmRequestType 1 [D7]表示数据传输方向
1:设备到主机
0:主机到设备
[D6:D5]表示请求类型
0:标准请求
1:类请求
2:厂商自定义
3:保留
[D4:D0]表示请求的接收者
0:设备
1:接口
2:端点
3:其它
4…31:保留
2 bRequest 1 请求的代码
3 wValue 2 请求的参数,不同请求含义不同,小端对齐,低字节在前,高字节在后
4 wIndex 2 不同请求配置不同,通常用于索引值或偏移值
5 wLength 2 下一阶段传输的数据量,小端对齐
示例1: 80 06 00 01 00 00 12 00
80:表示数据由设备传输到主机,这是一个标准请求,接收者是一个设备
06:表示获取描述符的请求
00 01:高字节是01,表示获取设备描述符。低字节是00,表示从偏移地址0开始读取设备描述符。
00 00:在获取描述符的请求中,此处要么是0,要么是langaue ID。
12 00:描述符长度,这里表示18byte。
示例2: 80 06 00 02 00 00 09 00
80:表示数据由设备传输到主机,这是一个标准请求,接收者是一个设备
06:表示获取描述符的请求
00 02:高字节是02,表示获取配置描述符。低字节是00,表示从偏移地址0开始读取设备描述符。
00 00:在获取描述符的请求中,此处要么是0,要么是langaue ID。
09 00:描述符长度,这里表示9byte。
示例3: 80 06 00 03 00 00 02 00
80:表示数据由设备传输到主机,这是一个标准请求,接收者是一个设备
06:表示获取描述符的请求
00 03:高字节是03,表示获取字符串描述符。低字节是00,表示从偏移地址0开始读取设备描述符。
00 00:在获取描述符的请求中,此处要么是0,要么是langaue ID。
02 00:描述符长度,这里表示2byte。