学习笔记基于LM3SXXX的USB程序开发笔记—_第1页
学习笔记基于LM3SXXX的USB程序开发笔记—_第2页
学习笔记基于LM3SXXX的USB程序开发笔记—_第3页
学习笔记基于LM3SXXX的USB程序开发笔记—_第4页
学习笔记基于LM3SXXX的USB程序开发笔记—_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于LM3Sxxx的USB开发笔记- Triton.zhang 2011-08-30【摘要】 TI 收购LM后继承了LM一系列的cortex-M3的产品,从而弥补了了TI在MCU市场一个空白。从产品规划来讲,LM的产品还是不错的,特别是带CAN、USB、和集成MAC+PHY的ETH接口,这些外设为开发者提供了一个更方便的连接器解决方案。本文就通过LM3SXXX的USB应用笔记给大家介绍一个完整的USB系统是如何开发出来的。LM3Sxxx的几大系列中,其中F3xxx,F5xxx和最新的F9xxx系列都带有USB接口,有的是只支持Device,有的支持HOST + Device, 部分芯片支持OT

2、G功能,具体要看数据手册,本文的所有试验都基于TI最新的功能最全的LM3S9B96的评估板。如果想更详细了解USB应用的朋友可以参看TI的相关文档和USB的协议。本文中的所有程序都是本人编写,请配合该程序进行学习。本文提及到的参考资料,请参见后面的参考资料列表,如果是刚刚接触USB,或者LM3Sxxx的同学可以先下载这些资料。本开发笔记分为三大章节,第一章介绍USB的基础知识,如果对USB协议已经熟悉的同学,可以跳过本章。第二章介绍如何在LM3SXXX芯片上开发USB程序,第三章介绍如何在PC上开发USB的驱动程序。希望通过本笔记的学习,能够帮助大家尽快的学会如何进行USB的设计开发。目 录基

3、于LM3Sxxx的USB开发笔记1目 录2第一章 USB 开发的必备知识3USB系统介绍3USB的连接模型3USB的拓扑结构4USB的电气特性6USB总线协议6USB数据流分类7USB的带宽7USB设备的插入检测机制7USB的识别过程8USB的请求命令8USB的描述符10USB设备的枚举过程18第一章 USB 开发的必备知识USB系统介绍USB是通用串行总线(Universal Serial Bus)的简写。USB协议先后经历过USB1.0,USB1.1,USB2.0和USB3.0。由于目前市面上的MCU大多只支持USB2.0,所以本文主要介绍USB2.0的特性。USB是主从模式的总线结构,设

4、备与设备之间,主机与主机之间是不能互连的,为了解决这个问题,扩大USB的使用范围,在USB2.0之后,出现了USB OTG(on the go)。 USB OTG的做法是同一个设备,在不同的应用场合下可以在主机和从机之间自由切换。 在USB1.0和USB1.1版本中,只支持1.5Mbps的低速模式(low speed)和12Mbps的全速模式(Full speed)。在USB2.0中,又加入了480M的高速模式(High speed)。USB的连接模型USB是一种主从结构的总线,主机叫做host,从机叫做device(也就是我们平时讲的设备)。一个完整的USB系统主要由三个部分组成:u USB

5、的连接器USB的连接是指USB设备与主机之间进行连接和通信的操作,主要包括以下几个方面:- 总线的拓扑结构:USB设备与主机之间的各种连接方式- 内部层次关系: 根据性能叠置,USB的任务被分配到系统的每一个层次- 数据流模式: 描述了数据在提供中通过USB从发起端到接收端的流动方式- USB的调度: USB提供了一个共享的连接,对可疑使用的连接进行调度以支持同步数据传输u USB 的主机在任何USB系统中,只有一个USB的主机,USB和主机系统的接口叫做主机控制器。主机控制器由硬件,固件和软件综合实现。u USB的设备USB的设备包含两大类:- 网络集线设备: 为USB系统提供更多的连接点-

