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

付费下载

下载本文档

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

文档简介

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

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

3、C上开发 USB 的驱动程序。希望通过本笔记的学习,能够帮助大家尽快的学会如何进行目录基于 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.

4、0 和 USB3.0。由于目前市面上的 MCU大多只支持 USB2.0,所以本文主要介绍 USB2.0的特性。USB是主从模式的总线结构,设备与设备之间,主机与主机之间是不能互连的,为了解决这个 问题,扩大 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 spee

5、d) 。USB的连接模型USB是一种主从结构的总线, 主机叫做 host, 从机叫做 device( 也就是我们平时讲的设备 ) 。一个 完整的 USB系统主要由三个部分组成 :USB的连接器USB的连接是指 USB设备与主机之间进行连接和通信的操作,主要包括以下几个方面:- 总线的拓扑结构 :USB 设备与主机之间的各种连接方式- 内部层次关系 : 根据性能叠置, USB的任务被分配到系统的每一个层次- 数据流模式 : 描述了数据在提供中通过 USB从发起端到接收端的流动方式- USB的调度 : USB 提供了一个共享的连接,对可疑使用的连接进行调度以支持同步数据传输USB 的主机在任何 U

6、SB系统中,只有一个 USB的主机, USB和主机系统的接口叫做主机控制器。 主机 控制器由硬件,固件和软件综合实现。USB的设备USB的设备包含两大类 :- 网络集线设备 : 为 USB系统提供更多的连接点- 功能设备 : 为 USB系统提供具体功能USB的数据交换只能发生在主机和从机之间,主机和主机,从机和从机之间是不能进行数据交 换的。为了再物理上区分主机和从机,使用不同的插头和插座,这样我们就能轻松的通过连接线来 判断出 USB系统中,谁处于主机模式,谁处于从机模式。最早的 USB标准中 ,USB接头只有 4 根线, USB2.0之后,定义了 MiniUSB 接口,增加了一个 ID 线

7、,主要用在 OTG的设备上用来标识本设备 ID。标准的 USB接口有 A 型和 B 型,每一个类型又分为 插头和插座。如下图所示 :USB系统中,所有的数据传输都是由主机主动发起的,从机值是被动地负责应答。在USB OTG应用中,一个设备可以在从机和主机之间切换,从而实现了设备间的连接,大大地增加了USB的使用范围。但即使 OTG的应用也还是属于主从模式,两个设备之间一个作为主机,一个作为从机。USB的拓扑结构USB的拓扑结构为金字塔型。 USB系统由一个 USB主控制器出发,下面接 USB的集线器, USB集 线器将一个 USB接口扩展为多个 USB接口,多个 USB接口又可通过集线器扩展更

8、多的接口。USB协议中对集线器的层数有限制, USB1.1规定 USB的集线器层数最多是 4 层, USB2.0规定最多为 6 层。图 1. USB 的拓扑结构USB主控制器通过 7 位地址对挂接在总线上的设备进行寻址,理论上一个主控制器上最多可以 接 128 个设备,但实际应用中接不了这么多。在 PC机上,一般有一个 ( 或多个 )USB集线器,它叫根集线器,直接连接在USB的主控制器上。打开电脑的设备管理器,我们可以看到USB的主控制器和根集线器。如下图所示图 2. PC 机上的 USB控制器和集线器USB的电气特性标准的 USB 使用 4根线: 5V 电源线 (Vbus),差分数据线负

9、(D-) ,差分数据线正 (D+) ,地 (Gnd)。 在 USB OTG 中,又增加了一种 mini 接口,使用的是 5 根线,比标准的 USB 多了一根身份识别 (ID) 线。如下图所示:USB使用的是差分传输模式,有两根数据先,分别是D-和 D+。在 USB低速和全速模式中,采用的是电压传输模式,在高速模式下,则是电流传输模式。为了避免长时间出现全 0或全 1 的信号,在发送数据前,要经过位填充处理。然后将数据串行 化,发送到数据总线上,由两根数据线的差分值来表示0 和 1。在接收端恰恰相反,接收端采样数据总线,将数据并行话,然后去白化处理(即去掉填充位) , 在解析数据。在 USB协议

