ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:849.22KB ,
资源ID:5813061      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5813061.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实例讲解USB的枚举配置过程.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实例讲解USB的枚举配置过程.docx

1、实例讲解USB的枚举配置过程实例讲解USB的枚举(配置)过程启动您的USB Monitor1、运行安装好后的USB Monitor,点击“File”“New Session”2、在弹出的对话框中点“下一步”3、在“Monitoring Session Type”对话框中选择“USB Monitor”后点下一步4、在“Configurating the USB Monitor”对话框中提示您选择哪一个USB设备需要监视,如果这时您还没有将任何USB设备插入主,将显示如下界面,我们怎么知道应该选择哪一项呢?请看第5步5、将您需要监控的USB设备插入主机USB端口,这时将会在某在项后面多出一些内容,

2、如下图所示,我这里选择“USB Mass Storage”。小技巧:当我们要监控我们自己开发的设备时,可以先用一个优盘插入其中一个USB端口,在此步中选择我们插入的优盘,在实际监测过程中将我们开发的USB设备插入这个USB插口即可。6、在“Configure Data Processing”对话框中选择“Request View”并点下一步7、弹出您的优盘,然后在USB Monitor主界面里点“Edit”-“Clear View”,如下图所示8、插入您的优盘,记得一定要插在同一USB插口哟!此时USB Monitor会检测许多的数据流,我们切换到Complete标签,如下图所示:分析USB设

3、备的枚举过程通过以上的操作后,我们现在可以对USB Monitor监测到的数据进行分析了。1、按“Ctrl + F”,查找第一个“Descriptor Request”,从这里开始是对我们有用的信息。2、对USB Monitor显示的数据结构进行分析:序列号,可理解为一个上行或下行数据流标号,无实际意义命令类型,括号里的“Down”代表输出数据,即主机到设备命令数据流,出现“Setup Packet”后面,十六进制对命令数据的简单分析传输类型,括号里的UP代表输入数据,即设备到主机设备返回的数据流,十六进制对命令(请求)数据的详略分析(其中对“Request”的分析应该有BUG,0x6应为Ge

4、t_Descriptor,而USB Monitor解释为Get_Configuration)以上没有看到对上行数据(设备返回的数据)的分析,我们只要将鼠标停留在设备返回数据流处(上图所示标记),就会弹出对上行数据的分析画面,如下图所示:3、枚举过程分析1)、主机第一次发出请求描述符命令,数据流为:80 06 00 02 00 00 09 00,bRequest的值为0x06,代表Get_Descriptor命令,但为什么描述符呢?wValue的高字节表示了描述符的类型,此处wValue的值为0x0100,所以高字节为0x01,代表设备描述符(见USB开发基础USB命令(请求)和USB描述符中表

5、5);设备返回的数据为:12 01 00 02 00 00 00 40 51 09 0E 16 00 02 01 02 03 01,bLenght的值为0x12,表示此描述符的长度。bDecriptorType的值为0x01,代表设备描述符。bcdUSB的值为0x0200,代表USB协议的版本号,此处2.0版,如果为0x0110则表示1.1版。bDeviceClass和bDeviceSubClass都为0,表示设备类别由接口描述符指定。bDevicePortocol的值为0,但并不代表它不支持USB定义的标准设备类协议,因为此时可由接口描述符指明设备支持的协议。bMaxPacketSize0的

6、值为0x40,表示端点0的数据包最大长度为64字节。iManufacturer、iProduct和iSerialNumber的分别为0x01、0x02和0x03,表示字符串索引,在主机读取字符串的命令中将以这几个值来填充wIndex字段。请求设备描述符的数据流2)、主机再次发出请求描述符指令,数据流为:80 06 00 02 00 00 09 00,wValue的高字节为0x02表示配置描述符,表示请求配置描述符,wLength的值为0x0009,表示要求返回的数据长度为9个字节。这次设备返回的数据只有9个字节:09 02 20 00 01 01 00 80 32,第一位数为bLeng域,其值

7、为0x09,代表此描述符的长度。bDecriptorType的值为0x02,表示配置描述符。wTotalLength的值为0x0020,表示包括此配置描述符、接口描述符、端点描述符和设备类及厂商定义的描述符的总长为32个字节。bNumInterfaces的值为0x01,表示该配置支持1个接口。MaxPower的值为0x32,表示总线耗电量为502=100mA。第一次请求配置描述符的数据流3)、主机第一次请求设备的配置描述符后得知包括配置描述符、接口描述符、端点描述符等在内的描述总长为32个字节后,这此主机再次发出请求配置描述指令,这次命令与上一个命令只有wLength字段的值不一样,这次wLe

