收藏 分享(赏)

基于STM32处理器和PC主机的USB通信协议的实现.pdf

上传人:精品资料 文档编号:9264017 上传时间:2019-07-31 格式:PDF 页数:59 大小:2.96MB
下载 相关 举报
基于STM32处理器和PC主机的USB通信协议的实现.pdf_第1页
第1页 / 共59页
基于STM32处理器和PC主机的USB通信协议的实现.pdf_第2页
第2页 / 共59页
基于STM32处理器和PC主机的USB通信协议的实现.pdf_第3页
第3页 / 共59页
基于STM32处理器和PC主机的USB通信协议的实现.pdf_第4页
第4页 / 共59页
基于STM32处理器和PC主机的USB通信协议的实现.pdf_第5页
第5页 / 共59页
点击查看更多>>
资源描述

1、山东大学硕士学位论文基于STM32处理器和PC主机的USB通信协议的实现姓名:方旭申请学位级别:硕士专业:软件工程指导教师:贾智平20091010山东大学硬士学位论文摘要随着USB协议的推出以及其在PC主机上的广泛应用,慢慢的各种电子产品的数据通信接口都开始使用USB通信协议进行通信,像我们使用的U盘、移动硬盘的数据口、数码相机的数据口、手机的数据口等大部分都是使用USB接口遵循USB通信协议进行数据通信。它的广泛应用源于它的各种优点,特别是它对各种标准设备类的支持,这也意味着它的规范相当的全和复杂【I】。本文通过解析USB通信协议及其CDC(Communications Device Cla

2、ss)USB标准设备类,在意法半导体推出的基于ARM公司的Cortex-M架构设计的STM32处理器上设计了一套基于CDC标准设备类的USB通信协议,然后在PC主机上利用微软提供的usbsersys驱动程序,自己编写了一个stmcdcinf文件,实现了STM32处理器和PC主机的基于CDC标准设备类的通信。随后又在STM32处理器上用两个通信节点(Endpoint)设计了一个基于自己通信特点的半双工bulk通信,在Pc主机上利用VC60和微软提供的基于wDM(WindowsDriver Model)驱动开发包自己开发了一个Windows驱动程序dwusbsys,并编写了一个dwusb。inf文

3、件,最终实现了基于自己通信特点的USB通信协议的实现。关键词:USB,STM32处理器;CDC;WDM驱动开发山东大学硕士学位论文ABSTRACTWith the introduction of the USB protocol and extensive application in the PC host,communication interface began using the USB communication protocol to communicate,as we use U disk,mobile hard disk statistics data,digital came

4、ra,mobile data is mostlyused as a USB interface following USB communication protoc01It is widely used invarious strengths,especially it to all kinds of standard equipment support;this means itis full of norms and complexBased on analytical USB communication protocol and CDC(CommunicationsDevice Clas

5、s)USB standard device class,care of company law based on ARMsemiconductor Cortex-M architecture design of STM32 processor designed a set ofUSB communication based on the CDC,then in the Communications protocol on PChost using USBThe driver provided by Microsoft,writing a stmcdcinf file,realizedbased

6、 on PC host processor and the communication of standard equipment according tothe CDC standard device classThen based on the STM32 processor realizes half-duplex bulk communication withtwo communication node(Endpoint)with my own communication featuresIn the PChost,using of VC60 and WDM(Windows Drive

7、r Model)provided by Microsoftdevelop a Windows diver dwusbsys by myself,and write a dwusbinf file andeventually realized based on my features of the USB communication protocolcornmunicationsKeywords:USB;STM32 processor;CDC; WDM Driver DevelopmentlI原创性声明本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究所取得的成果。除文中已经注明

8、引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的科研成果。对本文的研究作出重要贡献的个人和集体,均已在文中以明确方式标明。本声明的法律责任由本人承担。论文作者签名:盈盈一 Et 期:上匹早山关于学位论文使用授权的声明本人完全了解山东大学有关保留、使用学位论文的规定,同意学校保留或向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅;本人授权山东大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或其他复制手段保存论文和汇编本学位论文。(保密论文在解密后应遵守此规定)论文作者签名:堕丝 导师签名:山东大学硕士学位论文11系统设计背景及意义第1