10、中规定, 设备可以通过 USB总线供电, 在未配置之前, 设备可以从 VBUS上获取 100mA 的电流,配置之后,最多可以从VBUS上获取 500mA的电流。关于 USB的的电气特性有如下几点需要注意 :- 电缆中包括 VBUS 、 GND 二条线,向设备提供电源 ;- VBUS 使用 +5V 电源。 USB 对电缆长度要求很宽,最长可为几米;- 为了保证足够的输入电压和终端阻抗,重要的终端设备应位于电缆的尾部;- 低速模式需要更少的 EMI 保护;- 两种模式可在用同一 USB 总线传输的情况下自动地动态切换。- 过多的低速模式的使用将降低总线的利用率;USB总线协议USB总线属于轮询方式

11、的总线,始终由主机控制端口初始化所有的数据传输。每一个 USB总线执行动作最多传送三个数据包。 按照传输前制定好的原则, 在每次传送开始时, 主机控制器发送一个描述传输操作的种类、方向, USB 设备地址和终端号的 USB 数据包,这个数据 包通常称为标志包 (token packet) 。USB 设备从数据包中取出属于自己的数据。数据传输方向不是从主机到设备就是从设备到主 机。在传输开始时,由标志包来标识数据的传输方向,然后发送端开始发送包含信息的数据包或表 明没有数据传送。接收端也要相应发送一个握手的数据包表明是否传送成功。发送端和接收端之间 的 USB 数据传输,在主机和设备的端口之间可

12、视为一个管道(PIPE) 。USB存在两种类型的管道:- 数据流管道 数据流管道的数据没有 USB协议规定的结构。 管道与数据宽、 传输服务类型、 端口特性 (如缓冲区大小)有关。数据流管道在USB设备初始化设置完成就存在了。- 消息管道 :消息通道是 USB协议中特殊的一个管道,也成为控制管道。设备上电启动后,该管道 就存在,为设备的设置、查询状态和输入控制信息提供了一个入口。USB数据流分类在 USB主机和设备通道之间的数据传输,我们叫做数据流,USB的结构包含四个基本的数据流传输类型 :- 控制数据传送 在设备连接时用来对设备进行设置,还可对指定设备进行控制,如通道控制;- 批量数据传送

13、 大批量产生并使用的数据,在传输约束下,具有很广的动态范围;通常用在打印机和扫描仪 等有大量数据需求的传输。- 中断数据的传送 用来描述或匹配人的感觉或对特征反应的回馈;中断数据传输是针对少量数据的传输需求 , 数据延迟时间也是有限范围内的。- 同步数据的传送由预先确定的传送延迟来填满预定的 USB 带宽;同步数据的建立、 传输和使用时时连续且实 时的,同步数据时以稳定的速率发送和接收实时信息,同步数据要使接受者与发送者保持相同的时 间安排,出了传输速率,同步数据对延迟非常敏感。对于任何指定的 USB设备而言,一个通道只能支持上述一种方式的数据流传输。USB的带宽USB的带宽分配给各个通道 ,

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

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

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

17、耗不超过280UA。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值

18、根据不同的命令,含义也不同4wIndex2索引或 偏移根据不同的命令,含义也不同,主要用于传送索引或偏移6wLength2如有数据传送阶段,此为数据字节数表列出了 USB 的 11 种标准命令表 2、 USB的 11 种标准命令命令bmRequestTypebRequestwVaulewIndexwLengthDataClear_Feature0000 0000B0000 0001B0000 0010BCLEAR_FEATURE特性选择符零 接口号 端点号零无Get Configuration1000 0000BGET CONFIGURATION零零-配置值Get_Descriptor1000

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

20、值 (高字节 为 0,低 字节表 示要设 置的配 置值)零零无Set Descriptor0000 0000BSET DESCRIPTOR描述表零或语言描述表长描述表种类(高 字节,见 表 5) 和索 引(低字 节)标志Set_Feature0000 0000B0000 0001B0000 0010BSET_FEATURE特性选 择符(1 表 示设备, 0 表示端 点)零, 接口号 , 端点号零无Set_Interface0000 0001BSET_INTERFACE可选设 置接口号零无Synch Frame1000 0010 BSYNCH FRAM零端点号二帧号其中 bRequest 为命令