8、ngth的值为0x20,表示要求设备返回32个字节,正好和上次命令中设备返回的wTotalLength信息一致。设备返回的数据流为如下图所示,USB Monitor已经将配置描述符、接口描述符、和端点描述符用不同的背景色区分开来,鼠标停留在不同的区域将弹出对此描述符的具体分析。第一个描述符的数据为:09 02 20 00 01 01 00 80 32,和上一次请求配置描述符得到的数据一模一样,这里不再分析。第二个描述符的数据为:09 04 00 00 02 08 06 50 00,bLength为0x09表示此描述符为9个字节,bDescriptorType的值为0x04表示接口描述符,bIn

9、terfaceNumber为0x00表示此配置接口的索引值。bNumEndpoint的值为0x02表示此接口端点数为两个。bInterfaceClass的值为0x08表示大数据存储类(见USB开发基础USB命令(请求)和USB描述符中表11),bInterfaceSubClass的值为0x06,其含义因bInterfaceClass的不同而不同,由于此处bInterfaceClass的值指定了此设备属大数据存储类,所以需要查看大数据存储类(Mass storage class device)相关协议标准,经查询得知bInterfaceSubClass为0x06时代表传输协议工业标准为SCSI。

10、bInterfaceProtocol的值为0x50,大数据存储类协议规定其含义为通讯方式为批量传输(Bulk-only)。第二次请求配置描述符的数据流4)、在请求完配置描述符后,主机发出请求字符串描述符指令。请求字符描述符分两大步,每大步又分两小步,两大步为:先请求字符串描述符语言ID(此时wIndex的值设为零),再请求UNICODE编码的字符串描述符。不管是请求语言ID还是UNICODE编码的字符串描述符,都要分成两小步:先请求设备返回相应字符串描述符的前两个字节,第一个字节代表了此字符串描述符的长度,主机根据这个长度再次请求相应字符串描述符,这次得到整个字符串描述符。首先取得语言ID的前

11、两个字节,数据流为:80 06 00 03 00 0002 00,wValue的高字节为0x03,表示字符串描述符。wIndex的值为0x0000,表示读取语言ID。wLength为0x0002要求设备返回2个字节数据。设备返回的数据为04 03,第一个字节为0x04表示语言ID字符串描述符长度为4个字节。5)、主机根据上次读取的语言ID字符串描述符长再次读取此描述符,这次读出全部语言ID描述符。主机发出的数据流为:80 06 00 03 00 00 04 00,其中wValue的高字节为0x03,表示字符串描述符,wIndex的值为0x00,表示读取语言ID。wLength为0x0004要求

12、设备返回4个字节数据。设备返回的数据流为:04 03 09 04,bLength的值为0x04表示此描述符长度为4个字节,bDescriptorType的值为0x03表示字符串描述符。wLANGUID的值为0x0409,表示英语。6)、读取完字符串描述符支持的语言ID后将读取UNICODE编码的字符串描述符,同读取语言ID一样,主机同样会分两步读取。主机发出的命令数据流为:80 06 03 03 09 04 02 00,wValue的高字节为0x03,表示字符串描述符,低字节为0x03,表示读取索引为3的字符串描述符(在第1步读取的设备描述中iSerialNumber字符串的索引为3,所以这里

13、实际读取的是设备序列号)。wIndex的值为0x0409,表示语言ID。wLength的值为0x0002,表示要求设备返回此描述符的前两个字节。设备返回的数据流为:32 03,第一个字节的值为0x32表示此字符串描述符的长度为50个字节。7)、在取得UNICODE字符串描述符的长度后,主机根据这个长度读取整个UNICODE字符串描述符。主机发出的命令数据流为:80 06 03 03 09 04 32 00,wValue的高字节为0x03,表示字符串描述符,低字节为0x03表示读取索引为3的字符串描述符。wIndex的值为0x0409表示语言ID。wLength的值为0x0032,表示要求设备返

14、回50个字节的数据。设备返回的数据从第三个字节开始为Unicode编码的字符串,这里返回的字符串是:20070620000000005918B19E8)、在读取完字符串描述符后,主机发出Set_Configuration选择配置索引以激活这个设备的一个配置,然后设备对这一命令作出回应。(不知为何USB Monitor对这此命令的数据流没有显示出来)9)、主机发出Set_Interface指令激活设备的某个接口,然后设备对此指令作出回应。10)、以上为所有USB设备枚举过程中都会经历的过程,后续的配置过程将根据不同的设备分类(见USB开发基础USB命令(请求)和USB描述符中表6)而有所不同。下图所示为此实验所用优盘的后续配置过程的一部分。对于具体设备类相关协议规定的枚举过程就不作分析了,请大家参考相关设备类协议。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1