9、章绪论随着USB协议的推出以及在PC主机的广泛应用,慢慢的各种电子产品的数据通信接口都开始使用USB通信协议进行通信,像我们使用的U盘、移动硬盘数据口、数码相机的数据口、手机的数据口等大部分都是使用USB接口遵循USB通信协议进行数据通信。它有如下优点:1、USB支持热插拔(hot plug),也就是说在不管PC的情况下可以安全的插上和断开USB设备,动态的加载驱动程序。其他普通的外围连接标准,如SCSI设备等必须在关掉主机的情况下才能增加或移走外围设备。2、硬件接口简单,携带方便。USB总线就四根线,其中两根电源线,且设备大多以“小、轻、薄”见长,对用户来说,同样的硬盘,USB硬盘比IDE硬

10、盘要轻一半的重量,在想要随身携带大量数据时,当然USB硬盘会是首要之选了。3、提供了相当全的标准通信协议,就像他的名字一样通用串行通信总线(Universal Serial Bus),基本使用的设备都可以被涵盖,因此简化了开发人员对其开发的流程。4、可扩展性强,每一个主机最多可以携带127个从设备。5、通信速度较快。相对与以前的串行通信协议,像UART、SPI等,USB的通信速度是非常快的,在USB20中,最快可以达到480Mbs。在现在的电力系统中,电表的数据传输还是依靠传统的485总线的方式进行传输,而且在现场施工过程中对采集终端进行程序升级的过程中更多的还是使用传统的RS232进行数据通

11、信,这些传统的通信方式因为其开发简单而被广泛使用,但慢慢的其弊端就暴露出来,如485总线和RS232挂载的设备数目有限,而且其通信速度很慢,因此在现场施工中对采集终端进行程序升级时会浪费很多时间,而且485总线就两根数据线,没有统一的接口,RS232串口的接口线数目太多,不利于小型终端产品使用,而USB规定了统一的接口标准,而且其总线只有4条,山东大学硕士学位论文包括两根电源线,数据通信线就两条,因此,在现在的电力采集系统中有很广泛的应用前景【21。因此,该系统在详细解析了USB通信协议的基础上,针对意法半导体最新推出的基于ARM公司CortexM3架构的STM32处理器上设计了它与PC主机的

12、USB通信协议,先利用CDC标准设备类进行了USB通信实验,然后在此基础上又自己编写Windows驱动程序,最终实现了具有自己通信特点的USB通信,并提供了很好的伸缩性,可以在此基础上进行进一步的开发。12设计主要实现的内容针对传统通信的缺点设计了基于USB的串行数据通信系统,在针对CDC标准设备类的开发过中在Windows操作系统下,将USB设备虚拟成了COM口,也就是可以在上位应用程序中可以像操作COM口来与STM32处理器进行USB通信,这样就可以和以前基于COM口开发的上位应用程序统一结合起来使用,上面有COM口方便操作的通信的优点,下面有USB快速通信的优点,既兼容了以前通信的优点又

13、保留了USB本身的一部分优点。在开发完基于CDC标准设备类的程序后,考虑到往往设备通信过程中可能会遇见一些别的通信特点,比如在传输大量数据过程既想有时能传输大量数据可以不考虑准确性,又想可以传输准确性高的数据,这两个通信特点在现有的通信设备类中没有支持的,这就需要根据自己的特点来开发自己的上位驱动程序,并且为用户层程序留出接口来调用,因此在此基础上自己开发了一个简单的半双工bulk通信特点的USB通信,在此基础上可以进行进一步的扩充和缩减。13论文的组织结构第l章绪论部分主要介绍了系统设计背景及意义;提出了本文的讨论的内容及主要目标,最后说明了论文的整体结构。第2章系统分析及总体设计2山东大学