6、 功能设备: 为USB系统提供具体功能USB的数据交换只能发生在主机和从机之间,主机和主机,从机和从机之间是不能进行数据交换的。为了再物理上区分主机和从机,使用不同的插头和插座,这样我们就能轻松的通过连接线来判断出USB系统中,谁处于主机模式,谁处于从机模式。最早的USB标准中,USB接头只有4根线,USB2.0之后,定义了MiniUSB接口,增加了一个ID线,主要用在OTG的设备上用来标识本设备ID。标准的USB接口有A型和B型,每一个类型又分为插头和插座。如下图所示:USB系统中,所有的数据传输都是由主机主动发起的,从机值是被动地负责应答。在USB OTG应用中,一个设备可以在从机和主机之

7、间切换,从而实现了设备间的连接,大大地增加了USB的使用范围。但即使OTG的应用也还是属于主从模式,两个设备之间一个作为主机,一个作为从机。USB的拓扑结构USB的拓扑结构为金字塔型。USB系统由一个USB主控制器出发,下面接USB的集线器,USB集线器将一个USB接口扩展为多个USB接口,多个USB接口又可通过集线器扩展更多的接口。USB协议中对集线器的层数有限制,USB1.1规定USB的集线器层数最多是4层,USB2.0规定最多为6层。图1. USB的拓扑结构USB主控制器通过7位地址对挂接在总线上的设备进行寻址,理论上一个主控制器上最多可以接128个设备,但实际应用中接不了这么多。在PC

8、机上,一般有一个(或多个)USB集线器,它叫根集线器,直接连接在USB的主控制器上。打开电脑的设备管理器,我们可以看到USB的主控制器和根集线器。如下图所示:图2. PC机上的USB控制器和集线器USB的电气特性标准的USB使用4根线:5V电源线(Vbus),差分数据线负(D-),差分数据线正(D+),地(Gnd)。在USB OTG中,又增加了一种mini接口,使用的是5根线,比标准的USB多了一根身份识别(ID)线。如下图所示:USB使用的是差分传输模式,有两根数据先,分别是D-和D+。在USB低速和全速模式中,采用的是电压传输模式,在高速模式下,则是电流传输模式。为了避免长时间出现全0或全

9、1的信号,在发送数据前,要经过位填充处理。然后将数据串行化,发送到数据总线上,由两根数据线的差分值来表示0和1。在接收端恰恰相反,接收端采样数据总线,将数据并行话,然后去白化处理(即去掉填充位),在解析数据。在USB协议中规定,设备可以通过USB总线供电,在未配置之前,设备可以从VBUS上获取100mA的电流,配置之后,最多可以从VBUS上获取500mA的电流。关于USB的的电气特性有如下几点需要注意:- 电缆中包括VBUS 、GND 二条线,向设备提供电源 ;- VBUS使用+5V 电源。USB 对电缆长度要求很宽,最长可为几米;- 为了保证足够的输入电压和终端阻抗,重要的终端设备应位于电缆

10、的尾部;- 低速模式需要更少的EMI 保护;- 两种模式可在用同一USB 总线传输的情况下自动地动态切换。- 过多的低速模式的使用将降低总线的利用率;USB总线协议USB总线属于轮询方式的总线,始终由主机控制端口初始化所有的数据传输。每一个USB总线执行动作最多传送三个数据包。按照传输前制定好的原则,在每次传送开始时,主机控制器发送一个描述传输操作的种类、方向,USB 设备地址和终端号的USB 数据包,这个数据包通常称为标志包(token packet)。USB 设备从数据包中取出属于自己的数据。数据传输方向不是从主机到设备就是从设备到主机。在传输开始时,由标志包来标识数据的传输方向,然后发送

