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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

USB中文协议.docx

1、USB中文协议USB协议深入分析(1)2009年03月25日 星期三 09:54现在非常流行USB设备,时时刻刻都在我们身边,比如使用U盘,使用MP3,使用手机,都需要与PC的USB通讯。通过USB的接口,使用我们的生活非常方便了,想什么时候听歌,就可以插入MP3到PC机那里,然后再从PC上下载MP3。这个过程在用户看来是非常的简单,不需要安装驱动程序,不需要断掉PC机的电源。真正体现“科技以人为本”的思想。使用这么方便的U盘或者MP3,那么我们又需要去问个为什么了,为什么会这么方便呢?往往方便的背后,就意味着需要工程师做大量的工作,才会让大家使用USB这么方便。下面就来详细地分析USB的协议

2、。USB通讯是非常复杂的,刚刚协议定义就厚厚的一本,要完全地去看完,并且理解它,是很费时间的事情。希望本文可以提供给你一个非常好的指导,让你深入地理解USB的协议。USB的协议是主从协议,在所有通讯里,只有一个主控器,其它都是从设备。最多能接127个从设备,因为协议里只保留了7bit作为设备地址。所有的USB数据交流都是由主控器发起,其它从设备进行响应。现在就以WINDOWS上的USB通讯来学习一下USB的通讯协议,后面所有提到的数据,都是WINDOWS上的USB驱动程序发下来的数据。为了把所有通讯数据都显示出来,我找到了一个USB的ARM开发板,通过这个开发板,就可以把主控器所有数据打印出来

3、,并作相应的分析。同时,使用这个开发板,也可以用来调试龙芯的主控器驱动程序的调试。当USB的开发板加电时,就会先初始化USB的连接,但没有插入PC的连接线,这时开发板就会从串口输出下面的字符:USB SuspendUSB Resume从上面看到,从设备的USB一直不断地挂起和唤醒,直到插入PC的连接线。当插入连接线到PC时,就会收到主控器发来的信息。下面的数据,就是开发板与USB主控器交流的数据。1. 收到主控器的获取设备描述符配置包。Setup m=0,n=0,val=3780 06 00 01 00 00 40 00 这是主控器发来第一个配置包数据。由于主控器不知道USB设备设备描述符有多

4、长,所以包的最后里的长度是0x0040,也就是64个字节长度。REQUEST_STANDARD=0x6USB_DEVICE_DESCRIPTOR_TYPE(0)根据USB的协议,分析上面的数据,就知道它是获取设备描述符。为了实现即插即用,就需要对插入来的设备进行获取描述信息,才知道这个USB的设备是什么样的设备,是U盘,还是HID的键盘。因此,USB设备就返回下面的数据给主控器:USB_DataInStage,cnt=18,EP0Data.Count=1812 01 10 01 00 00 00 40 00 80 00 80 00 01 04 2C 4A 01 这条数据,就是USB的设备描述符

5、,描述了这个设备使用什么USB的协议版本,这里是1.1的版本,还有厂家标识、产品标识,以及厂家、产品和序列号等字符串的偏移地址。USB_EVT_IN,USB_DataInStageUSB_DataInStage,cnt=0,EP0Data.Count=0USB_EVT_OUT通过设备描述符,就可以让主控器知道这个设备是使用什么版本的USB协议,是高速的设备,还是低速的设备,是谁产生的,是什么产品,然后操作系统就可以通过这些信息去找到相应的驱动程序,如果操作系统没有找到相应的驱动程序,就会提示用户插入光盘,或者其它方来安装相应的驱动程序。2. 收到主控器的设置设备地址配置包。Setup m=0,

6、n=0,val=3700 05 01 00 00 00 00 00 这条数据,根据USB的协议,就可以知道它是设置USB设备的地址配置包。它的作用,就是分配USB设备的地址,由于USB总线上可以有127个设备,那么每个设备都需要分配一个唯一的地址才通讯,这跟网卡的MAC地址的作用是一样的。其实,就像分配门牌号,让大家看到那个门牌就知道什么房了。从下面的数据分析来看,是分配地址为1.REQUEST_STANDARD=0x5USB_DeviceAddress=129USB_EVT_IN,USB_SetAddress(1)3. 收到主控器的获取设备描述符配置包。Setup m=0,n=0,val=3

7、780 06 00 01 00 00 12 00 再次收到获取设备描述符的配置包,由于第一次不知道设备描述符有多大,因而总是发送一个最大数据的包,就是64个字节大,现在知道描述符的大小为0x0012个大小了,就把它发送下来了。所以USB设备再次回应设备描述符就可以了。REQUEST_STANDARD=0x6USB_DEVICE_DESCRIPTOR_TYPE(1)USB_DataInStage,cnt=18,EP0Data.Count=1812 01 10 01 00 00 00 40 00 80 00 80 00 01 04 2C 4A 01 在这里再次回应设备描述符。USB_EVT_IN,