14、硕士学位论文本章概要地描述了系统的总体功能和设计框架,分别从STM32处理器和PC主机上两方面简单的说明了系统的各部分的功能,最后简单的说明二者的通信过程。第3章在STM32处理器上USB协议的实现详细的介绍了在STM32处理器上怎样实现了它的USB架构,以及详细的程序流程图。第4章在PC主机上USB协议的实现详细的介绍了在PC主机上USB协议的实现,并且详细的介绍了在PC上如何进行USB驱动程序的开发和实现。第5章USB通信功能的实现与测试将STM32处理器和PC主机相连后进行了数据通信的实验和测试,详细介绍了USB数据在STM32处理器和PC主机间的通信过程。第6章设计结论本章是全文工作的

15、总结和对进一步工作的展望。3山东大学硕士学位论文第2章系统总体设计21 STM32处理器上USB协议设计211 STM32处理器概述STM32处理器的内核是ARM公司为要求高性能(125 Dhrystone MIPSMHz)、低成本、低功耗的嵌入式应用专门设计的ARIVCortexTMM3内核,它具如下特占Jm1CortexM3采用了哈佛结构,拥有独立的指令总线和数据总线,可以同时进行取指与数据访问。2有完全基于硬件进行中断处理,最多可减少12个时钟周期数,在实际应用中可减少70中断。3Cortex-M3在支持传统的JTAG基础上更采用了新型的单线调试(SingleWire)技术,专门拿出一个

16、引脚来做调试,从而节约了大笔的调试工具费用。4CortexM3中还集成了大部分存储器控制器,这样工程师可以直接在MCU外连接Flash,降低了设计难度和应用障碍。5CortexM3处理器采用ARMv7M架构,它包括所有的l 6位Thumb指令集和基本的32位Thumb2指令集架构,Cortex-M3处理器不能执行ARM指令。6CortexM3处理器支持两种处理器的操作模式,还支持两级特权操作,大大提高了系统的安全性和稳定性。7他内部集成了硬件乘法器和除法器,在运算效率上大大提高。4山东大学硕士学位论文门l il J圈2-1 STM32处理嚣照片匿图2-2$TM32处理器内部ARM棱结构如上图2

17、1为8TM32处理器的照片,图2-2为STM32处理器内部的基于ARM的CortexM3的核心架构。做为ARM公司最新推出的一款内核其性能比以前的山东人学硕士学位论文ARM核心优秀很多,在上面已经介绍了它的优点,而且价格上比以前的同等性能的处理器要便宜很多。它内部集成了除ALU以外的很多单元,为了调试的方便特别做了一个单线的调试接i:3,当然JTAG接口还是保留的【31。212 USB通信协议的硬件结构图2-3 USB设备框图如上图所示,是集成在STM32F10X处理器内部的USB外围的框图,它主要有以下特征:1符合USB20全速设备的技术规范2可配置1到8个USB端点6山东大学硕士学位论文3

18、CRC(循环冗余校验)生成校验,反向不归零(NRZI)编码解码和位填充4支持同步传输5支持批量同步端点的双缓冲区机制6支持USB挂起恢复操作7帧锁定时钟脉冲生成关于其内部的具体细节将在翻译中进行介绍。图2_4 USB外接电路如上图所示,是从USB控制器引出后的外接电路,其主要是在D+线上接了一个1-5K的上拉电阻,表明这个从设备是一个全速设备,当JP6跳线帽断开时,只要将该电路接入到USB主控制器下的集线器上,集线器就能检测到该设备,当JP6跳线帽插上时,可以通过USB Disconnect引脚控制USB设备的连接和断开【4】。213 USB通信协议的软件结构不论是在进行CDC标准设备类的设计

19、实现还是后来进行的根据自己的通信特点设计的设备类,都是采用了一样的设计架构,分层的设计架构,这样便于程序的移植开发,因为底层的硬件都是一样的,所以在这两个设备类上开发时底层的程序即硬件抽象层程序不需要改变,只是应用层的程序根据具体的功能来实现了一些具体的函数改变了一些特性,所以在两个设备类进行软件设计时改动并不是很大,基本结构框图如图25所示。在该USB从设备的开发中采用了分层的USB设计方案,便于以后的二次开发,7山东大学硕士学位论文开发过程中使用的语言是C语言,编译环境是IAR。下面分别从软件结构图和软件流程图两个方面对USB从设备的软件开发进行介绍。8图25软件结构图USB的库被分成了两