11、端开始发送包含信息的数据包或表明没有数据传送。接收端也要相应发送一个握手的数据包表明是否传送成功。发送端和接收端之间的USB 数据传输,在主机和设备的端口之间可视为一个管道(PIPE)。USB存在两种类型的管道:- 数据流管道数据流管道的数据没有USB协议规定的结构。管道与数据宽、传输服务类型、端口特性(如缓冲区大小)有关。数据流管道在USB设备初始化设置完成就存在了。- 消息管道:消息通道是USB协议中特殊的一个管道,也成为控制管道。设备上电启动后,该管道就存在,为设备的设置、查询状态和输入控制信息提供了一个入口。USB数据流分类在USB主机和设备通道之间的数据传输,我们叫做数据流,USB的

12、结构包含四个基本的数据流传输类型:- 控制数据传送在设备连接时用来对设备进行设置,还可对指定设备进行控制,如通道控制;- 批量数据传送大批量产生并使用的数据,在传输约束下,具有很广的动态范围;通常用在打印机和扫描仪等有大量数据需求的传输。- 中断数据的传送用来描述或匹配人的感觉或对特征反应的回馈;中断数据传输是针对少量数据的传输需求,数据延迟时间也是有限范围内的。- 同步数据的传送由预先确定的传送延迟来填满预定的USB 带宽;同步数据的建立、传输和使用时时连续且实时的,同步数据时以稳定的速率发送和接收实时信息,同步数据要使接受者与发送者保持相同的时间安排,出了传输速率,同步数据对延迟非常敏感。

13、对于任何指定的USB设备而言,一个通道只能支持上述一种方式的数据流传输。USB的带宽USB的带宽分配给各个通道,当一个通道建立后,USB主机就分配给它一定的带宽,USB设备需要提供一些数据缓冲区,若USB提供了更多的带宽,则需要更多的缓冲区。USB的体系要保证缓冲引导的硬件的延迟限定在几毫秒内。USB设备的插入检测机制当USB设备插上主机时,主机是如何检测到设备插入的呢?首先,在每个USB的集线器下游端口D+和D-上,分别接了一个15K欧姆的下拉电阻到地。当集线器的端口悬空时,D+和D-被这两个下拉电阻拉到地,同为低电平。在低速USB的设备上,DD-被接上1.5K欧姆的上拉电阻,在全速和高速U

14、SB设备上,D+被接上一个1.5K欧姆的上拉电阻。当设备插入集线器是,由于1.5k欧姆的上拉和下拉电阻分压,就将D+或D-其中的一条线拉高了。集线器检测到这个状态后,就上报USB主控制器,检测到设备的插入。通过对D+,D-电平的识别可以判断出是低速设备还是高速或全速的设备。高速和全速的设备需要主机和从机进一步数据交换后才能确定。USB的识别过程当USB主机检测到USB设备插入后,主机就通过一系列的动作来对设备进行枚举配置(配置是属于枚举的一个态,态表示暂时的状态),这些态如下:- 接入态(Attached)设备接入主机后,主机通过检测信号线上的电平变化来发现设备的接入; - 供电态(Power

15、ed)就是给设备供电,分为设备接入时的默认供电值,配置阶段后的供电值(按数据中要求的最大值,可通过编程设置) - 缺省态(Default)USB在被配置之前,通过缺省地址0与主机进行通信- 地址态(Address)经过了配置,USB设备被复位后,就可以按主机分配给它的唯一地址来与主机通信,这种状态就是地址态; - 配置态(Configured)通过各种标准的USB请求命令来获取设备的各种信息,并对设备的某此信息进行改变或设置。 - 挂起态(Suspended)总线供电设备在3ms内没有总线操作,即USB总线处于空闲状态的话,该设备就要自动进入挂起状态,在进入挂起状态后,总的电流功耗不超过280