8、USB_DataInStageUSB_DataInStage,cnt=0,EP0Data.Count=04. 收到配置描述符包Setup m=0,n=0,val=4580 06 00 02 00 00 09 00 根据USB协议可以知道,这是一个配置描述符的包,也就是让USB设备发送本设备有多少个配置方式给主控器。由于USB的设备是多种多样,满足不同的用户需要的。比如鼠标和键盘,就是不同的设备了。还有MP3播放器,还有各种数码相机等等,都是不一样的设备了。就可以通过下面的方式来说明这个配置有多少种方式,主要是通讯的方式。REQUEST_STANDARD=0x6USB_CONFIGURATION

9、_DESCRIPTOR_TYPE(2)(Offset=0x0)USB_DataInStage,cnt=9,EP0Data.Count=909 02 22 00 01 01 00 01 32 这里就是USB设备返回配置描述符给主控器的,它主要说明了这个设备有多少个配置,比如定义端点的类型,端点的传送方式,还有这个设备使用USB总线的电源多少。USB_EVT_IN,USB_DataInStageUSB_DataInStage,cnt=0,EP0Data.Count=05. 收到字符串描述符包Setup m=0,n=0,val=4580 06 00 03 00 00 FF 00 这里收到获取字符串描

10、述符。由于在设备描述符里已经说明字符串描述符在那里,主要是偏移地址,比如04就是厂家的描述符。REQUEST_STANDARD=0x6USB_STRING_DESCRIPTOR_TYPE(3)(Offset=0x0)USB_DataInStage,cnt=4,EP0Data.Count=404 03 09 04 这里返回偏移地址为0的字符串描述,其实那里是保存字符串描述符的语言描述标识,这里英语的标识,0X0409。USB_EVT_IN,USB_DataInStageUSB_DataInStage,cnt=0,EP0Data.Count=06. 收到字符串描述符包Setup m=0,n=0,v

11、al=4580 06 4A 03 09 04 FF 00 这时收到获取字符串描述符,根据偏移地址,就知道它是想返回0x4A的字符串,也就是字符串描述符里的偏移地址。REQUEST_STANDARD=0x6USB_STRING_DESCRIPTOR_TYPE(4)(Offset=0x4A)USB_DataInStage,cnt=36,EP0Data.Count=3624 03 43 00 41 00 49 00 32 00 30 00 30 00 37 00 30 00 33 00 32 00 35 00 20 00 31 00 2E 00 30 00 2E 00 30 00 USB设备返回0x

12、4A的字符串给PC。这里是我放置的字符串:CAI20070325 1.0.0它作为产品的序列号。由于采用UNICODE编码,所有高位字节全是0。由于USB协议是使用小端格式来发送数据,所以都低位在前,高位在后。这样在PC那里就可以看到USB设备的产品序列号了。又前进了一步。USB_EVT_IN,USB_DataInStageUSB_DataInStage,cnt=0,EP0Data.Count=07. 收到第二个配置描述符包Setup m=0,n=0,val=4580 06 00 02 00 00 FF 00 这里收到是第二个配置描述符包,与第一个的区别是返回长度不同。第一个配置包返回的长度是

13、9个字节,而这里的长度是255。REQUEST_STANDARD=0x6USB_CONFIGURATION_DESCRIPTOR_TYPE(5)(Offset=0x0)USB_DataInStage,cnt=34,EP0Data.Count=3409 02 22 00 01 01 00 01 32 09 04 00 00 01 03 00 00 6E 09 21 00 01 00 01 22 24 00 07 05 81 03 40 00 20 在这里返回全部配置描述给PC,让PC知道USB设备所有的配置。在这里包括设备配置,接口配置,端点配置,还有设备特别配置信息。USB_EVT_IN,US

14、B_DataInStageUSB_DataInStage,cnt=0,EP0Data.Count=08. 收到字符串描述符包Setup m=0,n=0,val=4580 06 00 03 00 00 FF 00 收到PC的字符串描述符,后面设备就返回。REQUEST_STANDARD=0x6USB_STRING_DESCRIPTOR_TYPE(6)(Offset=0x0)USB_DataInStage,cnt=4,EP0Data.Count=404 03 09 04 返回设备描述符的语言定义。USB_EVT_IN,USB_DataInStageUSB_DataInStage,cnt=0,EP0

15、Data.Count=09. 收到字符串描述符包Setup m=0,n=0,val=4580 06 2C 03 09 04 FF 00 收到PC需要产品字符串。REQUEST_STANDARD=0x6USB_STRING_DESCRIPTOR_TYPE(7)(Offset=0x2C)USB_DataInStage,cnt=30,EP0Data.Count=301E 03 42 00 69 00 67 00 53 00 6C 00 6F 00 70 00 65 00 33 00 44 00 20 00 48 00 49 00 44 00 这里USB设备返回产品字符串给PC了。USB_EVT_IN