20、层:1USB库核心层:这一层直接和USB的硬件进行通信,并且兼容USB20的规范,是从STM32F固件库中分离出来的库。2应用程序接口层:这一层为用户应用程序提供和底层的USB库核心进行交互的接口。表21列出了USB库核心的各个模块山东大学硕士学位论文表21 USB库核心模块文件 描述usb typeh 在所有的文件中用到的基本数据类型的重定义usbreg(h,c) 硬件抽象层usb intc 中断处理例程usb_irtit(h,C) USB的初始化usbcore(h,c) USB的协议处理(和USB20详细文档说明的第9章兼容)usb_mem(h,c) 数据传输控制usb defh USB传

21、输中的一些数据结构的定义应用程序接口模块提供了一个开发模板,需要根据不同的应用程序进行不同的裁剪。表22列出了应用程序接口中用到的各个模块。表2-2应用程序接口模块文件 描述usbistr(h,c) USB中断处理函数usb confh USB配置文件usb_prop(。11,c) USB应用程序专门定义的属性usb_endpc 非控制端点的中断处理函数usb_pwr(1lc) USB电源管理模块usbdesc(11,c) USB描述符22 PC主机上的USB协议设计221 USB设备在主机上硬件连接图26 USB设备在PC上的挂载9山东大学硕士学位论文图2-6展示了USB设备在PC机上的挂在

22、情况,它被连接在位于USB主控制器内部的根集线器上,该主控制器被连接在PCI总线上。因此在编写PC上的USB驱动程序时会包括USB设备驱动程序、USB总线驱动程序、USB主控制器驱动程序,他们之间相互协作,共同完成主机和USB设备间的数据传输,在Windows操作系统下,总线驱动程序和USB主控制器的驱动程序微软都已经提供了,一般不用自己再进行开发,而设备驱动程序,如果不是标准设备的话往往需要自己编写驱动程序,这些具体细节在第4章中进行详细描述【5J。222在PC主机上USB软件结构在PC进行CDC标准设备类的软件设计时因为是标准的设备类,所以微软提供了usbscrsys驱动程序来跟从硬件设备

23、进行通信,开发人员只需要进行INF文件的编写,以便PC主机识别底层设备并正确的给他加载相应驱动程序,而在根据自己的特点设计USB通信时则需要自己编写驱动程序来识别自己的设备,因此在此主要简单的介绍一下根据自己的通信特点在PC上的驱动程序的软件结构以及用户层的软件结构。10图27在PC主机上的USB驱动程序结构山东大学硕士学位论文USB设备所采用的驱动程序是一种典型的WDM驱动程序。在WDM驱动程序中,即插即用(PnP)管理器负责通知操作系统何时添加(或删除)设备,并使用INF文件来查找新设备的驱动程序。驱动程序基本组成结构如图27所示,包括以下部分:驱动程序的入口和卸载管理:驱动入口程序例程D

24、riverEntryO:处理驱动程序的初始化;驱动程序的卸载则在BulkUsb_DriverUnloadoi函数中进行了处理,释放以前占用的系统资源。即插即用管理:对IRP MJ PNP进行处理,处理PllP设备的添加、删除和停止。读写文件管理:分发例程treat0、veaa0、IOCTLO等,处理用户程序和系统内核发出的各种Io请求;电源管理:处理电源管理请求。系统消息管理:WMI(Windows Management Instrumentation),它是一种系统管理员报告管理信息的协议,这个协议能测量和管理消耗在本地客户机上的资源信息【61o另外,在驱动程序的加载方面,WDM不是通过驱动

25、程序的名称来识别的,而是通过一个符号链接名或一个128 bit的GUID(全局惟一标识符)来识别。WindowsXP运行平台支持两种模式:用户模式和内核模式。用户模式下,应用程序接口调用函数在一些例程的帮助下可完成向设备读写数据功能。操作系统创建一个称为IO请求包(IRP)的数据结构,并将IRP送入设备驱动的一个入121点。而在内核模式下,设备驱动执行IRP并最终完成与硬件的数据访问。驱动程序工作于内核模式,既可以直接访问硬件,也可以通过硬件抽象层提供的一些功能实现对硬件的访问。其功能相对来说没有驱动程序复杂,在此先不做介绍,编写用户程序的主要目的是进行系统的测试,其结构在第4章再详细介绍。山