16、UA。USB的请求命令控制传输过程中,初始化设置USB的设备时会涉及到USB的请求命令。 标准的USB设备请求命令总共有11个,每个命令由8个字节(5个字段)组成,具有相同的数据结构。数据结构如下图所示:表1、 USB命令的结构偏移量域长度(半字)值描述0bmRequestType1位图请求特征:D7 : 传输方向0 = 主机至设备1 = 设备至主机D6.5: 种类0 = 标准1 = 类2 = 厂商3 = 保留D4.0: 接收者0 = 设备1 = 接口2 = 端点3 = 其他4.31 保留1bRequest1值命令类型编码值(见表3)2wValue2值根据不同的命令,含义也不同4wIndex2

17、索引或偏移根据不同的命令,含义也不同,主要用于传送索引或偏移6wLength2如有数据传送阶段,此为数据字节数 下表列出了USB的11种标准命令表2、USB的11种标准命令命令bmRequestTypebRequestwVaulewIndexwLengthDataClear_Feature0000 0000B0000 0001B0000 0010BCLEAR_FEATURE特性选择符零接口号端点号零无Get_Configuration1000 0000BGET_CONFIGURATION零零-配置值Get_Descriptor1000 0000BGET_DESCRIPTOR描述表种类(高字节,

18、见表5)和索引(低字节)零或语言标志描述表长描述表Get_Interface1000 0001BGET_INTERFACE零接口号-可选设置Get_Status1000 0000B1000 0001B1000 0010BGET_STATUS零零(返回设备状态)接口号(对像是接口时)端点号(对象是端点时)二设备,接口,或端点状态Set_Address0000 0000BSET_ADDRESS设备地址零零无Set_Configuration0000 0000BSET_CONFIGURATION配置值(高字节为0,低字节表示要设置的配置值)零零无Set_Descriptor0000 0000BSET

19、_DESCRIPTOR描述表种类(高字节,见表5)和索引(低字节)零或语言标志描述表长描述表Set_Feature0000 0000B0000 0001B0000 0010BSET_FEATURE特性选择符(1表示设备, 0表示端点)零,接口号,端点号零无Set_Interface0000 0001BSET_INTERFACE可选设置接口号零无Synch_Frame1000 0010 BSYNCH_FRAM零端点号二帧号其中bRequest为命令编码值,含义见表3:表3、 USB标准命令的编码值bRequestValueGET_STATUS0CLEAR_FEATURE1RESERVED2SET

20、_FEATURE3RESERVED4SET_ADDRESS5GET_DESCRIPTOR6SET_DESCRIPTOR7GET_CONFIGURATION8SET_CONFIGURATION9GET_INTERFACE10SET_INTERFACE11SYNCH_FRAME12这里就不详细介绍这11个命令了,如果有感兴趣的同学请自己去看USB2.0的协议。控制传输是USB的重点, 而控制传输就是依靠这11个命令来完成的,所以这11个命令搞明白了,USB就算是入门了。 USB的描述符USB协议为USB设备定义了一套描述设备功能和属性的有固定结构的描述符,包括标准的描述符即设备描述符、配置描述符、

21、接口描述符、端点描述符和字符串描述符,还有百标准描述符,如类描述符。USB设备通过这些描述符向USB主机汇报设备的各种各样属性,主机通过对这些描述符的访问对设备进行类型识别、配置并为其提供相应的客户端驱动程序。USB设备通过描述符反映自己的设备特性。USB描述符是由特定格式排列的一组数据结构组成。在USB设备枚举过程中,主机端的协义软件需要解析从USB设备读取的所有描述符信息。在USB主向设备发送读取描述符的请求后,USB设备将所有的描述符以连续的数据流方式传输给USB主机。主机从第一个读到的字符开始,根据双方规定好的数据格式,顺序地解析读到的数据流。USB描述符包含标准描述符、类描述符和厂商

