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

下载本文档

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

文档简介

1、基于LM3Sxxx的USB开发笔记- Triton.zhang2011-08-30【摘要】TI 收购LM后继承了 LM系列的cortex-M3的产品,从而弥补了了 TI在MCI市场一个空白。 从产品规划来讲,LM的产品还是不错的,特别是带CAN USB和集成 MAC+PH的 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。由于目前市面上的 MCI大多只支持 USB2.0,所以本文主要介绍 USB2.0的特性。US

4、B是主从模式的总线结构,设备与设备之间,主机与主机之间是不能互连的,为了解决这个 问题,扩大 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(也就是我们平时讲的设备)。一个完整

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

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

7、Series A plugs are always oriented upstream towards the Host Systemf,AM Plugs(Ft am rheUSB Device)A型插头 Series B plugs are always oriented down stream towards theI7SB Device5型插头NBH Plugs (From rheHost Sysrejn)riAM RecepfiidesOiapiit fi om the LSB Host or Hub)A型插座B* ReceptaclesUpsn earn Inpur to theE7

8、S丑 Device or Hub)B型插座USB系统中,所有的数据传输都是由主机主动发起的,从机值是被动地负责应答。在USB OTG应用中,一个设备可以在从机和主机之间切换,从而实现了设备间的连接,大大地增加了USB的使用范围。但即使 OTG的应用也还是属于主从模式,两个设备之间一个作为主机,一个作为从机。USB勺拓扑结构USB的拓扑结构为金字塔型。 USB系统由一个USB主控制器出发,下面接 USB的集线器,USB集 线器将一个USB接 口扩展为多个 USB接口,多个USB接口又可通过集线器扩展更多的接口。 USB协 议中对集线器的层数有限制, USB1.1规定USB的集线器层数最多是 4层

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

10、SB多了一根身份识别(ID) 线。如下图所示:vnirsD+ n- GNDUSB使用的是差分传输模式,有两根数据先,分别是D-和D+。在USB低速和全速模式中,采用的是电压传输模式,在高速模式下,则是电流传输模式。为了避免长时间出现全 0或全1的信号,在发送数据前,要经过位填充处理。然后将数据串行 化,发送到数据总线上,由两根数据线的差分值来表示0和1。在接收端恰恰相反,接收端采样数据总线,将数据并行话,然后去白化处理(即去掉填充位),在解析数据。在USB协议中规定,设备可以通过 USB总线供电,在未配置之前,设备可以从 VBUS上获取100mA 的电流,配置之后,最多可以从VBUS上获取50

11、0mA的电流。关于USB的的电气特性有如下几点需要注意:-电缆中包括VBUS、GND二条线,向设备提供电源;-VBUS使用+5V电源。USB对电缆长度要求很宽,最长可为几米;-为了保证足够的输入电压和终端阻抗,重要的终端设备应位于电缆的尾部;-低速模式需要更少的 EMI保护;-两种模式可在用同一 USB总线传输的情况下自动地动态切换。-过多的低速模式的使用将降低总线的利用率;USB总线协议USB总线属于轮询方式的总线,始终由主机控制端口初始化所有的数据传输。每一个USB总线执行动作最多传送三个数据包。 按照传输前制定好的原则,在每次传送开始时, 主机控制器发送一个描述传输操作的种类、方向,US

12、B设备地址和终端号的 USB数据包,这个数据包通常称为标志包 (token packet)。USB设备从数据包中取出属于自己的数据。数据传输方向不是从主机到设备就是从设备到主 机。在传输开始时,由标志包来标识数据的传输方向,然后发送端开始发送包含信息的数据包或表 明没有数据传送。接收端也要相应发送一个握手的数据包表明是否传送成功。发送端和接收端之间 的USB数据传输,在主机和设备的端口之间可视为一个管道 (PIPE)。USB存在两种类型的管道:- 数据流管道数据流管道的数据没有 USE协议规定的结构。管道与数据宽、传输服务类型、端口特性 (如缓冲区大小)有关。数据流管道在USB设备初始化设置完