26、东大学硕士学位论文第3章在STM32处理器上USB协议的实现虽然在系统的设计过程中设计了两种类型的USB通信方式,一种是基于CDC标准设备类的USB通信方式,一种是根据自己的特点设计的一个半双工的bulk通信方式,但在STM32处理器上用的系统结构都是一样的,这在第二章已经简单介绍了,在设计这两种通信方式时,修改只是源文件中的一些函数,以及在中断处理函数中对应的修改,所以在系统的源文件详细说明和系统内部的程序流程图都是一样的,在此统一进行说明【71。31系统中定义源文件详细说明311核心模块1、usb_typeh这个文件定义了库中主要使用的数据类型,这些数据类型依赖于所使用的处理器。2、usb

27、_reg(C,h)usb_regs模块实现了硬件的抽象层,该文件以宏定义的方式提供了USB硬件内部各个功能模块的基地址和偏移量。3、usbint(c,h)usbint模块提供了当有正确的数据传输过来时的中断处理例程,该模块提供了最终的中断处理代码。在设计过程中共设计了两个中断处理函数:1低级中断处理:使用CTIUP()处理函数,主要用于处理简单的中断传输和块传输。2高级中断处理:使用CTR-HP()处理函数,主要用于快速传输,像同步传输。124、usbcore(c,h)usbcore模块是编写的这个库的核心,我用他实现了所有的功能请求的函数,山东大学硕士学位论文像前面提到的中断处理函数的内部调

28、用的函数都在这个文件中编写实现【81。在该库中我根据USB20的标准设备请求进行了相应的函数处理:(1)、GETSTATUS请求用于主机读取设备、接IZl或端点的状态。表31列出了其在SETUP事务8字节数据包中的定义格式。在该请求的数据阶段,USB设备将向主机返回2字节具有特定格式的数据。表3-1 GET_STATUS请求的定义格式bmRequestType bRequest wValue wlndex wLength 数据阶段10000000b O 设备状态1000000lb 00H O 接口 2 接口状态10000010b 端点 端点状态wlndex字段中的“接口“和“端点“的取值分别对

29、应USB设备中接口描述符的bInterfaceNumber字段值和端点描述符的bEndpointAddress字段值。GET STATUS请求只在USB设备处于地址状态和配置状态时有效,如果它指向的接121或端点不存在,USB设备将对其返回STALL握手包【9l。当GET STATUS请求的接收方是设备时,其数据阶段所返回的2字节数据中,只有DO位和D1位是有效的,其它位均被保留,如图31所示。其中,DO位指明USB设备当前是否为自供电的,0表示总线供电、1表示自供电。D1位指明USB设备当前是否支持远程唤醒功能,0表示该功能被禁止、1表示该功能已被使能,其缺省值位O,主机可以使用SET FE

30、ATURE(DEVICE 或REMOTEWAKEUP)CLEAR FEATURE(DEVICE REMOTE WAKEUP)请求来更改位的值。D7 D6 D5 D4 D3 D2 Dl Do保留(置0) 远程唤醒 自供电D15 D14 D13 D12 Dll DlO D9 D8保留(置O)图3-I GET STATUS(Device)请求的返回值山东大学硕士学位论文当GET STATUS请求的接收方是接口时,其数据阶段所返回的2字节数据全被保留,且必须置0,如图32所示。D7 D6 D5 D4 D3 D2 Dl Do保留(置0)D15 D14 D13 D12 D11 DlO D9 D8保留(置0

31、)图3-2 GET STATUS(Interface)请求的返回值当GET STATUS请求的接收方时端点时,其数据阶段所返回的2字节数据中,只有DO位是有效的,其它位均被保留,如图33所示。其中,DO位指明端点的停止特性,1表示该端点已被停止,O表示其未被停止。主机可以使用SET-FEATURE(ENDPOINT_HALT)请求来设置或清除该位的值,其效果与硬件实现时相同。另外,当USB设备接收到SET CoNFIGU凡玎10N或SET INTERFACE请求时,该位将被置0。对于支持数据触发机制的端点,不管其是否处于停止状态,CLEAR_FEATURE(ENDPOINT_HALT)请求都会