22、特定描述种形式。任何一种设备必须USB标准描述符(队字符串描述符可选外)。在USB1.X中,规定了5种标准描述符:设备描述符(Device Descriptor)、配置描述符(Configuration Descriptor)、接口描述符(Interface Descriptor)、端点描述符(Endpoint Descriptor)和字符串描述符(String Descriptor)。每个USB设备只有一个设备描述符,而一个设备中可包含一个或多个配置描述符,即USB设备可以有多种配置。设备的每一个配置中又可以包含一个或多个接口描述符,即USB设备可以支持多种功能(接口),接口的特性通过描述符

23、提供。在USB主机访问USB设备的描述符时,USB设备依照设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符顺序将所有描述符传给主机。一设备至少要包含设备描述符、配置描述符和接口描述符,如果USB设备没有端点描述符,则它仅仅用默认管道与主机进行数据传输。u 设备描述符设备描述符给出了USB设备的一般信息,包括对设备及在设备配置中起全程作用的信息,包括制造商标识号ID、产品序列号、所属设备类号、默认端点的最大包长度和配置描述符的个数等。一个USB设备必须有且仅有一个设备描述符。设备描述符是设备连接到总线上时USB主机所读取的第一个描述符,它包含了14个字段,结构如下:表4、 USB设备

24、描述符的结构偏移量域大小值描述0bLength1数字此描述表的字节数1bDescriptorType1常量描述符的类型(此处应为0x01,即设备描述符)2BcdUSB2BCD码此设备与描述表兼容的USB设备说明版本号(BCD码)4bDeviceClass1类设备类码:如果此域的值为0则一个设置下每个接口指出它自己的类,各个接口各自独立工作。如果此域的值出于1FEH之间,则设备在不同的接口上支持不同的类。并这些接口可能不能独立工作。此值指出了这些接口集体的类定义。如果此域设置FFH,则此设备的类由厂商定义。5bDeviceSubClass1子类子类挖码这些码值的具体含义根据bDeviceClas

25、s域来看。如bDeviceClass域为零,此域也须为零如bDeviceClass域为FFH,此域的所有值保留6bDevicePortocol1协议协议码这些码得值是bDeviDDDDDDDDDDDDDDDDDDDDDDceClass和bDeviceSubClass的值而定。如果设备支持设备类相关的协议,此码标志了设备类的值。如果此域的值为零,则此设备不支持设备类相关的协议,然而,肯它的接口支持设备类相关的协议。如果此域的值为FFH,此设备使用厂商定义的协议。7bMaxPacketSize01数字端点0的最大包大小(仅8,16,32,64为合法值)8idVendor2ID厂商标志(由USB-I

26、F组织赋值)10idProduct2ID产品标志(由厂商赋值)12bcdDevice2BCD码设备发行码(BCD码)14iManufacture1索引描述厂商信息的字符串描述的索引值15iProduct1索引描述产品信息的字符串描述符的索引值16iSerialNumber1索引描述设备序列号信息的字符串描述符的索引值17bNumConfigurations1数字可能的配置描述符数目其中bDescriptorType为描述符的类型,其含义可查下表(此表也适用于标准命令Get_Descriptor中wValue域高字节的取值含义):表5、USB描述符的类型值类型描述符描述符值标志描述符设备描述符(

27、Device Descriptor)0x01配置描述符(Configuration Descriptor)0x02字符串描述符(String Descriptor)0x03接口描述符(Interface Descriptor)0x04端点描述符(EndPort Descriptor)0x05类描述符集线器类描述符(Hub Descriptor)0x29人机接口类描述符(HID)0x21厂商定义的描述符0Xff设备类代码bDeviceClass可查下表:表5、USB设备的类别(bDeviceClass)值(十进制)值(十六进制)说明00x00接口描述符中提供类的值20x02通信类90x09集线器

28、类2200xDC用于诊断用途的设备类2240xE0无线通信设备类2550xFF厂商定义的设备类设备描述符在程序中的结构体表示如下:1. struct _DEVICE_DEs criptOR_STRUCT2. 3. BYTE bLength; / 设备描述符的字节数大小,为0x124. BYTE bDes criptorType; / 描述符类型编号,为0x01 5. WORD bcdUSB; / USB版本号 6. BYTE bDeviceClass; / USB分配的设备类代码,0x010xfe为标准设备类,7. / 0xff为厂商自定义类8. / 0x00不是在设备描述符中定义的,如HID

