版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于lm3sxxx的usb开发笔记- triton. zhang2011-08-30【摘要】ti收购lm后继承了 lm 系列的cortex-m3的产品,从而弥补了了 tt在mcu市场一个空白。 从产品规划来讲,的产品还是不错的,特别是带can、usb、和集成mac+pi1y的etii接口,这些 外设为开发者提供了一个更方便的连接器解决方案。木文就通过lm3sxxx的usb应用笔记给大家介 绍一个完整的usb系统是如何开发出来的。lm3sxxx的儿大系列中,其中f3xxx, f5xxx和最新的f9xxx系列都带有usb接口,有的是只支持 device,有的支持host + device,部分芯片
2、支持0tg功能,具体要看数据手册,本文的所有试验都 基于t1最新的功能最全的lm3s9b96的评估板。如果想更详细了解usb应用的朋友可以参看t1的 相关文档和usb的协议。本文中的所有程序都是本人编写,请配合该程序进行学习。本文提及到的参考资料,请参见后 而的参考资料列表,如果是刚刚接触usb,或者lm3sxxx的同学可以先下载这些资料。本开发笔记分为三大章节,第一章介绍usb的基础知识,如果对usb协议已经熟悉的同学,可 以跳过本章。第二章介绍如何在lm3sxxx芯片上开发usb程序,第三章介绍如何在pc上开发usb 的驱动程序。希望通过木笔记的学习,能够帮助人家尽快的学会如何进行isb的
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. 0o由于目前市面上的mcu大多只支持usb2. 0,所以本文主要介绍usb2. 0的特性。usb是主
4、从模式的总线结构,设备与设备z间,主机与主机z间是不能互连的,为了解决这个 问题,扩大usb的使用范围,在usb2. 0之后,出现了 usb otg(o n the go)。usb otg的做法是同 一个设备,在不同的应用场合下可以在主机和从机之间自由切换。在usb1. 0和usb1. 1版本中,只支持1. 5mbps的低速模式(low speed)和12mbps的全速模式(full speed) 在 usb2. 0 中,又加入了 480m 的高速模式(high speed) ousb的连接模型usb是一种主从结构的总线,主机叫做host,从机叫做device(也就是我们平时讲的设备)。一个
5、完整的usb系统主要由三个部分组成: usb的连接器usb的连接是指usb设备与主机之间进行连接和通信的操作,主要包括以下几个方面:-总线的拓扑结构:usb设备与主机之间的各种连接方式-内部层次关系:根据性能叠置,usb的任务被分配到系统的每一个层次-数据流模式:描述了数据在提供中通过usb从发起端到接收端的流动方式-usb的调度:usb提供了一个共享的连接,对可疑使用的连接进行调度以支持同步数据 传输 usb的主机在任何usb系统中,只有一个usb的主机,usb和主机系统的接口叫做主机控制器。主机 控制器由硬件,固件和软件综合实现。 usb的设备usb的设备包含两大类:-网络集线设备:为us
6、b系统提供更多的连接点-功能设备:为usb系统提供具体功能usb的数据交换只能发生在主机和从机z间,主机和主机,从机和从机之间是不能进行数据交 换的。为了再物理上区分主机和从机,使用不同的插头和插座,这样我们就能轻松的通过连接线来 判断出usb系统屮,谁处于主机模式,谁处于从机模式。最早的usb标准中,usb接头只有4根线,usb2. 0之后,定义了 miniusb接口,增加了一个id 线,主要用在otg的设备上用来标识本设备1d。标准的usb接口有a型和b型,每一个类型又分为 插头和插座。如下图所示:series mah connectorsseries hbn connectors ser
7、ies hah plugs are always oriented upstream towards the host svstemnah plugs(from the usb device) a型插头nah receptacles (downst) earn output fi om the usb host or "hub)a型播金 series nbm plugs are always oriented downstream towards theusb deviceb型插头hb° plugs from thehost system)nbn receptacles (
8、upsti'emn input to theusb de'ice or hub) b型插座usb系统中,所有的数据传输都是由主机主动发起的,从机值是被动地负责应答。在usb otg 应用中,一个设备可以在从机和主机之间切换,从而实现了设备间的连接,大大地增加了 usb的使 用范圉。但即使otg的应用也还是屈于主从模式,两个设备之间一个作为主机,一个作为从机。usb的拓扑结构usb的拓扑结构为金字塔型。usb系统由一个usb主控制器出发,下面接usb的集线器,usb集 线器将一个usb接口扩展为多个usb接口,多个usb接口又可通过集线器扩展更多的接口。usb协 议中对集线器的层
9、数有限制,usb1. 1规定usb的集线器层数最多是4层,usb2. 0规定最多为6层。usb主控制器通过7位地址对挂接在总线上的设备进行寻址,理论上一个主控制器上最多可以 接128个设备,但实际应用中接不了这么多。在pc机上,一般有一个(或多个)usb集线器,它叫根集线器,直接连接在usb的主控制器上。 打开电脑的设备管理器,我们可以看到usb的主控制器和根集线器。如下图所示:-3b34-3b3ca主控制器sound丿 video and game controllersstorage volumessystem devicesuniversal serial bus controllers
10、generic usb hub _ _generic usb hub二p 集线器generic usb hubgeneric usb hubhuawei mobile connect - bus enumerate deviceintel(r) 5 series/3400 series chipset family usb enhanced host controller intel(r) 5 series/3400 series chipset family usb enhanced host controller stellaris evaluation board astellaris
11、evaluation board busb composite deviceusb composite deviceusb composite deviceusb composite deviceusb mass storage deviceusb mass storage deviceusb root hub根集线器usb root hub图2. pc机上的usb控制器和集线器usb的电气特性vblfsd+d-gnd标進的usb使用4根线:5v电源线(vbus),差分数据线负(d-),差分数据线正(d+),地(gnd)o 在usb otg中,又增加了一种mini接口,使用的是5根线,比标准的
12、usb多了一根身份识别(id) 线。如下图所示:vbdsd-gndusb使用的是差分传输模式,有两根数据先,分别是d-和d+。在usb低速和全速模式中,釆用 的是电压传输模式,在高速模式下,则是电流传输模式。为了避免氏时间出现全0或全1的信号,在发送数据前,要经过位填充处理。然后将数据串行 化,发送到数据总线上,由两根数据线的差分值来表示0和1。在接收端恰恰相反,接收端采样数 据总线,将数据并行话,然后去白化处理(即去掉填充位),在解析数据。在usb协议屮规定,设备可以通过usb总线供电,在未配置z前,设备可以从vbls上获取loonia 的电流,配置之后,最多可以从vbus ±获取
13、500ma的电流。关于usb的的电气特性有如下几点需要注意:-电缆中包括vbus、gnd二条线,向设备提供电源;-vbus使用+5v电源。usb对电缆长度要求很宽,最长可为儿米;-为了保证足够的输入电压和终端阻抗,重要的终端设备应位于电缆的尾部;-低速模式需要更少的emi保护;-两种模式可在用同一 usb总线传输的情况下自动地动态切换。-过多的低速模式的使用将降低总线的利用率;usb总线协议usb总线属于轮询方式的总线,始终由主机控制端口初始化所有的数据传输。每一个usb总线执行动作最多传送三个数据包。按照传输前制定好的原则,在每次传送开始时, 主机控制器发送一个描述传输操作的种类、方向,us
14、b设备地址和终端号的usb数据包,这个数据 包通常称为标志包(token packet) ousb设备从数据包中収出属于自己的数据。数据传输方向不是从主机到设备就是从设备到主 机。在传输开始时,由标志包來标识数据的传输方向,然后发送端开始发送包含信息的数据包或表 明没有数据传送。接收端也要相应发送一个握手的数据包表明是否传送成功。发送端和接收端z间 的usb数据传输,在主机和设备的端口之间可视为一个管道(pipe)ousb存在两种类型的管道:-数据流管道数据流管道的数据没有usb协议规定的结构。管道与数据宽、传输服务类型、端口特性 (如缓冲区大小)有关。数据流管道在usb设备初始化设置完成就存
15、在了。-消息管道:消息通道是usb协议屮特殊的一个管道,也成为控制管道。设备上电启动后,该管道 就存在,为设备的设置、查询状态和输入控制信息提供了一个入口。usb数据流分类在usb主机和设备通道之间的数据传输,我们叫做数据流,i'sb的结构包含四个基本的数据流 传输类型:-控制数据传送在设备连接时用來对设备进行设置,还可对指定设备进行控制,如通道控制;-批量数据传送大批量产生并使用的数据,在传输约束下,具有很广的动态范圉:通常用在打卬机和扫描仪 等有大量数据需求的传输。-中断数据的传送用來描述或兀配人的感觉或对特征反应的回馈;中断数据传输是针対少量数据的传输筒求, 数据延迟时间也是有限
16、范围内的。-同步数据的传送由预先确定的传送延迟来填满预定的usb带宽;同步数据的建立、传输和使用时时连续且实 时的,同步数据时以稳泄的速率发送和接收实时信息,同步数据要使接受者与发送者保持相同的时 间安排,出了传输速率,同步数据对延迟非常敏感。对于任何指定的usb设备而言,一个通道只能支持上述一种方式的数据流传输。usb的带宽usb的带宽分配给各个通道,当一个通道建立后,lsb主机就分毗给它一定的带宽,usb设备需要 提供一些数据缓冲区,若usb提供了更多的带宽,贝懦要更多的缓冲区。usb的体系要保证缓冲引 导的硬件的延迟限定在儿亳秒内。usb设备的插入检测机制当usb设备插上主机时,主机是如
17、何检测到设备插入的呢?首先,在每个usb的集线器下游端hd十和d-上,分别接了一个15k欧姆的下拉电阻到地。当 集线器的端口悬空时,d+和d-被这两个下拉电阻拉到地,同为低电平。在低速usb的设备上,dd-被接上1.5k欧姆的上拉电阻,在全速和高速usb设备上,d+被接上 一个1.5k欧姆的上拉电阻。当设备插入集线器是,由于1.5k欧姆的上拉和下拉电阻分压,就将d+ 或d-其中的一条线拉高了。集线器检测到这个状态后,就上报usb主控制器,检测到设备的插入。 通过对d+, d-电平的识别可以判断出是低速设备还是高速或全速的设备。高速和全速的设备需要主机和从机进一步数据交换后才能确定。usb的识别
18、过程当usb主机检测到usb设备插入后,主机就通过一系列的动作来对设备进行枚举配置(配置是 属于枚举的一个态,态表示暂时的状态),这些态如下:-接入态(attached)设备接入主机后,主机通过检测信号线上的电平变化来发现设备的接入;-供电态(powered)就是给设备供电,分为设备接入时的默认供电值,配置阶段后的供电值(按数据屮要求的最 大值,可通过编程设置)-缺省态(default)usb在被配置之前,通过缺省地址0与主机进行通信-地址态(address)经过了配置,usb设备被复位后,就可以按主机分配给它的唯一地址來与主机通信,这种状 态就是地址态;-配置态(configured)通过各
19、种标准的usb请求命令来获取设备的各种信息,并对设备的某此信息进行改变或设置。 -挂起态(suspended)总线供电设备在3ms内没有总线操作,即usb总线处于空闲状态的话,该设备就要自动进入 挂起状态,在进入挂起状态后,总的电流功耗不超过280ua。usb的请求命令控制传输过程中,初始化设置usb的设备吋会涉及到usb的请求命令。标准的usb设备请求 命令总共有11个,每个命令由8个字节(5个字段)组成,具有相同的数据结构。数据结构如下图 所示:表1、usb命令的结构偏移量域长度(半字)值描述0bmrequesttype1位图请求特征:d7 :传输方向0=主机至设备1 =设备至主机d6.5
20、:种类0 =标准1 =类2 =厂商3=保留d4.0:接收者0 =设备1 =接口2 =端点3=其他4.31保留1brequest1值命令类型编码值(见表3)2wvalue2值根据不同的命令,含义也不同4win dex2索引或偏移根据不同的命令,含义也不同,主 要用于传送索引或偏移6wlength2如冇数据传送阶段,此为数据字节 数下表列出了 usb的ii种标准命令表2、usb的门种标准命令命令bmrequesttypebrequestwvaulewlndexwlengthdataclear_feature0000 0000b0000 0001b0000 001 obclear_feature特性
21、选 择符零接口号端点号零无get configuratio n1000 0000bget 一 configuration零零配置值get_descriptor1000 0000bget_descriptor描述表 种类(高 字节,见 表5)和索 引(低字 节)零或语言 标志描述表长描述农get_ln terface1000 0001bgetjnterface零接口号-可选设置get_status1000 0000b1000 0001b1000 0010bget_status零零(返回 设备状 态) 接口号 (对像是 接口时) 端点号 (对象是 端点时)设备, 接口, 或端点 状态set_add
22、ress0000 0000bset_address设备地址零零无set_configuratio n0000 0000bset_configuration配置值 (高字节 为0,低 字节表 示要设 置的配 置值)零零无set descriptor0000 0000bset descriptor描述表零或语言描述表长描述表种类(高 字节,见 表5)和索 引(低字 节)标志set_feature0000 0000b0000 0001b0000 001 obset_feature特性选 择符(1表 示设备, 0表示端 点)零, 接口号, 端点号零无set_ln terface0000 0001bse
23、tjnterface可选设置接口号零无synch frame1000 0010 bsynch fram零端点号二帧号其中brequest为命令编码值,含义见表3:表3、usb标准命令的编码值brequestvalueget.status0clear feature1reserved2set feature3reserved4set address5get descriptor6set descriptor7get configuration8set configuration9getjnterface10setjnterface11synch frame12这里就不详细介绍这11个命令了,如果
24、有感兴趣的同学请自己去看usb2.0的协议。控制传输 是usb的重点,而控制传输就是依靠这ii个命令来完成的,所以这11个命令搞明白了,usb就算 是入门了。usb的描述符usb协议为usb设备定义了一套描述设备功能和属性的有固定结构的描述符,包扌舌标准的描述 符即设备描述符、配置描述符、接口描述符、端点描述符和字符串描述符,还有百标准描述符,如 类描述符。usb设备通过这些描述符向usb主机汇报设备的各种各样属性,主机通过对这些描述符 的访问对设备进行类型识别、配置并为其提供相应的客户端驱动程序。usb设备通过描述符反映自己的设备特性。usb描述符是由特定格式排列的一组数据结构组成。在usb
25、设备枚举过程中,主机端的协义软件需要解析从usb设备读取的所有描述符信息。在usb 主向设备发送读取描述符的请求后,usb设备将所有的描述符以连续的数据流方式传输给usb主机。 主机从第一个读到的字符开始,根据双方规定好的数据格式,顺序地解析读到的数据流。usb描述符包含标准描述符、类描述符和厂商特定描述3种形式。任何一种设备必须usb标准 描述符(队字符串描述符可选外)。在usb1. x中,规定了 5种标准描述符:设备描述符(device descriptor) >配置描述符 (configuration descriptor)、接口描述符(interface descriptor)&
26、gt; 端点描述符(endpoint descriptor)和字符串描述符(string descriptor)0每个usb设备只有一个设备描述符,而一个设备屮可包含一个或多个配置描述符,即usb设备 可以有多种配置。设备的每一个配置中又可以包含一个或多个接口描述符,即usb设备可以支持多 种功能(接口),接口的特性通过描述符提供。在usb主机访问usb设备的描述符时,usb设备依照设备描述符、配置描述符、接口描述符、 端点描述符、字符串描述符顺序将所有描述符传给主机。一设备至少要包含设备描述符、配置描述 符和接口描述符,如果usb设备没有端点描述符,则它仅仅用默认管道与主机进行数据传输。设备
27、描述符设备描述符给出了 usb设备的一般信息,包括对设备及在设备配置屮起全程作用的信息,包括 制造商标识号id、产品序列号、所属设备类号、默认端点的最大包长度和配置描述符的个数等。一 个usb设备必须有且仅有一个设备描述符。设备描述符是设备连接到总线上吋usb主机所读取的第 一个描述符,它包含了 14个字段,结构如下:表4、usb设备描述符的结构偏移量域大小值描述0blength1数字此描述表的字节数1bdescriptortype1常量描述符的类型(此处应为0x01,即设备描述符)2bcdusb2bcd码此设备与描述表兼容的usb设备说明版木号(bcd码)4bdeviceclass1类设备类
28、码:如果此域的值为0则一个设置下每个接口指出它自己的类, 各个接口各口独立工作。如果此域的值出于feh之间,则设备在不同的接口上支持 不同的类。并这些接口可能不能独立工作。此值指出了这些 接口集体的类定义。如果此域设置ffii,贝川匕设备的类由厂商定义。5bdevicesubclass1子类子类挖码这些码值的具体含义根据bdeviceclass域来看。 如bdeviceclass域为零,此域也须为零 如bdeviceclass域为ffh,此域的所有值保留6bdevicelortocol1协议协议码这些码得值是 bdcviddddddddddddddddddddddccclass 和bdevic
29、esubclass 的值而定。如果设备支持设备类相关的协议,此码标志了设备类的值。如果此域的值为零,则此设备不支持设备类相关的协议,然 而,肯它的接口支持设备类柑关的协议。如果此域的值为 ffh,此设备使用厂商定义的协议。7bmaxpacketsizeo1数字端点0的最大包大小(仅& 16, 32, 64为合法值)8idvendor2id厂商标志(由usb-1f组织赋值)10idproduct2id产品标志(由厂商赋值)12bcddevice2bcd码设备发行码(bcd码)14imanufacture1索引描述厂商信息的字符申描述的索引值15iproduct1索引描述产品信息的字符串描
30、述符的索引值16iserialnumber1索引描述设备序列号信息的字符串描述符的索引值17bnumconfigurations1数字可能的配置描述符数目其中bdescriptortype为描述符的类型,其含义可查下表(此表也适用于标准命令 get descriptor中wvalue域高字节的取值含义):表5、usb描述符的类型值类型描述符描述符值标志描述符设备描述符(device descriptor)0x01配置描述符(configuration descriptor)0x02字符串描述符(string descriptor)0x03接口描述符(interface descriptor)0
31、x04端点描述符(endport descriptor)0x05类描述符集线器类描述符(hub descriptor)0x29人机接口类描述符(1i1d)0x21厂商定义的描述符oxff设备类代码bdeviccclass可查下表:表 5、usb 设备的类别(bdeviccclass)值(十进制)值(十六进制)说明00x00接口描述符中提供类的值20x02通信类90x09集线器类220oxdc用于诊断用途的设备类2240xe0无线通信设备类255oxff厂商定义的设备类设备描述符在程序中的结构体表示如下:1.2.3.struct _device_des criptor_structbyte bl
32、ength;/设备描述符的字节数人小,为0x124.byte bdes criptortype;/描述符类型编号,为0x015.word bcdusb;/usb版本号6.byte bdeviceclass;/ usb分配的设备类代码,0x01 0xfe为标准设备类,7./oxff为厂商口定义类8./0x00不是在设备描述符中定义的,如hid9.byte bdevicesubclass;/usb分配的子类代码,同上,值由usb规定和分配的10.byte bdeviceprotoci;/usb分配的设备协议代码,同上11.12.13.14.15.16.17.18.19./端点0的最大包的大小/厂商
33、编号/产品编号/设备出厂编号/描述厂商字符串的索引/描述产品字符串的索引/描述设备序列号字符串的索引byte bmaxpacketsizeo;word idvendor;word idproduct;word bcddevice;byte imanufacturer;byte iproduct;byte iserialnumber;byte bnumconfiguration; / 口j能的配置数量以下是一种鼠标的设备描述符示例,以供大家分析:表7、一种鼠标的设备描述符示例字段描述符值(十六进制)blength0x12bdecriptortype0x01bcdusb0x0110bdevicec
34、lciss0x00bdevicesubclciss0x00bdevicelortocol0x00bmcixpcicketsizeo0x08idvendor0x045e(microsoft corporation)idproduct0x0047bcddevice0x300imcinufacture0x01iproduct0x03iserialnumber0x00bnumconfigurtitio n0x01配置描述符配置描述符中包括了描述符的长度(属于此描述符的所有接口描述符和端点描述符的长度的 和)、供电方式(自供电/总线供电)、最大耗电量等。主果主机发出usb标准命令get_descript
35、or 要求得到设备的某个配置描述符,那么除了此配置描述符以外,此配置包含的所有接口描述符与端 点描述符都将提供给usb主机。表8、usb配置描述符的结构偏移量域大小值描述0blength1数字此描述表的字节数长度1bdescriptortype1常量配置描述表类型(此处为0x02)2wtotallength2数字此配置信总的总长(包括配置,接口,端点和设备类及厂 商定义的描述符)4bnumlntcrfacc1数字此配置所支持的接口个数5i con figuration5 luc1数字在setconfiguration ()请求屮用作参数来选定此配置6iconfiguration1索引描述此配置
36、的字符串描述表索引7bmattributcs1位图配置特性:d7:保留(设为1)d6:自给电源d5:远程唤醒04. 0:保留(设为1)一个既用总线电源又有自给电源的设备会在maxpower域 指出需要从总线取电疑。并设置d6为1。运行使共的实 际电源可由getstatus (device)请求得到。8maxpower1ma在此配置下的总线电源耗费量,以2ma为一个单位配置描述符在程序中的结构体表示如下:01. struct _configuration_des criptor_struct02. 03.byteblength;/设备描述符的字节数大小,为0x1204.bytebdes crip
37、tortype;/ 描述符类型编号,为 0x0105.word wtotallength;/配置所返回的所有数量的人小06.bytebnumlnterface;/此配置所支持的接口数量07.bytebconfigurationvale;/ set_configuration 命令需要的参数值08.byteiconfiguration;/描述该配置的字符串的索引值09.bytebmattribute;供电模式的选择10.bytemaxpower;设备从总线提取的最人电流11- 下而是一种硬盘的配置描述符实例,以供分析:表9、一种硬盘的配置描述符示例字段描述符值(十六进制)blength0x09b
38、descriptortype0x02wtotallengthoxolfbnumtnterface0x01bconfigurationvaiue0x01iconfiguration0x00bmattributes0x0cmaxpower0x32接口描述符配置描述符中包含了一个或多个接口描述符,这里的“接口”并不是指物理存在的接口,在这 里把它称之为“功能”更易理解些,例如一个设备既有录音的功能又有扬声器的功能,则这个设备 至少就有两个“接口”。如果一个配置描述符不止支持一个接口描述符,并且每个接口描述符都有一个或多个端点描述 符,那么在响应usb主机的配置描述符命令时,usb设备的端点描述符总是
39、紧跟着相关的接口描述 符后面,作为配置描述符的一部分被返回。接口描述符不可直接用set_descriptor和 get descriptor 来存取。如果一个接口仅使用端点0,则接口描述符以后就不再返回端点描述符,并且此接口表现的是 一个控制接口的特性,它使用与端点0相关联的默认管道进行数据传输。在这种情况下 bnumberendpoints域应被设置成0。接口描述符在说明端点个数并不把端点0计算在内。表10、usb接口描述符的结构偏移量域大小值描述0blcngth1数字此表的字节数1bdcscriptortypc1常量接口描述表类(此处应为0x04)2btnterfacenumber1数字接
40、口号,当前配置支持的接口数组索引(从零开始)3baltcrnatoselling1数字可选设置的索引值4bnumendpoints1数字此接口用的端点数量,如果是零则说明此接口只用缺省控制管道5btnterfaceclass1类接口所属的类值:零值为将来的标准保留如果此域的值设为ffh,则此接口类由厂商说明。所冇英他的值由usb说明保留6btnterfacesubclass1子类子类码:这些值的定义视blnterfaceclass域而定。如果blnterfaceclass 域的值为零则词语的值必须为零。blnterfaceclass域不为ffh则所冇值由usb所保留7btnterfaccpro
41、tocol1协议协议码:blnterfaceclass 和 b 1 nterfacesubclass 域的值而定, 如果一个接口支持设备类和关的请求此域的值指出了设备类说明 所定义的协议。8iinterface1索引描述此接口的字符串描述表的索引值对于blnterfaceclass字段,表示接口所属的类别,usb协议根据功能将不同的接口划分成不 的类,其具体含义如下表所示:表11、usb协议定义的接口类别(blnterfaceclass)值(十六进制)类别0x01音频类0x02cdc控制类0x03人机接口类(hid)0x05物理类0x06图像类0x07打印机类0x08大数据存储类0x09集线器
42、类0x0acdc数据类0x0b智能卡类0x0d安全类oxdc诊断设备类oxeo无线控制类oxfe特定应用类(包括红外的桥接器等)oxff厂商定义的设备接口描述符在程序屮的结构体表示如下:01 struct _interface_des criptor_struct02.03.byte blength;/设备描述符的字节数大小,为0x1204.byte bdes criptortype;/描述符类型编号,为0x0105.byte blnterfacenunber;/接口的编号06.byte balternatesetting;/备用的接口描述符编号07.byte bnumendpoints;/该
43、接口使用端点数,不包括端点008.byte blnterfaceclass;/接口类型09.byte blnterfacesubclass; /接口了类型10.byte blnterfaceprotocol;/接口所逍循的协议11.byte ilnterface;/描述该接口的字符串索引值12.端点描述符端点是设备与主机之间进行数据传输的逻辑接口,除配置使用的端点0 (控制端点,一般一个 设备只有一个控制端点)为双向端口外,其它均为单向。端点描述符描述了数据的传输类型、传输 方向、数据包大小和端点号(也可称为端点地址)等。除了描述符中描述的端点外,每个设备必须耍有一个默认的控制型端点,地址为0
44、,它的数据 传输为双向,而且没有专门的描述符,只是在设备描述符屮定义了它的最大包长度。主机通过此端 点向设备发送命令,获得设备的各种描述符的信息,并通过它来配置设备。表12、usb端点描述符的结构偏移量域大小值描述0blenglh1数字此描述表的字节数长度1bdescriptortype1常量端点描述表类(此处应为0x05)2bendpointaddress1端点此描述表所描述的端点的地址,方向: bit3. 0 :端点号b116.4 :保留位零bit7 :方向,如果控制端点则略0 :输出端点(主机到设备)1 :输入端点(设备到主机)3binattributes1位图此域的值描述的是在bcon
45、figurationvalue域所指的配 置下端点的特性:bit 1.0 :传送类型00 =控制传送01 =同步传送10 =批传送11 =中断传送其他所冇位都保留4wmacpacketsize2数字当前配置下此端点能够接收或发送的最人数据包的人小. 对于实际传输,此值用于为每帧的数据净荷预留时间。在实际运行时,筲道可能不完全需耍预留的带宽,实际带宽 可由设备通过一种非usb定义的机制汇报给主机。对于中 断传输,批量传输和控制传输,端点可能发送比之短的数 据包。6blnterval1数字周期数据传输端点的时间间隙。此域的值对于批传送的端点及控制传送的端点无意义。对 于同步传送的端点此域必需为1,
46、表示周期为1ms。对于 中断传送的端点此域值的范围为1ms到255mso端点描述符在程序中的结构体表示如下:01. struct _endpoin_des criptor_struct02. 03.04.05.06.07.08.byte blength;/设备描述符的字节数大小,为0x12byte bdes criptortype;/描述符类型编号,为 0x01byte bendpointaddress;/端点地址及输入输出属性byte bmattribute;/端点的传输类型属性word wmaxpacketsize;/端点收、发的最大包的大小byte blnterval;/主机查询端点的时
47、间间隔09. 下表是一种鼠标的端点描述符的示例,该端点是一个屮断端点:表13、一种鼠标的端点描述符示例域值(十六进制)blength0x07bdescriptortype0x05bendpointaddress0x81bmattributes0x03wmaxpacketsize0x04blntervaloxoa字符串描述符字符串描述符是一种可选的usb标准描述符,描述了如制商、设备名称或序列号等信息。如果 一个设备无字符串描述符,则其它描述符屮与字符串有关的索引值都必须为0。字符串使用的是 unicode 编码。主机请示得到某个字符串描述符时一般分成两步:首先主机向设备发出usb标准命令 ge
48、t_descriptor,其中所使用的字符串的索引值为0,设备返冋一个字符串描述符,此描述符的结 构如下:表14、usb字符串描述符(响应主机请求时返回的表示语言id的字符串描述符)偏移量域大小值描述0blength1n+2此描述表的字节数1bdescriptortype1常量字符串描述农类型(此处应为0x03)2wlangid02数字语言标识(lang 1d)码0 nwlangidx2数字语言标识(lang 1d)码x该字符串描述符双字节的语言id的数组,wlangidovlangidx指明了设备支持的语言,具 体含义可查看usb langids. pdf。主机根据自己需要的语言,再次向设备发出usb标准命令get_descriptor,指明所要求得到的 字符串的索引值和语言。这次设备所返回的是unicode编号的字符串描述符,其结构如下:表15、unicode字符串描述符(响应主机请求时真正表示字符串编码的字符串描述符)偏移量域大小值描述0bl.e ng th1数字此描述表的字节数(bstring域的数值n+2)1bdescriptortype1常量字串描述表类型(此处应为0x03)2bstringn数字unicode编码的字串bstring域为设备实际返回的以unicode编码的字符串流,我们在编写设备端硬件驱动的吋候蛊要将
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学游泳小学作文15篇
- 《打电话》教案汇编九篇
- 大学生实习报告(15篇)
- 2024年12月 《马克思主义基本原理概论》复习题
- 关于五年级单元作文300字10篇
- 2024年五年级语文上册 第一单元 语文园地一教学实录 新人教版
- 公司财务个人工作计划5篇
- 2019年资产负债表(样表)
- 转让协议书范文七篇
- 个人房屋租赁合同范文合集五篇
- 山东省潍坊市潍城区2023-2024学年六年级上学期期末语文试题
- 电玩城岗位流程培训方案
- 会计师事务所保密制度
- 复合机器人行业分析
- 建立进出校园安全控制与管理的方案
- 阿里菜鸟裹裹云客服在线客服认证考试及答案
- 水库防恐反恐应急预案
- 供应商管理培训资料课件
- 绿植租摆服务投标方案(完整技术标)
- 幼儿园优质公开课:大班科学《有趣的仿生》课件
- 通用短视频拍摄脚本模板
评论
0/150
提交评论