21、编码值,含义见表 3:表 3 、 USB 标准命令的编码值bRequestValueGET STATUS0CLEAR FEATURE1RESERVED2SET FEATURE3RESERVED4SET ADDRESS5GET DESCRIPTOR6SET DESCRIPTOR7GET CONFIGURATION8SET CONFIGURATION9GET INTERFACE10SET INTERFACE11SYNCH FRAME12这里就不详细介绍这 11个命令了,如果有感兴趣的同学请自己去看 USB2.0 的协议。控制传输 是 USB 的重点 , 而控制传输就是依靠这 11 个命令来完成的,

22、 所以这 11 个命令搞明白了, USB 就算 是入门了。USB的描述符USB协议为 USB设备定义了一套描述设备功能和属性的有固定结构的描述符,包括标准的描述 符即设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符,还有百标准描述符,如 类描述符。 USB设备通过这些描述符向 USB主机汇报设备的各种各样属性,主机通过对这些描述符 的访问对设备进行类型识别、配置并为其提供相应的客户端驱动程序。USB设备通过描述符反映自己的设备特性。USB描述符是由特定格式排列的一组数据结构组成。在 USB设备枚举过程中, 主机端的协义软件需要解析从 USB设备读取的所有描述符信息。 在 USB 主

23、向设备发送读取描述符的请求后, USB设备将所有的描述符以连续的数据流方式传输给USB主机。主机从第一个读到的字符开始,根据双方规定好的数据格式,顺序地解析读到的数据流。USB描述符包含标准描述符、类描述符和厂商特定描述种形式。任何一种设备必须USB标准描述符(队字符串描述符可选外) 。在 USB1.X 中,规定了 5 种标准描述符:设备描述符( Device Descriptor) 、配置描述符 ( Configuration Descriptor)、接口描述符( Interface Descriptor)、端点描述符( EndpointDescriptor )和字符串描述符( String

24、 Descriptor)。每个 USB设备只有一个设备描述符,而一个设备中可包含一个或多个配置描述符,即USB设备可以有多种配置。设备的每一个配置中又可以包含一个或多个接口描述符,即USB设备可以支持多种功能(接口) ,接口的特性通过描述符提供。在 USB主机访问 USB 设备的描述符时, USB设备依照设备描述符、配置描述符、接口描述符、 端点描述符、字符串描述符顺序将所有描述符传给主机。一设备至少要包含设备描述符、配置描述 符和接口描述符,如果 USB设备没有端点描述符,则它仅仅用默认管道与主机进行数据传输。设备描述符设备描述符给出了 USB设备的一般信息,包括对设备及在设备配置中起全程作

25、用的信息,包括 制造商标识号 ID 、产品序列号、所属设备类号、默认端点的最大包长度和配置描述符的个数等。一 个 USB设备必须有且仅有一个设备描述符。设备描述符是设备连接到总线上时USB主机所读取的第一个描述符,它包含了 14 个字段,结构如下:表 4、 USB 设备描述符的结构偏移量域大小值描述0bLength1数字此描述表的字节数1bDescriptorType1常量描述符的类型 ( 此处应为 0x01, 即设备描述符 )2BcdUSB2BCD码此设备与描述表兼容的 USB设备说明版本号 (BCD 码)4bDeviceClass1类设备类码 :如果此域的值为 0 则一个设置下每个接口指出

26、它自己的类, 各个接口各自独立工作。如果此域的值出于 1FEH之间,则设备在不同的接口上支持 不同的类。 并这些接口可能不能独立工作。 此值指出了这些 接口集体的类定义。如果此域设置 FFH,则此设备的类由厂商定义。5bDeviceSubClass1子类子类挖码这些码值的具体含义根据 bDeviceClass 域来看。 如 bDeviceClass 域为零,此域也须为零 如 bDeviceClass 域为 FFH,此域的所有值保留6bDevicePortocol1协议协议码这些码得值是 bDeviDDDDDDDDDDDDDDDDDDDDDDceC和la bDeviceSubClass 的值而定