29、 9. BYTE bDeviceSubClass; / usb分配的子类代码,同上,值由USB规定和分配的 10. BYTE bDeviceProtocl; / USB分配的设备协议代码,同上 11. BYTE bMaxPacketSize0; / 端点0的最大包的大小 12. WORD idVendor; / 厂商编号 13. WORD idProduct; / 产品编号 14. WORD bcdDevice; / 设备出厂编号 15. BYTE iManufacturer; / 描述厂商字符串的索引 16. BYTE iProduct; / 描述产品字符串的索引 17. BYTE iSer

30、ialNumber; / 描述设备序列号字符串的索引 18. BYTE bNumConfiguration; / 可能的配置数量 19. 以下是一种鼠标的设备描述符示例,以供大家分析:表7、一种鼠标的设备描述符示例字段描述符值(十六进制)bLength0x12bDecriptorType0x01BcdUSB0x0110bDeviceClass0x00bDeviceSubClass0x00bDevicePortocol0x00BMaxPacketSize00x08idVendor0x045E(Microsoft Corporation)idProduct0x0047bcdDevice0x300i

31、Manufacture0x01iProduct0x03iSerialNumber0x00bNumConfiguration0x01u 配置描述符配置描述符中包括了描述符的长度(属于此描述符的所有接口描述符和端点描述符的长度的和)、供电方式(自供电/总线供电)、最大耗电量等。主果主机发出USB标准命令Get_Descriptor要求得到设备的某个配置描述符,那么除了此配置描述符以外,此配置包含的所有接口描述符与端点描述符都将提供给USB主机。表8、USB配置描述符的结构偏移量域大小值描述0bLength1数字此描述表的字节数长度1bDescriptorType1常量配置描述表类型(此处为0x02

32、)2wTotalLength2数字此配置信息的总长(包括配置,接口,端点和设备类及厂商定义的描述符)4bNumInterface1数字此配置所支持的接口个数5iConfigurationValue1数字在SetConfiguration()请求中用作参数来选定此配置6iConfiguration1索引描述此配置的字符串描述表索引7bmAttributes1位图配置特性:D7: 保留(设为1)D6: 自给电源D5: 远程唤醒D4.0: 保留(设为1)一个既用总线电源又有自给电源的设备会在MaxPower域指出需要从总线取电量。并设置D6为1。运行使其的实际电源可由GetStatus(DEVICE

33、)请求得到。8MaxPower1mA在此配置下的总线电源耗费量,以2mA为一个单位配置描述符在程序中的结构体表示如下:01. struct _CONFIGURATION_DEs criptOR_STRUCT02. 03. BYTE bLength; / 设备描述符的字节数大小,为0x12 04. BYTE bDes criptorType; / 描述符类型编号,为0x01 05. WORD wTotalLength; / 配置所返回的所有数量的大小 06. BYTE bNumInterface; / 此配置所支持的接口数量 07. BYTE bConfigurationVale; / Set_

34、Configuration命令需要的参数值 08. BYTE iConfiguration; / 描述该配置的字符串的索引值 09. BYTE bmAttribute; / 供电模式的选择 10. BYTE MaxPower; / 设备从总线提取的最大电流 11. 下面是一种硬盘的配置描述符实例,以供分析:表9、一种硬盘的配置描述符示例字段描述符值(十六进制)bLength0x09bDescriptorType0x02wTotalLength0x01FbNumInterface0x01bConfigurationValue0x01iConfiguration0x00bmAttributes0x