32、将其数据触发位初始化为O缺省控制通道不必具有停止特性,但有时它可以使用DO位来表示一个错误状态,如果该位被置1,除GET STATUS请求、SET FEATURE请求和CLEAR FEATURE请求外,该管道将对其它所有标准USB设备请求返回STALL握手包【101。D7 D6 D5 D4 D3 D2 Dl Do保留(置0) 自供电D15 D14 D13 D12 Dll D10 D9 D8保留(置0)图33 GET_STATUS(Endpoint)请求的返回值(2)、CLEARFEATURE请求用于清除或禁止设备、接口或端点的某些特性。表32列出了其在SETUP事务8字节数据包的定义格式。该请

33、求无数据阶段。14山东大学硕士学位论文表3-2 CLEAR FEATURE请求的定义格式bmRequestType bRequest wValue wlndex wLength 数据阶段1 0000000b OlOO0000lb 01H 特性选择符 接口 O 无100000lOb 端点wValue字段指明设备、接口或端点特性选择符的值,以清除或禁止相应的特性,它必须与CLEAR FEATURE请求的接收方相对应。也就是说,如果该请求的接收方时设备,则该字段只能使用设备特性选择符的值;如果接收方时接口,则只能使用接口特性选择符的值;如果接收方时端点,则只能使用端点特性选择符的值。表33列出了US

34、B当前支持的标准特性选择符及其取值。其中,ENDPOINT HALT对应端点的停止特性,DEVICE REMOTE WAKEUP对应USB设备的远程唤醒功能,TEST MODE用于USB设备的测试模式,它不能由CLEAR FEATURE请求来清除或禁止。现在还没有用于接口的特性选择符。表3-3标准特性选择符特性选择符 接收方 值ENDPOINT_HALT 端点 ODEVICEREMOTEWAKEUP 设备 1TESTMODE 设备 2CLEAR FEATURE请求只在USB设备处于地址状态和配置状态时有效,如果它指定的特性不能被清除或它指向的接口或端点不存在,USB设备将对其返回STALL握手

35、包。(3)、SETFEATURE请求用于设置或使能设备、接口或端点的某些特性,它与CLEAR FEATURE请求相对应。表3-4列出了其在SETUP事务8字节数据包中的定义格式。该请求无数据阶段。15山东大学硕士学位论文表34 SET_FEATURE请求的定义格式bmRequestType bRequest wValue wlndex wLength 数据阶段1 0000000b 0 测试选择03H 特性选择 符 0 无1000000lb 符 接口10000010b 端点当wValue字段值为TEST_MODE时,wlndex字段的高位字节指明设备测试选择符的值,其地位字节必须为0这时SETF

