BUS HOUND 使用指南 1.请下载安装bus hound 5.0全功能版,在论坛上面有,自己去找 2.安装完毕后请一定要重启,否则软件不能工作 3.进行USB监控的主要步骤如下: (1)启动软件,将USB设备插入USB口 (2)在DEVICE内选择设备,例如我的设备是一个USB电话,则设备为USB COMPOSITE DEVICE,选中该设备,可以在下面的PROPERTIES看到设备的总线类型,设备的电源以及各个端点的功能,在该设备下面还有两个分支:USB AUDIO DEVICE 和 "USB人体学输入设备"(这就是本设备占用的两个接口),一样在PROPERTIES里面可以看到他们的类代码为0x01和0x03. (3)在看完基本信息后,将上述的某个接口,或者全部打勾. (4)切换到"SETTING"选项卡,将MAX PHASE设置为512,这样你就可以看到xx的DESCRIPTOR和其他的数据了. (5)在"PHASE TO CAPTURE"里面的几个和USB相关的选项如下: CDB:命令描述符块; CTL:USB控制传输; DI/D数据输入/输出; LEN:数据长度; INSOC:同步传输; RSET:总线复位; URB:USB请求块; USTS:USB状态 查看USB数据传输就把它们都打勾就行了; (6)在"Coloumn to display"里面,把里面的全部打勾,(为什么我就不说了).注意,这样要把窗体{zd0}化才可以看见全部数据. (7)在"CAPTURE"选项卡里面可以看捕捉的数据了,在文本框输入文字,再点旁边的箭头,可以查询.按STOP,再按START可以清屏. (8)举个例子,接上设备,在文本框输入GET DESCRIPTOR(大小写无所谓),点箭头,可以找到你的DESCRIPTOR,但是值得注意的是这个DESCRIPTOR主要是CONFIG,如果 是设备描述符会有专门的说明GET DEVICE DESCRIPTOR;这个软件好像不会捕捉STRING DESCRIPTOR. 设备返回的信息在DI里面 4.希望大家有好资料也告诉我一声,谢谢! 5.{zh1}祝大家都顺利开发出USB设备. BUS HOUND数据分析 下面这段数据是MINI mouse枚举成功数据,希望对于初学者有帮助. USB鼠标枚举成功数据(Human Interface Device): Bus Hound 5.00 capture. Complements of Device - Device ID (followed by the endpoint for USB devices) Device Phase Data Description Cmd.Phase.Ofs(rep) (A3:其它类型请求=设备到主机 (23:其它类型请求=主机到设备 (80:设备标准请求=设备到主机 (A3:其它类型请求=设备到主机 (06:指定命令=GET DESCRIPTOR (01 00:设备描述符,索引0 (00 00:0 或语言ID (00 12:描述符长度18 12.0 LEN 12 00 00 00 18 12.0 DI 12 01 10 01 00 00 00 10 71 04 66 06 01 00 01 02 ........q.f..... 03 01 .. 12.0 CTL 80 06 00 02 00 00 09 00 GET DESCRIPTOR (80:设备标准请求=设备到主机 (06:指定命令=GET DESCRIPTOR (02 00:配置描述符,索引0 (00 00:0 或语言ID (00 09:描述符长度9 12.0 LEN 09 00 00 00 9 12.0 DI 09 02 29 00 01 01 00 a0 fa ..)...... 12.0 CTL 80 06 00 02 00 00 29 00 GET DESCRIPTOR (80:设备标准请求=设备到主机 (06:指定命令=GET DESCRIPTOR (02 00:配置描述符,索引0 (00 00:0 或语言ID (00 29:描述符长度41 12.0 LEN 29 00 00 00 41 12.0 DI 09 02 29 00 01 01 00 a0 fa 09 04 00 00 02 03 01 ..)....... 02 00 09 21 10 01 21 01 22 34 00 07 05 82 03 40 ...!..!."4.....@ 00 0a 07 05 02 03 40 00 0a ......@.. 12.0 CTL 00 09 01 00 00 00 00 00 SET CONFIG (00:设备标准请求=主机到设备 (09:指定命令=SET CONFIGURATION (00 01:配置值=1 (00 00:0 (00 00:0 12.0 CTL 21 0a 00 00 00 00 00 00 SET IDLE (21:接口类型请求=主机到设备 (0A:指定命令=GET INTERFACE (00 00:0 (00 00:接口0 (00 00:长度0 12.0 CTL 81 06 00 22 00 00 74 00 GET DESCRIPTOR (81:接口标准请求=设备到主机 (06:指定命令=GET DESCRIPTOR (22 00:描述符类型22,索引0 (00 00:0 或语言ID (00 74:描述符长度116 12.0 LEN 74 00 00 00 116 12.0 DI 05 01 09 02 a1 01 09 01 a1 00 05 09 19 01 29 03 ..............). 15 00 25 01 95 03 75 01 81 02 95 01 75 05 81 03 ..%...u.....u... 05 01 09 30 09 31 09 38 15 81 25 7f 75 08 95 03 ...0.1.8..%.u... 81 06 c0 c0 04 03 09 04 16 03 32 00 30 00 30 00 ..........2.0.0. 37 00 2d 00 30 00 33 00 2d 00 33 00 30 00 50 03 7.-.0.3.-.3.0.P. 20 5f 20 4f 50 4e 84 76 55 00 53 00 42 00 20 9f _ OPN.vU.S.B. 07 68 7a 00 68 00 61 00 6e 00 67 00 63 00 68 00 .hz.h.a.n.g.c.h. 75 00 61 00 u.a. 12.2 LEN 04 00 00 00 4 12.2 DI 00 00 00 00 .... USB枚举过程: (1)集线器检测新设备 主机集线器监视着每个端口的信号电压,当有新设备接入时便可觉察。(集线器端口的两根信号线的每一根都有15kΩ的下拉电 阻,而每一个设备在D+都有一个1.5kΩ的上拉电阻。当用USB线将PC和设备接通后,设备的上拉电阻使信号线的电位升高,因此被主机集线器检测到。) (2)主机知道了新设备连接后 每个集线器用中断传输来报告在集线器上的事件。当主机知道了这个事件,它给集线器发送一个Get_Status请求来了解更多的消息。返回的消息告诉主机一个设备是什么时候连接的。 (3)集线器重新设置这个新设备 当主机知道有一个新的设备时,主机给集线器发送一个Set_Feature请求,请求集线器来重新设置端口。集线器使得设备的USB数据线处于重启(RESET)状态至少10ms。 (4)集线器在设备和主机之间建立一个信号通路 主 机发送一个Get_Status请求来验证设备是否激起重启状态。返回的数据有一位表示设备仍然处于重启状态。当集线器释放了重启状态,设备就处于默认状 态了,即设备已经准备好通过Endpoint 0 的默认流程响应控制传输。即设备现在使用默认地址0x0与主机通信。 (5)集线器检测设备速度 集线器通过测定那根信号线(D+或D-)在空闲时有更高的电压来检测设备是低速设备还是全速设备。(全速和高速设备D+有上拉电阻,低速设备D-有上拉电阻)。 以下,需要USB的firmware进行干预 (6)获取{zd0}数据包长度 PC 向address 0发送USB协议规定的Get_Device_Descriptor命令,以取得却缺省控制管道所支持的{zd0}数据包长度,并在有限的时间内等待USB设备 的响应,该长度包含在设备描述符的bMaxPacketSize0字段中,其地址偏移量为7,所以这时主机只需读取该描述符的前8个字节。注意,主机一次 只能列举一个USB设备,所以同一时刻只能有一个USB设备使用缺省地址0。 以下操作雷同,不同操作系统设定时延是不一样的,比如说win2k大概是几毫秒,如果没有反应就再发送一次命令,重复三次。 (7)主机分配一个新的地址给设备 主机通过发送一个Set_Address请求来分配一个{wy}的地址给设备。设备读取这个请求,返回一个确认,并保存新的地址。从此开始所有通信都使用这个新地址。 (8)主机向新地址重新发送Get_Device_Descriptor命令,此次读取其设备描述符的全部字段,以了解该设备的总体信息,如VID,PID。 (9)主机向设备循环发送Get_Device_Configuration命令,要求USB设备回答,以读取全部配置信息。 (10)主机发送Get_Device_String命令,获得字符集描述(unicode),比如产商、产品描述、型号等等。 (11)此时主机将会弹出窗口,展示发现新设备的信息,产商、产品描述、型号等。 (12) 根据Device_Descriptor和Device_Configuration应答,PC判断是否能够提供USB的Driver,一般win2k能 提供几大类的设备,如游戏操作杆、存储、打印机、扫描仪等,操作就在后台运行。但是Win98却不可以,所以在此时将会弹出对话框,索要USB的 Driver。 (13)加载了USB设备驱动以后,主机发送Set_Configuration(x)命令请求为该设备选择一个合适的配置(x代表非0的配置值)。如果配置成功,USB设备进入“配置”状态,并可以和客户软件进行数据传输。 此时,常规的USB完成了其必须进行的配置和连接工作。查看注册表,能够发现相应的项目已经添加完毕,至此设备应当可以开始使用。不过,USB协议还提供了一些用户可选的协议,设备如果不应答,也不会出错,但是会影响到系统的功能。 |