13、成就存在了。- 消息管道 :消息通道是USB协议中特殊的一个管道,也成为控制管道。设备上电启动后,该管道 就存在,为设备的设置、查询状态和输入控制信息提供了一个入口。USB数据流分类在USB主机和设备通道之间的数据传输,我们叫做数据流,USB的结构包含四个基本的数据流传输类型 :- 控制数据传送 在设备连接时用来对设备进行设置,还可对指定设备进行控制,如通道控制;- 批量数据传送 大批量产生并使用的数据,在传输约束下,具有很广的动态范围;通常用在打印机和扫描仪等有大量数据需求的传输。- 中断数据的传送用来描述或匹配人的感觉或对特征反应的回馈;中断数据传输是针对少量数据的传输需求,数据延迟时间也

14、是有限范围内的。- 同步数据的传送由预先确定的传送延迟来填满预定的 USB 带宽;同步数据的建立、 传输和使用时时连续且实 时的,同步数据时以稳定的速率发送和接收实时信息,同步数据要使接受者与发送者保持相同的时 间安排,出了传输速率,同步数据对延迟非常敏感。对于任何指定的USB设备而言,一个通道只能支持上述一种方式的数据流传输。USB的带宽USB的带宽分配给各个通道,当一个通道建立后,USB主机就分配给它一定的带宽 ,USB设备需要 提供一些数据缓冲区,若 USB提供了更多的带宽,则需要更多的缓冲区。USB的体系要保证缓冲引导的硬件的延迟限定在几毫秒内。USB设备的插入检测机制当USB设备插上

15、主机时,主机是如何检测到设备插入的呢?首先,在每个 USB的集线器下游端口 D+和D-上,分别接了一个 15K欧姆的下拉电阻到地。当 集线器的端口悬空时,D+和 D-被这两个下拉电阻拉到地,同为低电平。在低速USB的设备上,DD-被接上1.5K欧姆的上拉电阻,在全速和高速USB设备上,D+被接上一个 1.5K 欧姆的上拉电阻。当设备插入集线器是,由于 1.5k 欧姆的上拉和下拉电阻分压,就将 D+ 或D-其中的一条线拉高了。集线器检测到这个状态后,就上报USB主控制器,检测到设备的插入。通过对D+,D-电平的识别可以判断出是低速设备还是高速或全速的设备。高速和全速的设备需要主机和从机进一步数据

16、交换后才能确定。USB的识别过程当USB主机检测到USB设备插入后,主机就通过一系列的动作来对设备进行枚举配置(配置是属于枚举的一个态,态表示暂时的状态),这些态如下:-接入态(Attached )设备接入主机后,主机通过检测信号线上的电平变化来发现设备的接入;-供电态(Powered)就是给设备供电,分为设备接入时的默认供电值,配置阶段后的供电值(按数据中要求的最 大值,可通过编程设置)-缺省态(Default )USB在被配置之前,通过缺省地址0与主机进行通信-地址态(Address)经过了配置,USB设备被复位后,就可以按主机分配给它的唯一地址来与主机通信,这种状态就是地址态;-配置态(

17、Con figured )通过各种标准的USB青求命令来获取设备的各种信息,并对设备的某此信息进行改变或设置。-挂起态(Suspended)总线供电设备在3ms内没有总线操作,即 USB总线处于空闲状态的话,该设备就要自动进入挂起状态,在进入挂起状态后,总的电流功耗不超过280UAUSB的请求命令控制传输过程中,初始化设置USB的设备时会涉及到 USB的请求命令。标准的USB设备请求命令总共有11个,每个命令由8个字节(5个字段)组成,具有相同的数据结构。数据结构如下图 所示:表1、 USB命令的结构偏移量域长度(半字)值描述0bmRequestType1位图请求特征:D7 :传输方向0 =主