35、0CMaxPower0x32u 接口描述符配置描述符中包含了一个或多个接口描述符,这里的“接口”并不是指物理存在的接口,在这里把它称之为“功能”更易理解些,例如一个设备既有录音的功能又有扬声器的功能,则这个设备至少就有两个“接口”。如果一个配置描述符不止支持一个接口描述符,并且每个接口描述符都有一个或多个端点描述符,那么在响应USB主机的配置描述符命令时,USB设备的端点描述符总是紧跟着相关的接口描述符后面,作为配置描述符的一部分被返回。接口描述符不可直接用Set_Descriptor和Get_Descriptor来存取。如果一个接口仅使用端点0,则接口描述符以后就不再返回端点描述符,并且此接

36、口表现的是一个控制接口的特性,它使用与端点0相关联的默认管道进行数据传输。在这种情况下bNumberEndpoints域应被设置成0。接口描述符在说明端点个数并不把端点0计算在内。表10、USB接口描述符的结构偏移量域大小值描述0bLength1数字此表的字节数1bDescriptorType1常量接口描述表类 (此处应为0x04)2bInterfaceNumber1数字接口号,当前配置支持的接口数组索引(从零开始)3bAlternateSetting1数字可选设置的索引值4bNumEndPoints1数字此接口用的端点数量, 如果是零则说明此接口只用缺省控制管道5bInterfaceClas

37、s1类接口所属的类值:零值为将来的标准保留如果此域的值设为FFH,则此接口类由厂商说明。所有其他的值由USB说明保留6bInterfaceSubClass1子类子类码:这些值的定义视bInterfaceClass域而定。如果bInterfaceClass域的值为零则词语的值必须为零。bInterfaceClass域不为FFH则所有值由USB所保留7bInterfaceProtocol1协议协议码: bInterfaceClass和bInterfaceSubClass域的值而定,如果一个接口支持设备类相关的请求此域的值指出了设备类说明所定义的协议。8iInterface1索引描述此接口的字符串描

38、述表的索引值对于bInterfaceClass字段,表示接口所属的类别,USB协议根据功能将不同的接口划分成不的类,其具体含义如下表所示:表11、USB协议定义的接口类别(bInterfaceClass)值(十六进制)类别0x01音频类0x02CDC控制类0x03人机接口类(HID)0x05物理类0x06图像类0x07打印机类0x08大数据存储类0x09集线器类0x0ACDC数据类0x0B智能卡类0x0D安全类0xDC诊断设备类0xE0无线控制类0xFE特定应用类(包括红外的桥接器等)0xFF厂商定义的设备接口描述符在程序中的结构体表示如下:01. struct _INTERFACE_DEs

39、criptOR_STRUCT 02. 03. BYTE bLength; / 设备描述符的字节数大小,为0x12 04. BYTE bDes criptorType; / 描述符类型编号,为0x01 05. BYTE bInterfaceNunber; / 接口的编号 06. BYTE bAlternateSetting;/ 备用的接口描述符编号 07. BYTE bNumEndpoints; / 该接口使用端点数,不包括端点0 08. BYTE bInterfaceClass; / 接口类型 09. BYTE bInterfaceSubClass;/ 接口子类型 10. BYTE bInte

40、rfaceProtocol;/ 接口所遵循的协议 11. BYTE iInterface; / 描述该接口的字符串索引值 12. u 端点描述符端点是设备与主机之间进行数据传输的逻辑接口,除配置使用的端点0(控制端点,一般一个设备只有一个控制端点)为双向端口外,其它均为单向。端点描述符描述了数据的传输类型、传输方向、数据包大小和端点号(也可称为端点地址)等。除了描述符中描述的端点外,每个设备必须要有一个默认的控制型端点,地址为0,它的数据传输为双向,而且没有专门的描述符,只是在设备描述符中定义了它的最大包长度。主机通过此端点向设备发送命令,获得设备的各种描述符的信息,并通过它来配置设备。表12