36、EATURE请求将置USB设备的上行端口于特定的测试模式,其到测试模式的转换操作发生在该请求的状态阶段结束之后,且必须在3ms内完成。高速USB设备在缺省状态、地址状态和配置状态时都必须支持该请求。表35列出了USB当前支持的测试选择符及其取值。表35测试选择符测试选择符 值 测试选择符 值TeSt J 01H TestPacket 04H1est K 02H TestForceEnable 05HTestSE0NAK 03H除高速USB设备在缺省状态下也能支持SET FEATURE(TEST外,SETFEATURE请求只在USB设备处于地址状态和配置状态时有效,如果该请求所指定的设备特性不能

37、被设置,或它所指向的接口或端点不存在,则USB设备将对其返回STALL握手包,以表示请求处理失败。(4)、SETADDRESS请求用于为USB设备分配一个唯一的设备地址。表3-6列出了其在SETUP事务8字节数据包中的定义格式。该请求无数据阶段。表3-6 SET ADDRESS请求的定义格式bmRequestType bRequest WValue wlndex wLength 数据阶段00000000b 05H 设备地址 0 0 无16wValue字段指明新的设备地址,其取值范围为0-127。当USB设备接收到山东大学硕士学位论文SET ADDRESS请求时,其必须在50ms内完成对该请求的

38、处理,并结束其控制传输的状态阶段;之后再经过2ms的恢复时间,则该设备将开始使用新的设备地址。也就是说,USB设备使用原地址完成对SET ADDRESS请求的处理,而其改变地址操作是在该请求状态阶段结束之后才完成的,这一点不同于其它标准USB设备请求。在USB设备处于缺省状态时,如果其接收到wValue字段值为0的SetAddress请求,则它将仍停留在缺省状态;如果其接收到wValue字段值不为O的SET ADDRESS请求,则它将进入地址状态。在USB设备处于地址状态时,如果其接收到的wValue字段值为0的请求,则它将仍停留在地址状态,但会使用这个新地址。在USB设备处于配置状态时,SE

39、T ADDRESS请求无效。(5)、GET DESCRIPTOR请求用于主机读取指定的描述符。表37列出了其在SETUP事务8字节数据包中的定义格式。在该请求的数据阶段,USB设备将向主机返回指定的描述符。表37 GET DESCRIPTOR请求的定义格式bmRequestType bRequest wValue wlndex wLength 数据阶段l 0000000b 06H 类型和索引 0或语言ID 描述符长度 描述符wValue字段的高位字节指明主机所读取描述符的类型值;地位字节指明描述符的索引值,其只对配置描述符和字符串描述符有效,对于其它描述符低位字节应置0。描述符的索引值适用于U

40、SB设备中存在多个同种类型描述符的情况,其取值范围为0至该类型描述符的个数减l。wlndex字段指明字符串描述符的语言ID,对于其它描述符该字段应置0。wLength字段指明该请求所返回的字节数,如果描述符的长度大于该字段值,则USB设备只返回该描述符,并以一个小于最大长度的数据包或一个空数据包来结束该控制传输的数据阶段。GET DESCRIPTOR请求仅支持三种类型的描述符:设备描述符、配置描述符和字符串描述符。接口描述符、端点描述符、设备类定义描述符和供应商自定义描述符都将做为配置信息,由GET DESCRIPTOR(Configuration)请求随配置描述17山东人学硕士学位论文符一起

41、返回,且返回顺序一般为配置描述符、第1接口的接口描述符和端点描述符、第2接口的接口描述符和端点描述符、设备类定义描述符、供应商自定义描述符。GETDESCRIPTOR请求在USB设备处于缺省状态、地址状态和配置状态时均有效,如果它指定的描述符不存在,USB设备将对其返回STALL握手包。(6)、SET DESCRIPTOR请求用于更新USB设备已有的描述符或向其添加新的描述符。表38列出了其在SETUP事务8字节数据包的定义格式。在该请求的数据阶段,主机将向USB设备发送指定的描述符【11】。表3-8 SET DESCRIPTOR请求的定义格式bmRequestType bRequest WV

42、alue wlndex wLength 数据阶段00000000b 07H 类型和索引 0或语言ID 描述符长度 描述符wValue字段的高位字节指明主机所读取描述符的类型值;低位字节指明描述符的索引值,其中只对配置描述符和字符串描述符有效,对于其它描述符该低位字节应置0。wlndex字段指明字符串描述符的语言ID,对于其它描述符该字段应置0。wLength字段指明该请求将向USB设备发送的字节数1 21。SET_DESCRIPTOR请求仅支持三种类型的描述符:设备描述符、配置描述符和字符串描述符。接口描述符和端点描述符都将作为USB设备配置的一部分在设置配置描述符SET_DESCRIPTOR

43、(Configuration)请求中设置。另外,SETDESCRIPTOR请求时可选的,且它仅在USB设备处于地址状态和配置状态时有效。如果不支持该请求,USB设备将对其返回STALL握手包,以表示请求处理失败。(7)、GETCONFIGURATION请求用于主机读取USB设备当前的配置值。表3-9列出了其在SETUP事务8字节数据包中的定义格式。在该请求的数据阶段,USB设备将向主机返回1字节的配置值。表3-9 GET_CONFIGURATION请求的定义格式bmRequestType bRequest WValue wlndex wLength 数据阶段1 0000000b 08H 0 O

44、 l 配置值18山东大学硕士学位论文在USB设备处于地址状态时,其将对GETCONFIGURATION请求返回0值;在USB设备处于配置状态时,其将返回当前配置描述符中bConfigurationValue字段的值;在USB设备处于缺省状态时,GEtsONFIGURATION请求无效【1 31。(8)、SETCONFIGURATION请求用于为USB设备选择一个合适的配置。表310列出了其在SETUP事务0字节数据包中的定义格式。该请求无数据阶段。表310 SET CONFIGURATION请求的定义格式bmRequestType bRequest 妒沥lue wlndex wLength 数

45、据阶段00000000b 09H 配置值 O 0 无wValue字段的低位字节指明USB设备的配置值,其必须与某一描述符中的bConfigurationValue字段值相匹配,也可以为0;wValue字段的高位字节保留114】。在USB设备处于地址状态时,如果其接收到wValue字段值为0的SET CONFIGURATION请求,则它将仍停留在地址状态;如果其接收到wValue字段值不为0的SET CONFIGI瓜A=rION请求,则它将使用该配置,并进入配置状态。在USB设备处于配置状态时,如果其接收到wValue字段值为0的SET CONFIGURATION请求,则它将进入地址状态;如果其

46、接收到wValue字段值不为0的SET CONFIGURATION请求,则它将仍停留在配置状态,但会使用这个新配置。在USB设备处于缺省状态时,SET CONFIGU砒玎IoN请求无效。(9)、GET INTERFACE请求用于主机读取指定接口的当前可替换设置值,即其接El描述符中bAltemateSetting字段的值。表311列出了其在SETUP事务8字节数据包中的定义格式。在该请求的数据阶段,USB设备将想主机返回1字节的可替换设置值。GET INTERFACE请求只在USB设备处于配置状态时有效。在地址状态,USB设备将对其返回S1、ALL握手包。表3-1 1 GET INTERFAC

47、E请求的定义格式bmRequestType bRequest wValue wlndex wLength 数据阶段1000000lb 0AH 0 接口 l 可替换设置值(10)、SETINTERFACE请求用于为指定接口选择一个合适的可替换设置。表312列出了其在SETUP事务8字节数据包中定义格式。该请求无数据阶段。19山东大学硕士学位论文表312 SET INTERFACE请求的定义格式bmRequestType bRequest WValue wlndex wLength 数据阶段0000000lb OBH 可替换设置值 接口 l 无当USB设备的一个接口在多个可替换设置时,SET IN

48、TERFACE请求使得主机可以为其选择所需要的可替换设置。如果USB设备的某一接口只支持一个缺省的可替换设置,则它将在该请求的状态阶段返回STALL握手包。SET INTERFACE请求只在USB设备处于配置状态时有效,如果它指定的接口或可替换设置不存在,USB设备将对其返回STALL握手包【1 51。312应用程序接口模块1、usb_istr(c)在usb istr模块编写了一个函数USB Istr(),用来从宏观上处理中断,判断是哪种中断类型,然后调用相应的中断处理函数,其判断过程在下面的程序流程图中对其处理过程进行了详细的介绍【1 61。对每一种中断类型我编写了一个回调函数,以XXK C

49、allback命令,例如RESETCallback。2、usbconf(h)usb confh文件是用来定义BTABLE(USB通信过程中用于发送数据的缓冲表)和所有节点在PMA中的地址;并且在这个文件中定义了中断掩码来规定哪些中断可以开启那些中断关闭。3、usb_endp(c)usb_endp模块定义了除端点0(EPO)以外的所有其余7个端点的中断回调函数,这个函数对应的是在有数据正确传输时产生的中断对应的处理,4、usb_prop(c,h)usb_prop模块用来定义在usbcore模块中各个标准响应函数用到的数据结构如Device_Propety、USEkSTANDARD_REQUEST等。5、usb_pwr(c,h)这个模块用于管理USB设备的电源问题。总共编写了四个函数:20山东大学硕士学位论文1Power on():在设备电源打开时进行的相应中断处理2Power off

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报