18、机至设备1 =设备至主机D6.5:种类0 =标准1 =类2 =厂商3 =保留D4.0 : 接收者0=设备1 =接口2 =端点3 =其他4.31保留1bRequest1值命令类型编码值(见表3)2wValue2值根据不同的命令,含义也不同4wlndex2索引或偏移根据不同的命令,含义也不同,主 要用于传送索引或偏移6wLength2如有数据传送阶段,此为数据字节 数F表列出了 USB的11种标准命令表2、USB的11种标准命令命令bmRequestTypebRequestwVaulewindexwLe ngthDataClear_Feature0000 0000B0000 0001B0000 0

19、010BCLEAR_FEATURE特性选 择符零接口号端点号零无Get_Configuration1000 0000BGET_CONFIGURATION零零-配置值Get_Descriptor1000 0000BGET_DESCRIPTOR扌苗述表 种类(高 字节,见 表5)和索 引(低字节)零或语言标志扌苗述表长扌苗述表Get_Interface1000 0001BGET_INTERFACE零接口号-可选设置Get_Status1000 0000B1000 0001B1000 0010BGET_STATUS零零(返回 设备状态)接口号 (对像是 接口时)端点号 (对象是 端点时)设备, 接口

20、, 或端点 状态Set_Address0000 0000BSET_ADDRESS设备地址零零无Set_Configuration0000 0000BSET_CONFIGURATION配置值 (高字节为0,低 字节表 示要设 置的配 置值)零零无Set Descriptor0000 0000BSET DESCRIPTOR扌苗述表零或语言扌苗述表长扌苗述表种类(高 字节,见 表5)和索 引(低字节)标志Set_Feature0000 0000B0000 0001B0000 0010BSET_FEATURE特性选 择符(1表 示设备, 0表示端点)零,接口号,端点号零无Set_lnterface00

21、00 0001BSET_INTERFACE可选设置接口号零无Synch_Frame1000 0010 BSYNCH_FRAM零端点号-二二帧号其中bRequest为命令编码值,含义见表3:表3、USB标准命令的编码值bRequestValueGET STATUS0CLEAR FEATURE1RESERVED2SET FEATURE3RESERVED4SET ADDRESS5GET DESCRIPTOR6SET DESCRIPTOR7GET CONFIGURATION8SET CONFIGURATION9GET INTERFACE10SET INTERFACE11SYNCH FRAME12这里就

22、不详细介绍这 11个命令了,如果有感兴趣的同学请自己去看USB2.0的协议。控制传输是USB的重点,而控制传输就是依靠这 11个命令来完成的,所以这11个命令搞明白了, USB就算 是入门了。USB的描述符USB协议为USB设备定义了一套描述设备功能和属性的有固定结构的描述符,包括标准的描述 符即设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符,还有百标准描述符,女口 类描述符。USB设备通过这些描述符向USB主机汇报设备的各种各样属性,主机通过对这些描述符的访问对设备进行类型识别、配置并为其提供相应的客户端驱动程序。USB设备通过描述符反映自己的设备特性。USB描述符是由特定格式

23、排列的一组数据结构组成。在USB设备枚举过程中,主机端的协义软件需要解析从USB设备读取的所有描述符信息。在USB主向设备发送读取描述符的请求后,USB设备将所有的描述符以连续的数据流方式传输给USB主机。主机从第一个读到的字符开始,根据双方规定好的数据格式,顺序地解析读到的数据流。USB描述符包含标准描述符、类描述符和厂商特定描述3种形式。任何一种设备必须USB标准描述符(队字符串描述符可选外)。在USB1.X中,规定了 5种标准描述符:设备描述符( Device Descriptor)、配置描述符(Con figurati on Descriptor)、接口描述符( In terface

24、Descriptor)、端点描述符( En dpo intDescriptor )和字符串描述符(String Descriptor )。每个USB设备只有一个设备描述符,而一个设备中可包含一个或多个配置描述符,即USB设备可以有多种配置。设备的每一个配置中又可以包含一个或多个接口描述符,即USB设备可以支持多种功能(接口),接口的特性通过描述符提供。在USB主机访问USB设备的描述符时,USB设备依照设备描述符、配置描述符、接口描述符、 端点描述符、字符串描述符顺序将所有描述符传给主机。一设备至少要包含设备描述符、配置描述 符和接口描述符,如果 USB设备没有端点描述符,则它仅仅用默认管道与

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

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