41、、USB端点描述符的结构偏移量域大小值描述0bLength1数字此描述表的字节数长度1bDescriptorType1常量端点描述表类(此处应为0x05)2bEndpointAddress1端点此描述表所描述的端点的地址,方向:Bit3.0 : 端点号Bit6.4 : 保留位零Bit7 : 方向,如果控制端点则略 0 : 输出端点(主机到设备) 1 : 输入端点(设备到主机)3bmAttributes1位图此域的值描述的是在bConfigurationValue域所指的配置下端点的特性:Bit 1.0 : 传送类型 00 = 控制传送 01 = 同步传送 10 = 批传送 11 = 中断传送其

42、他所有位都保留4wMacPacketSize2数字当前配置下此端点能够接收或发送的最大数据包的大小.对于实际传输,此值用于为每帧的数据净荷预留时间。在实际运行时,管道可能不完全需要预留的带宽,实际带宽可由设备通过一种非USB定义的机制汇报给主机。对于中断传输,批量传输和控制传输,端点可能发送比之短的数据包。6bInterval1数字周期数据传输端点的时间间隙。 此域的值对于批传送的端点及控制传送的端点无意义。对于同步传送的端点此域必需为1,表示周期为1ms。对于中断传送的端点此域值的范围为1ms到255ms。端点描述符在程序中的结构体表示如下:01. struct _ENDPOIN_DEs c

43、riptOR_STRUCT 02. 03. BYTE bLength; / 设备描述符的字节数大小,为0x12 04. BYTE bDes criptorType; / 描述符类型编号,为0x01 05. BYTE bEndpointAddress; / 端点地址及输入输出属性 06. BYTE bmAttribute; / 端点的传输类型属性 07. WORD wMaxPacketSize; / 端点收、发的最大包的大小 08. BYTE bInterval; / 主机查询端点的时间间隔 09. 下表是一种鼠标的端点描述符的示例,该端点是一个中断端点:表13、一种鼠标的端点描述符示例域值(十

44、六进制)bLength0x07bDescriptorType0x05bEndpointAddress0x81bmAttributes0x03wMaxPacketSize0x04bInterVal0x0Au 字符串描述符字符串描述符是一种可选的USB标准描述符,描述了如制商、设备名称或序列号等信息。如果一个设备无字符串描述符,则其它描述符中与字符串有关的索引值都必须为0。字符串使用的是Unicode编码。主机请示得到某个字符串描述符时一般分成两步:首先主机向设备发出USB标准命令Get_Descriptor,其中所使用的字符串的索引值为0,设备返回一个字符串描述符,此描述符的结构如下:表14、U

45、SB字符串描述符(响应主机请求时返回的表示语言ID的字符串描述符)偏移量域大小值描述0bLength1N+2此描述表的字节数1bDescriptorType1常量字符串描述表类型(此处应为0x03)2Wlangid02数字语言标识(LANGID)码0NWlangidx2数字语言标识(LANGID)码X该字符串描述符双字节的语言ID的数组,wLANGID0wLANGIDx指明了设备支持的语言,具体含义可查看USB_LANGIDs.pdf。主机根据自己需要的语言,再次向设备发出USB标准命令Get_Descriptor,指明所要求得到的字符串的索引值和语言。这次设备所返回的是Unicode编号的字

46、符串描述符,其结构如下:表15、Unicode字符串描述符(响应主机请求时真正表示字符串编码的字符串描述符)偏移量域大小值描述0bLength1数字此描述表的字节数(bString域的数值N+2)1bDescriptorType1常量字串描述表类型(此处应为0x03)2bStringN数字UNICODE编码的字串bString域为设备实际返回的以UNICODE编码的字符串流,我们在编写设备端硬件驱动的时候需要将字符串转换为UNICODE编码,您可以通过一些UNICODE转换工具进行转换。字符描述符在程序中的结构体表示如下:01. struct _STRING_DEs criptOR_STRUCT 02. 03. BYTE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论