27、。如果设备支持设备类相关的协议,此码标志了设备类的值。如果此域的值为零, 则此设备不支持设备类相关的协议, 然 而,肯它的接口支持设备类相关的协议。如果此域的值为 FFH,此设备使用厂商定义的协议。7bMaxPacketSize01数字端点 0的最大包大小 (仅8,16,32,64 为合法值 )8idVendor2ID厂商标志 ( 由 USB-IF 组织赋值 )10idProduct2ID产品标志 ( 由厂商赋值 )12bcdDevice2BCD码设备发行码 (BCD 码 )14iManufacture1索引描述厂商信息的字符串描述的索引值15iProduct1索引描述产品信息的字符串描述符的

28、索引值16iSerialNumber1索引描述设备序列号信息的字符串描述符的索引值17bNumConfigurations1数字可能的配置描述符数目其 中 bDescriptorType 为 描 述 符 的 类 型 , 其 含 义 可 查 下 表 ( 此 表 也 适 用 于 标 准 命 令Get Descriptor 中 wValue 域高字节的取值含义)表 5、 USB描述符的类型值类型描述符描述符值标志描述符设备描述符 (Device Descriptor)0x01配置描述符 (Configuration Descriptor)0x02字符串描述符 (String Descriptor)0

29、x03接口描述符 (Interface Descriptor)0x04端点描述符 (EndPort Descriptor)0x05类描述符集线器类描述符 (Hub Descriptor)0x29人机接口类描述符 (HID)0x21厂商定义的描述符0Xff设备类代码 bDeviceClass 可查下表 :表 5、 USB设备的类别 (bDeviceClass)值(十进制)值( 十六进制 )说明00x00接口描述符中提供类的值20x02通信类90x09集线器类2200xDC用于诊断用途的设备类2240xE0无线通信设备类2550xFF厂商定义的设备类1.设备描述符在程序中的结构体表示如下struc

30、t _DEVICE_DEs criptOR_STRUCT2.3.BYTE bLength;4.BYTE bDes criptorType;5.WORD bcdUSB;/ 设备描述符的字节数大小,为 0x12/ 描述符类型编号,为 0x01/ USB 版本号6.BYTE bDeviceClass;7./ USB 分配的设备类代码,/ 0xff 为厂商自定义类0x010xfe 为标准设备类,8.9.BYTE bDeviceSubClass;/ 0x00 不是在设备描述符中定义的,如 HID/ usb 分配的子类代码,同上,值由 USB 规定和分配的10.BYTE bDeviceProtocl;/

31、USB 分配的设备协议代码,同上11.BYTE bMaxPacketSize0;/端点 0 的最大包的大小12.WORD idVendor;/厂商编号13.WORD idProduct;/产品编号14.WORD bcdDevice;/设备出厂编号15.BYTE iManufacturer;/描述厂商字符串的索引16.BYTE iProduct;/描述产品字符串的索引17.BYTE iSerialNumber;/描述设备序列号字符串的索引18.BYTE bNumConfiguration;/可能的配置数量19.以下是一种鼠标的设备描述符示例以供大家分析:表 7 、一种鼠标的设备描述符示例字段描述