27、viceSubClass 的值而定。如果设备支持设备类相关的协议,此码标志了设备类的值。如果此域的值为零,则此设备不支持设备类相关的协议,然而,肯它的接口支持设备类相关的协议。如果此域的值为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)0x03接口描述符(Interface Descriptor)0x04端点描

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

30、YTE bDes criptorType;5.WORD bcdUSB;/设备描述符的字节数大小,为0x12/描述符类型编号,为0x01/ USB版本号6.BYTE bDeviceClass;/ USB分配的设备类代码,/ Oxff为厂商自定义类0x010xfe为标准设备类,9.BYTE bDeviceSubClass;/ 0x00不是在设备描述符中定义的,如 HID/ usb分配的子类代码,同上,值由USB规定和分配的10.BYTE bDeviceProtocl;/ USB分配的设备协议代码,同上7.8.11.BYTE bMaxPacketSizeO;/端点0的最大包的大小12.WORD id

31、Vendor;/厂商编号13.WORD idProduct;/产品编号14.WORD bcdDevice;/设备岀厂编号15.BYTE iManufacturer;/描述厂商字符串的索引16.BYTE iProduct;/描述产品字符串的索引17.BYTE iSerialNumber;/描述设备序列号字符串的索引18.BYTE bNumConfiguration;/可能的配置数量19.以下是-种鼠标的设备描述符示例,以供大家分析:表7、一种鼠标的设备描述符示例字段描述符值(十六进制)bLength0x12bDecriptorType0x01BcdUSB0x0110bDeviceClass0x0

32、0bDeviceSubClass0x00bDevicePortocol0x00BMaxPacketSize00x08idVendor0x045E(Microsoft Corporation)idProduct0x0047bcdDevice0x300iManufacture0x01iProduct0x03iSerialNumber0x00bNumConfiguration0x01配置描述符配置描述符中包括了描述符的长度(属于此描述符的所有接口描述符和端点描述符的长度的和)、供电方式(自供电/总线供电)、最大耗电量等。主果主机发出USB标准命令Get_Descriptor要求得到设备的某个配置描述

33、符,那么除了此配置描述符以外,此配置包含的所有接口描述符与端 点描述符都将提供给 USB主机。表& USB配置描述符的结构偏移量域大小值描述0bLength1数字此描述表的字节数长度1bDescriptorType1常量配置描述表类型(此处为0x02)2wTotalLength2数字此配置信息的总长(包括配置,接口,端点和设备类及厂 商定义的描述符)4bNumInterface1数字此配置所支持的接口个数5iConfigurationValue1数字在SetConfiguration()请求中用作参数来选定此配置6iConfiguration1索引描述此配置的字符串描述表索引7bmAttrib

34、utes1位图配置特性:D7:保留(设为1)D6:自给电源D5:远程唤醒D4.0:保留(设为1)一个既用总线电源又有自给电源的设备会在MaxPower域指岀需要从总线取电量。并设置D6为1。运行使其的实际电源可由 GetStatus(DEVICE)请求得到。8MaxPower1mA在此配置下的总线电源耗费量,以2mA为一个单位配置描述符在程序中的结构体表示如下01.struct _CONFIGURATION_DEs criptOR_STRUCT02.03.BYTE bLength;/设备描述符的字节数大小,为0x1204.BYTE bDes criptorType;/描述符类型编号,为 0x0

35、105.WORD wTotalLength;/配置所返回的所有数量的大小06.BYTE bNumInterface;/此配置所支持的接口数量07.BYTE bConfigurationVale;/ Set_Configuration命令需要的参数值08.BYTE iConfiguration;/描述该配置的字符串的索引值09.BYTE bmAttribute;/供电模式的选择10.BYTE MaxPower;/设备从总线提取的最大电流11.F面是一种硬盘的配置描述符实例,以供分析表9、一种硬盘的配置描述符示例字段描述符值(十六进制)bLength0x09bDescriptorType0x02w