16、,USB_DataInStageUSB_DataInStage,cnt=0,EP0Data.Count=010. 收到字符串描述符包Setup m=0,n=0,val=4580 06 00 03 00 00 FF 00 这里收到字符串描述符。REQUEST_STANDARD=0x6USB_STRING_DESCRIPTOR_TYPE(8)(Offset=0x0)USB_DataInStage,cnt=4,EP0Data.Count=404 03 09 04 返回语言标识。USB_EVT_IN,USB_DataInStageUSB_DataInStage,cnt=0,EP0Data.Count=

17、011. 收到字符串描述符包Setup m=0,n=0,val=4580 06 2C 03 09 04 FF 00 收到PC需要产品字符串。REQUEST_STANDARD=0x6USB_STRING_DESCRIPTOR_TYPE(9)(Offset=0x2C)USB_DataInStage,cnt=30,EP0Data.Count=301E 03 42 00 69 00 67 00 53 00 6C 00 6F 00 70 00 65 00 33 00 44 00 20 00 48 00 49 00 44 00 这里USB设备返回产品字符串给PC了。USB_EVT_IN,USB_DataI

18、nStageUSB_DataInStage,cnt=0,EP0Data.Count=012. 收到字符串描述符包USB_EVT_OUTSetup m=0,n=0,val=3780 06 00 03 00 00 FF 00 这里收到字符串描述符。REQUEST_STANDARD=0x6USB_STRING_DESCRIPTOR_TYPE(10)(Offset=0x0)USB_DataInStage,cnt=4,EP0Data.Count=4USB协议深入分析(2)2009年03月25日 星期三 09:5504 03 09 04 返回语言标识。USB_EVT_IN,USB_DataInStageU

19、SB_DataInStage,cnt=0,EP0Data.Count=01. 收到字符串描述符包Setup m=0,n=0,val=4580 06 2C 03 09 04 FF 00 收到PC需要产品字符串。REQUEST_STANDARD=0x6USB_STRING_DESCRIPTOR_TYPE(11)(Offset=0x2C)USB_DataInStage,cnt=30,EP0Data.Count=301E 03 42 00 69 00 67 00 53 00 6C 00 6F 00 70 00 65 00 33 00 44 00 20 00 48 00 49 00 44 00 这里US

20、B设备返回产品字符串给PC了USB_EVT_IN,USB_DataInStageUSB_DataInStage,cnt=0,EP0Data.Count=02. 收到字符串描述符包Setup m=0,n=0,val=4580 06 00 03 00 00 FF 00 REQUEST_STANDARD=0x6USB_STRING_DESCRIPTOR_TYPE(12)(Offset=0x0)USB_DataInStage,cnt=4,EP0Data.Count=404 03 09 04 USB_EVT_IN,USB_DataInStageUSB_DataInStage,cnt=0,EP0Data.

21、Count=0Setup m=0,n=0,val=4580 06 2C 03 09 04 FF 00 REQUEST_STANDARD=0x6USB_STRING_DESCRIPTOR_TYPE(13)(Offset=0x2C)USB_DataInStage,cnt=30,EP0Data.Count=301E 03 42 00 69 00 67 00 53 00 6C 00 6F 00 70 00 65 00 33 00 44 00 20 00 48 00 49 00 44 00 USB_EVT_IN,USB_DataInStageUSB_DataInStage,cnt=0,EP0Data.C

22、ount=03. 收到字符串描述符包USB_EVT_OUTSetup m=0,n=0,val=4580 06 00 01 00 00 12 00 这里收到需要返回厂商字符串的请求。REQUEST_STANDARD=0x6USB_DEVICE_DESCRIPTOR_TYPE(14)USB_DataInStage,cnt=18,EP0Data.Count=1812 01 10 01 00 00 00 40 00 80 00 80 00 01 04 2C 4A 01 在这里返回设备的厂商字符串给PC。USB_EVT_IN,USB_DataInStageUSB_DataInStage,cnt=0,EP

23、0Data.Count=04. 收到第三个配置描述符包Setup m=0,n=0,val=4580 06 00 02 00 00 09 00 REQUEST_STANDARD=0x6USB_CONFIGURATION_DESCRIPTOR_TYPE(15)(Offset=0x0)USB_DataInStage,cnt=9,EP0Data.Count=909 02 22 00 01 01 00 01 32 USB_EVT_IN,USB_DataInStageUSB_DataInStage,cnt=0,EP0Data.Count=05. 收到第四个配置描述符包Setup m=0,n=0,val=4