32、符值 ( 十六进制 )bLength0x12bDecriptorType0x01BcdUSB0x0110bDeviceClass0x00bDeviceSubClass0x00bDevicePortocol0x00BMaxPacketSize00x08idVendor0x045E(Microsoft Corporation)idProduct0x0047bcdDevice0x300iManufacture0x01iProduct0x03iSerialNumber0x00bNumConfiguration0x01配置描述符 配置描述符中包括了描述符的长度(属于此描述符的所有接口描述符和端点描述符的

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

34、alue1数字在 SetConfiguration() 请求中用作参数来选定此配置6iConfiguration1索引描述此配置的字符串描述表索引7bmAttributes1位图配置特性:D7: 保留( 设为 1)D6: 自给电源D5: 远程唤醒D4.0: 保留 ( 设为 1) 一个既用总线电源又有自给电源的设备会在MaxPower域指出需要从总线取电量。并设置 D6 为 1。运行使其的实 际电源可由 GetStatus(DEVICE) 请求得到。8MaxPower1mA在此配置下的总线电源耗费量,以2mA为一个单位配置描述符在程序中的结构体表示如下01.struct _CONFIGURATI

35、ON_DEs criptOR_STRUCT02.03.BYTE bLength;/ 设备描述符的字节数大小,为 0x1204.BYTE bDes criptorType;/描述符类型编号,为 0x0105.WORD wTotalLength;/配置所返回的所有数量的大小06.BYTE bNumInterface;/此配置所支持的接口数量07.BYTE bConfigurationVale;/ Set_Configuration 命令需要的参数值08.BYTE iConfiguration;/ 描述该配置的字符串的索引值09.BYTE bmAttribute;/供电模式的选择10.BYTE Ma

36、xPower;/设备从总线提取的最大电流11.面是一种硬盘的配置描述符实例,以供分析表 9 、一种硬盘的配置描述符示例字段描述符值 ( 十六进制 )bLength0x09bDescriptorType0x02wTotalLength0x01FbNumInterface0x01bConfigurationValue0x01iConfiguration0x00bmAttributes0x0CMaxPower0x32接口描述符 配置描述符中包含了一个或多个接口描述符,这里的“接口”并不是指物理存在的接口,在这 里把它称之为“功能”更易理解些,例如一个设备既有录音的功能又有扬声器的功能,则这个设备 至

37、少就有两个“接口” 。如果一个配置描述符不止支持一个接口描述符,并且每个接口描述符都有一个或多个端点描述 符,那么在响应 USB主机的配置描述符命令时, USB设备的端点描述符总是紧跟着相关的接口描述 符后面,作为配置描述符的一部分被返回。接口描述符不 可直接 用 Set_Descriptor 和 Get_Descriptor 来存取。如果一个接口仅使用端点 0,则接口描述符以后就不再返回端点描述符,并且此接口表现的是 一个控制 接口的特性,它使用与 端点 0 相关联的默认 管道进行数据 传输。在 这种情况下 bNumberEndpoints 域应被设置成 0。接口描述符在说明端点个数并不把端

38、点0 计算在内。表 10、 USB接口描述符的结构偏移量域大小值描述0bLength1数字此表的字节数1bDescriptorType1常量接口描述表类 ( 此处应为 0x04)2bInterfaceNumber1数字接口号,当前配置支持的接口数组索引 ( 从零开始 )3bAlternateSetting1数字可选设置的索引值4bNumEndPoints1数字此接口用的端点数量 , 如果是零则说明此接口只用缺省控制管道5bInterfaceClass1类接口所属的类值:零值为将来的标准保留如果此域的值设为 FFH ,则此接口类由厂商说明。 所有其他的值由 USB 说明保留6bInterface

39、SubClass1子类子类码:这些值的定义视 bInterfaceClass 域而定。如果 bInterfaceClass 域的值为零则词语的值必须为零。bInterfaceClass 域不为 FFH 则所有值由 USB 所保留7bInterfaceProtocol1协议协议码 : bInterfaceClass和 bInterfaceSubClass 域的值而定,如果一个接口支持设备类相关的请求此域的值指出了设备类说明 所定义的协议。8iInterface1索引描述此接口的字符串描述表的索引值对于 bInterfaceClass 字段,表示接口所属的类别, USB协议根据功能将不同的接口划分

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

41、大小,为 0x1204.BYTE bDes criptorType;/描述符类型编号,为 0x0105.BYTE bInterfaceNunber;/接口的编号06.BYTE bAlternateSetting;/备用的接口描述符编号07.BYTE bNumEndpoints;/该接口使用端点数,不包括端点 008.BYTE bInterfaceClass;/接口类型09.BYTE bInterfaceSubClass;/接口子类型10.BYTE bInterfaceProtocol;/接口所遵循的协议11.BYTE iInterface;/描述该接口的字符串索引值12. 端点描述符端点是设备

42、与主机之间进行数据传输的逻辑接口,除配置使用的端点0(控制端点,一般一个设备只有一个控制端点)为双向端口外,其它均为单向。端点描述符描述了数据的传输类型、传输 方向、数据包大小和端点号(也可称为端点地址)等。除了描述符中描述的端点外,每个设备必须要有一个默认的控制型端点,地址为0,它的数据传输为双向,而且没有专门的描述符,只是在设备描述符中定义了它的最大包长度。主机通过此端 点向设备发送命令,获得设备的各种描述符的信息,并通过它来配置设备。表 12、 USB端点描述符的结构偏移量域大小值描述0bLength1数字此描述表的字节数长度1bDescriptorType1常量端点描述表类 ( 此处应

43、为 0x05)2bEndpointAddress1端点此描述表所描述的端点的地址,方向:Bit3.0 : 端点号Bit6.4 : 保留位零Bit7 : 方向,如果控制端点则略0 :输出端点 ( 主机到设备 )1 :输入端点 ( 设备到主机 )3bmAttributes1位图此域的值描述的是在 bConfigurationValue 域所指的配 置下端点的特性 :Bit 1.0 :传送类型00 =控制传送01 =同步传送10 =批传送11 =中断传送其他所有位都保留4wMacPacketSize2数字当前配置下此端点能够接收或发送的最大数据包的大小 . 对于实际传输, 此值用于为每帧的数据净荷预

44、留时间。 在实际运行时, 管道可能不完全需要预留的带宽, 实际带宽 可由设备通过一种非 USB定义的机制汇报给主机。 对于中 断传输, 批量传输和控制传输, 端点可能发送比之短的数 据包。6bInterval1数字周期数据传输端点的时间间隙。 此域的值对于批传送的端点及控制传送的端点无意义。 对 于同步传送的端点此域必需为 1,表示周期为 1ms。对于 中断传送的端点此域值的范围为 1ms 到 255ms。端点描述符在程序中的结构体表示如下01. struct _ENDPOIN_DEs criptOR_STRUCT02. 03.BYTE bLength;/ 设备描述符的字节数大小,为0x120

45、4.BYTE bDes criptorType;/ 描述符类型编号,为 0x0105.BYTE bEndpointAddress;/ 端点地址及输入输出属性06.BYTE bmAttribute;/ 端点的传输类型属性07.WORD wMaxPacketSize;/ 端点收、发的最大包的大小08.BYTE bInterval;/ 主机查询端点的时间间隔09. 表是一种鼠标的端点描述符的示例,该端点是一个中断端点:表 13 、一种鼠标的端点描述符示例域值(十六进制 )bLength0x07bDescriptorType0x05bEndpointAddress0x81bmAttributes0x0

46、3wMaxPacketSize0x04bInterVal0x0A字符串描述符字符串描述符是一种可选的 USB标准描述符,描述了如制商、设备名称或序列号等信息。如果 一个设备无字符串描述符,则其它描述符中与字符串有关的索引值都必须为0。字符串使用的是Unicode 编码。主机请示得到某个字符串描述符时一般分成两步:首先主机向设备发出 USB 标准命令 Get_Descriptor ,其中所使用的字符串的索引值为0,设备返回一个字符串描述符,此描述符的结构如下:表 14、 USB字符串描述符 (响应主机请求时返回的表示语言ID 的字符串描述符 )偏移量域大小值描述0bLength1N+2此描述表的

47、字节数1bDescriptorType1常量字符串描述表类型 ( 此处应为 0x03)2Wlangid02数字语言标识 (LANGID)码 0NWlangidx2数字语言标识 (LANGID)码 X该字符串描述符双字节的语言 ID 的数组, wLANGID0wLANGIDx 指明了设备支持的语言,具 体含义可查看 USB_LANGIDs.pdf。主机根据自己需要的语言, 再次向设备发出 USB标准命令 Get_Descriptor ,指明所要求得到的 字符串的索引值和语言。这次设备所返回的是 Unicode 编号的字符串描述符,其结构如下:表 15、Unicode 字符串描述符 ( 响应主机请求时真正表示字符串编码的字符串描述符)偏移量域大小值描述0bLength1数字此描述表的字节数 (bString 域的数值 N+2)1bDescriptorType1常量字串描述表类型 ( 此处应为 0x03)2bStringN数字UNICODE编码的字串bString 域为设备实际返回的以 UNICODE编码的字符串流,我们在编写设备端硬件驱动的时候 需要将字符串转换为 UNICODE编码,您可以通过一些 UNICODE转换工具进行转换。字符描述符在程序中的结构体表示如下01. struct _STRING_DEs criptOR_STRUCT02. 03

温馨提示

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

评论

0/150

提交评论