36、TotalLength0x01FbNumInterface0x01bConfigurationValue0x01iConfiguration0x00bmAttributes0x0CMaxPower0x32接口描述符配置描述符中包含了一个或多个接口描述符,这里的“接口”并不是指物理存在的接口,在这 里把它称之为“功能”更易理解些,例如一个设备既有录音的功能又有扬声器的功能,则这个设备 至少就有两个“接口” 。如果一个配置描述符不止支持一个接口描述符,并且每个接口描述符都有一个或多个端点描述 符,那么在响应 USB主机的配置描述符命令时,USB设备的端点描述符总是紧跟着相关的接口描述符后面,作为配

37、置描述符的一部分被返回。接口描述符不可直接用Set_Descriptor 和 Get_Descriptor 来存取。如果一个接口仅使用端点0,则接口描述符以后就不再返回端点描述符,并且此接口表现的是一个控制接口的特性,它使用与端点0相关联的默认管道进行数据传输。在这种情况下bNumberEndpoints域应被设置成0。接口描述符在说明端点个数并不把端点0计算在内。表10、USB接 口描述符的结构偏移量域大小值描述0bLength1数字此表的字节数1bDescriptorType1常量接口描述表类(此处应为0x04)2bInterfaceNumber1数字接口号,当前配置支持的接口数组索引(从

38、零开始)3bAlternateSetting1数字可选设置的索引值4bNumEndPoints1数字此接口用的端点数量,如果是零则说明此接口只用缺省控制管道5bInterfaceClass1类接口所属的类值:零值为将来的标准保留如果此域的值设为FFH,则此接口类由厂商说明。 所有其他的值由USB说明保留6bInterfaceSubClass1子类子类码:这些值的定义视 bInterfaceClass域而定。如果bInterfaceClass域的值为零则词语的值必须为零。bInterfaceClass 域不为FFH则所有值由USB所保留7bInterfaceProtocol1协议协议码:bInt

39、erfaceClass和 bInterfaceSubClass域的值而定,如果一个接口支持设备类相关的请求此域的值指岀了设备类说明 所定义的协议。8iInterface1索引描述此接口的字符串描述表的索引值对于blnterfaceClass字段,表示接口所属的类别,USB协议根据功能将不同的接口划分成不的类,其具体含义如下表所示:表11、USB协议定义的接口类别 (bInterfaceClass)值(十六进制)类别0x01音频类0x02CDC控制类0x03人机接口类(HID)0x05物理类0x06图像类0x07打印机类0x08大数据存储类0x09集线器类0x0ACDC数据类0x0B智能卡类0x

40、0D安全类0xDC诊断设备类0xE0无线控制类0xFE特定应用类(包括红外的桥接器等)OxFF厂商定义的设备接口描述符在程序中的结构体表示如下01. struct _INTERFACE_DEs criptOR_STRUCT02. 03.BYTE bLength;/设备描述符的字节数大小,为0x1204.BYTE bDes criptorType;/描述符类型编号,为 0x0105.BYTE bInterfaceNunber;/接口的编号06.BYTE bAlternateSetting;/备用的接口描述符编号07.BYTE bNumEndpoints;/该接口使用端点数,不包括端点008.BY

41、TE blnterfaceClass;/接口类型09.BYTE blnterfaceSubClass;/接口子类型10.BYTE blnterfaceProtocol;/接口所遵循的协议11.BYTE iInterface;/描述该接口的字符串索引值12. 端点描述符端点是设备与主机之间进行数据传输的逻辑接口,除配置使用的端点0 (控制端点,一般一个设备只有一个控制端点)为双向端口外,其它均为单向。端点描述符描述了数据的传输类型、传输 方向、数据包大小和端点号(也可称为端点地址)等。除了描述符中描述的端点外,每个设备必须要有一个默认的控制型端点,地址为0,它的数据传输为双向,而且没有专门的描述