24、580 06 00 02 00 00 22 00 REQUEST_STANDARD=0x6USB_CONFIGURATION_DESCRIPTOR_TYPE(16)(Offset=0x0)USB_DataInStage,cnt=34,EP0Data.Count=3409 02 22 00 01 01 00 01 32 09 04 00 00 01 03 00 00 6E 09 21 00 01 00 01 22 24 00 07 05 81 03 40 00 20 根据长度返回不同的数据。USB_EVT_IN,USB_DataInStageUSB_DataInStage,cnt=0,EP0Da

25、ta.Count=06. 收到设置描述符包Setup m=0,n=0,val=4500 09 01 00 00 00 00 00 REQUEST_STANDARD=0x9USB_SetConfiguration WB.L =1USB_Configure(TRUE)USB_SetConfiguration true由上面可以知道经过这么多次来回后,主控器已经配置完成,对这个设备可以使用了。这时,如果在WINDOWS里就会看到可以设备安装完成,可以使用了。7. 收到设置空闲描述符包Setup m=0,n=0,val=3721 0A 00 00 00 00 00 00 收到这个描述符,就表明设备在空

26、闲状态。8. 收到HID的报告描述符包Setup m=0,n=0,val=3781 06 00 22 00 00 64 00 由于在配置描述符里,我把这个设备描述成HID的设备,所以会收到HID的报告描述符。REQUEST_STANDARD=0x6REQUEST_TO_INTERFACE (0x22)HID_REPORT_DESCRIPTOR_TYPEUSB_DataInStage,cnt=36,EP0Data.Count=3606 00 FF 09 01 A1 01 19 01 29 08 15 00 25 FF 95 3F 75 08 81 02 19 01 29 08 15 00 25

27、FF 95 3F 75 08 91 02 C0 这里就返回报告描述的类型,说明每次发送数据报告的大小,还有数据的格式。这里是返回63个字节输出,63个输入的描述符。USB_EVT_IN,USB_DataInStageUSB_DataInStage,cnt=0,EP0Data.Count=0USB_EVT_OUT到这里就把USB设备初始化完成了。从上面可以知道,要想配置一个USB设备,需要经过20个来回才能完成配置,这个过程是非常多的。如果在调试过程中,只要任何一个地方出错,都不会配置成功的。如果再加上硬件的出错,就需要花费更长的时间了。杉 琔SB的设备虽然非常方便使用,但是花费了工程师大量的精

28、力和相当多的时间。因而USB是一个非常值钱的设备。目前USB设备已经非常流行,今后PC机与外设的通讯,大部份都是使用USB设备来完成的。完全会取代串口、并口的通讯。我看到有一个厂家开发的USB设备,就200多种,从USB风扇到USB电话,从USB网络到USB装饰品,比如USB接口的彩灯。还有通过USB控制的按摩器等健身器材等等。希望你看到本文之后,又可以开发一款更好的USB设备到来了。在龙芯电脑里,已经没有软驱,那么它是通过USB的U盘来启动的,这样就需要配置USB的设备,所以龙芯里的BIOS是非常复杂的,龙芯的PMON还在继续地开发支持USB的键盘、USB的鼠标,这样完全可以不使用任何的PS

29、2的设备了,可以直接任何时间插入鼠标、键盘,都可以正常地使用,不像PS2那样,需要重新启动操作系统。我希望龙芯的电脑,以后增加一个USB的设备在那里,直接通过那个设备就可以连接到其它PC机,可以共享数据,并不需要网络的配置USB协议及规范-(之三)术语和缩略词2009年03月25日 星期三 09:55ACK:确认信号Active Device:正在使用的设备Asynchronous Data:异步数据Asynchronous RA:异步自适应速率Asynchronous SRC: 异步抽样转换率Audio Device:音频设备AWG#(American Wire Gauge):美国电线标准B

30、abble:帧传输中的总线动作Bandwidth:带宽Big Endian:Bit:比特Bit Stuffing:数据填充,以使PLL可以提取时钟信号b/s:每秒多少比特B/s:每秒多少字节Buffer:缓冲区Bulk Transfer:批量传送Bus Enumeration:总线标号Byte: 字节 Capabilities:能力Characteristics:特征Client:客户Configuring Software:配置软件Control Endpoint:控制端口Control Pipe:控制通道Control Transfer:控制传送CTI:计算机电信组织Cyclic Redundancy Check(CRC):循环冗余校验Default Address:缺省地址Default Pipe:缺省通道Device:设备、器件Device Address:设备地址Device Endpoint:设备端口Device Resource:设备资源Device Software:设备软件Downstream:下行Driver:驱动DWORD:双字Dynamic Insertion and Removal:动态插入与拆除Electrically Erasable Pro

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

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