42、符,只是在设备描述符中定义了它的最大包长度。主机通过此端 点向设备发送命令,获得设备的各种描述符的信息,并通过它来配置设备。表12、USB端点描述符的结构偏移量域大小值描述0bLength1数字此描述表的字节数长度1bDescriptorType1常量端点描述表类(此处应为0x05)2bEndpointAddress1端点此描述表所描述的端点的地址,方向:Bit3.0 :端点号Bit6.4 :保留位零Bit7 :方向,如果控制端点则略0 :输岀端点(主机到设备)1 :输入端点(设备到主机)3bmAttributes1位图此域的值描述的是在bConfigurationValue域所指的配置下端点

43、的特性:Bit 1.0 :传送类型00 =控制传送01 =同步传送10 =批传送11 =中断传送其他所有位都保留4wMacPacketSize2数字当前配置下此端点能够接收或发送的最大数据包的大小 . 对于实际传输,此值用于为每帧的数据净荷预留时间。 在实际运行时,管道可能不完全需要预留的带宽,实际带宽可由设备通过一种非 USB定义的机制汇报给主机。对于中 断传输,批量传输和控制传输,端点可能发送比之短的数 据包。6blnterval1数字周期数据传输端点的时间间隙。此域的值对于批传送的端点及控制传送的端点无意义。对于同步传送的端点此域必需为 1,表示周期为1mso对于 中断传送的端点此域值的

44、范围为 1ms到255m&端点描述符在程序中的结构体表示如下01. struct _ENDPOIN_DEs criptOR_STRUCT02. 03.BYTE bLength;/设备描述符的字节数大小,为0x1204.BYTE bDes criptorType;/描述符类型编号,为0x0105.BYTE bEndpointAddress;/端点地址及输入输岀属性06.BYTE bmAttribute;/端点的传输类型属性07.WORD wMaxPacketSize;/端点收、发的最大包的大小08.BYTE bInterval;/主机查询端点的时间间隔09. F表是一种鼠标的端点描述符的示例,该

45、端点是一个中断端点:表13、一种鼠标的端点描述符示例域值(十六进制)bLength0x07bDescriptorType0x05bEndpointAddress0x81bmAttributes0x03wMaxPacketSize0x04bInterVal0x0A字符串描述符字符串描述符是一种可选的USB标准描述符,描述了如制商、设备名称或序列号等信息。如果一个设备无字符串描述符,则其它描述符中与字符串有关的索引值都必须为0。字符串使用的是Unicode 编码。主机请示得到某个字符串描述符时一般分成两步:首先主机向设备发出USB标准命令Get_Descriptor ,其中所使用的字符串的索引值为

46、0,设备返回一个字符串描述符,此描述符的结构如下:表14、USB字符串描述符(响应主机请求时返回的表示语言ID的字符串描述符)偏移量域大小值描述0bLength1N+2此描述表的字节数1bDescriptorType1常量字符串描述表类型(此处应为0x03)2Wlangid02数字语言标识(LANGID)码0NWlangid x2数字语言标识(LANGID)码X该字符串描述符双字节的语言ID的数组,wLANGIDO卜wLANGIDx指明了设备支持的语言,具体含义可查看USB_LANGIDs.pdf。主机根据自己需要的语言,再次向设备发出 USB标准命令Get_Descriptor ,指明所要求

47、得到的 字符串的索引值和语言。这次设备所返回的是Uni code编号的字符串描述符,其结构如下:表15、Unicode字符串描述符(响应主机请求时真正表示字符串编码的字符串描述符)偏移量域大小值描述0bLength1数字此描述表的字节数(bString域的数值N+2)1bDescriptorType1常量字串描述表类型(此处应为0x03)2bStringN数字UNICOD编码的字串bStri ng域为设备实际返回的以UNICODE编码的字符串流,我们在编写设备端硬件驱动的时候需要将字符串转换为 UNICODE编码,您可以通过一些 UNICODE专换工具进行转换。字符描述符在程序中的结构体表示如下01. struct _STRING_DEs criptOR_

温馨提示

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

评论

0/150

提交评论