datasheet
超过460,000+ 应用技术资源下载
pdf

基于ARM核的USB2.0AHB接口IP主机端驱动程序的设计与实现

  • 1星
  • 日期: 2014-03-05
  • 大小: 2.2MB
  • 所需积分:1分
  • 下载次数:1
  • favicon收藏
  • rep举报
  • 分享
  • free评论
标签: arm接口主机驱动驱动程序

本论文以开发基于ARM核的USB2.0-AHB接口IP此项目为依托,致力于在Windows XP操作系统上使用DDK(Driver Development Kit)设计和开发一个基于WDM的主机端驱动程序。开发该驱动程序的目的是为了对该IP进行FPGA测试以及配合设备端驱动程序的开发,该驱动程序能够完成即插即用功能,块传输,同步传输,控制传输以及对Flash的操作五项主要功能。 论文首先介绍了基于WDM的USB驱动程序设计原理,其中包括了从结构到通信流对USB主机系统的介绍,编写WDM驱动程序的基础理论(主要介绍了数个相关的重要概念、驱动程序的基本组成),以及在开发对Flash操作的例程会使用到的Mass Storage类协议的简要介绍。在介绍设计原理后,论文从总体的系统应用环境和结构蓟数据传输、内部模块以及软硬件体系结构几个方面简要描述了该IP的系统设计。接着论文通过分析主机端驱动程序功能需求,提出了驱动程序的总体构架以及分步式的设计流程,具体步骤是先实现驱动程序的正常加载以及基本PnP功能,然后实现块传输、同步传输以及控制传输,最后完成对Flash操作例程的设计。随后论文详细阐述了对上述五项主要功能模块的设计;其中对Flash操作例程的设计是难点,作者通过分析Bulk-Only协议和UFI命令规范,提出程序的详细设计方案。论文最后简要介绍了调试驱动程序的方法,以及驱动程序的测试内容、部分测试结果以及测试结论。 本论文研究对象为基于ARM核的USB2.0-AHB接口IP主机端驱动程序,因为其研究主体是一个基于WDM的主机端驱动程序,因此有其普遍性;但是它以开发基于ARM核的USB2.0-AHB接口IP这个项目为依托,其目的是为项目服务,因此它有其特殊性。它是一项既有普遍性又有特殊性的研究。

电子科技大学 硕士学位论文 基于ARM核的USB2.0-AHB接口IP主机端驱动程序的设计与实现 姓名:程俊 申请学位级别:硕士 专业:信息与通信工程 指导教师:李广军 20070501 摘要 摘要 本论文以开发基于ARM核的USB2.0-AHB接口口此项目为依托,致力于在 Windows XP操作系统上使用DDK(Driver Development Kit)设计和开发一个基于 WDM的主机端驱动程序。开发该驱动程序的目的是为了对该口进行FPGA测试 以及配合设备端驱动程序的开发,该驱动程序能够完成即插即用功能,块传输, 同步传输,控制传输以及对Hash的操作五项主要功能。 论文首先介绍了基于WDM的uSB驱动程序设计原理,其中包括了从结构到 通信流对USB主机系统的介绍,编写WDM驱动程序的基础理论(主要介绍了数 个相关的重要概念、驱动程序的基本组成),以及在开发对Hash操作的例程会使 用到的Mass Storage类协议的简要介绍。在介绍设计原理后,论文从总体的系统应 用环境和结构蓟数据传输、内部模块以及软硬件体系结构几个方面简要描述了该 球的系统设计。接着论文通过分析主机端驱动程序功能需求,提出了驱动程序的 总体构架以及分步式的设计流程,具体步骤是先实现驱动程序的正常加载以及基 本PnP功能,然后实现块传输、同步传输以及控制传输,最后完成对Hash操作例 程的设计。随后论文详细阐述了对上述五项主要功能模块的设计;其中对Flash操 作例程的设计是难点,作者通过分析Bulk-Only协议和UFI命令规范,提出程序的 详细设计方案。论文最后简要介绍了调试驱动程序的方法,以及驱动程序的测试 内容、部分测试结果以及测试结论。 本论文研究对象为基于ARM核的USB2.0-AHB接口口主机端驱动程序,因 为其研究主体是一个基于WDM的主机端驱动程序,因此有其普遍性;但是它以 开发基于ARM核的USB2.0-AHB接口m这个项习为依托,其目的是为项目服务, 因此它有其特殊性。它是一项既有普遍性又有特殊性的研究。 关键词: USB,WDM,Mass Storage类,DDK,主机端驱动程序 Abstract Abstract This thesis focuses on a host diver which is based Oll WDM and developed in Windows XP OS,with the use of DDIC And it is based oil a project to develop all ARM-based USB2.0-AHB interface IP.The development purpose of this driver is to help complete FPGA verification and the device driver development.This driver has five main functions,includmg PnP function,bulk仃a璐fcr’isochronous transfer,control transfer and processing Flash operation. First,this paper introduces the design principle of WDM-based USB diver, including a bricf presentation about USB host system,basic theory of programming WDM driver,勰well a8 a bIicf introduction about Mass Storage Class specification which will be used in processing Flash operation.After giving an introduction about the design principle,it describes the system design of this瑕from appficafion environment and integral structtⅡe to data transfer,inner models and software and hardware system structure.By analyzing the Ile..2ds of the diver,it gives out the construction of it and the design process.The step is to realize the load of diver and the PnP function at first,and later to make it possible to deal with bulk transfer,isochronons transfer and control transfer,finally to complete the design of processing Flash operation.Then it expounds the design of the five function models.The design of processing Flash operation is a difficult problem;by making all analysis of Bulk-Only protocol and UFI command specification,the writer provides a specific d髂ign solution of it.At last,it specifies the method to debug the driver,and gives test contents,a part test results,as well as test conclusion. The design object of this thesis is a host driver of an ARM-based USB2.0-AHB interface m Because the main body of it is a WDM-based host diver,it has umvemali哆; but as a project-based driver,it has particularity.So it is a research of universality and particularity. Keywords:USB,WDM,Mass Storage Class,DDK,host driver n 图目录 图目录 图2-1 USB主机的结构………………………………………… ………………………4 图2-2 USB传输管理………………………………… ….…………………..6 图2-3IRF结构………………… 图2-4 IRP堆栈……………………………………。 8 COMMAND/D删TA=丌IS流程………。 图2-5驱动程序对象的结构……………………… 图2-6 ….16 图3-1基于ARM核的USB2.0-AHB桥的系统构成图…………. ..22 图3-2非DMA方式数据传输……………….. 图3.3 SLAVE DMA方式数据传输…………… ……...………....….……..24 图34 MASTER DMA方式数据传输………… ………………………….…24 图3-5寄存器读写 ………25 图3-6 USB逻辑处理流程图…………….. …26 图4—1主机端驱动程序的基本组成例程 图5-1 PnP设备状态转换图…………。 图5-2处理启动设备请求流程图……. 图5-3对设备的配置流程…………。 图54处理停止设备请求流程图… 图5-5处理删除设备请求流程图… 强剪∞ 图5-6获取设备描述符的流程…… 图5-7获取端点状态的流程……… 图5-8发送CBW操作流程图…… 图5-9数据传输操作流程图 图5.10读取Csw的流程图………………………… 图6-1主机端驱动程序测试环境图………………… 图6-2 USB设备的相关信息……………………… 够舛弱骝 图6.3通过查询方式安全卸载设备………………………………………………….59 图6_4从设备获取的设备描述符…。 图6.5写入数据 V玎 图目录 图6-6读取数据……………………………………………………………………….62 图6.7发送非法的CBW………………………………………………………………63 VUI 表目录 表目录 表2-1分发例程…… 表2-2 IRP—MJ—POWER的次功能代码 表2.3 Win32函数对应的IRP主要功能代码 表2-4 Command Block Wrapper 表2-5 Command Status Wrapper 表2-6命令块状态值 表2-7 UFI典型命令块结构 表4-1主机端驱动程序功能介绍……………… 表5.1标准USB设备请求…………… ……………..13 ……………..14 …...……………….20 ….…………………31 IX 英文缩写 USB IP DDK WDM UFI PllP URB CBW CSW 缩略词表 缩略词表 英文全称 Universal Serial Bus Intellectual Properly Driver Development Kit W。mdows Driver Model USB Floppy Interface Plug and Play USB Request Block Command Block Wrapper Command Status Wrapper 中文释义 通刖串行总线 知识产权 驱动程序开发,l:贝包 Windows驱动程序模型 USB软驱接口 即插即用 USB请求块 命令块包 命令状态包 X 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作 及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地方 外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为 获得电子科技大学或其它教育机构的学位或证书而使用过的材料。与 我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的 说明并表示谢意。 签名: 日期:2∞7年』月波罚 关于论文使用授权的说明 本学位论文作者完全了解电子科技大学有关保留、使用学位论文 的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘, 允许论文被查阅和借阅。本人授权电子科技大学可以将学位论文的全 部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描 等复制手段保存、汇编学位论文。 (保密的学位论文在解密后应遵守此规定) 签名;撤 第一章绪论 第一章 绪论 1.1基于ARM核开发USB接口IP的技术前景 随着半导体工艺的飞速发展,系统芯片(SOC)逐渐成为集成电路设计的主 流发展趋势。而基于ARM体系结构是SOC系统设计的主流,这其中包括选用ARM 处理器核(如ARM7,ARM9等)和总线AMBA。AMBA(ARMMicrocontrollerBus Architc,cturc)片上总线是SOC体系结构设计的开放标准。由于AMBA被越来越 多的公司采用,已迅速成为SOC结构和IP库开发的标准。AMBA总线又分为AHB, ASB,APB三种总线规范。其中AHB总线为系统总线,用于连接高性能系统模块。 它具有高带宽的数据传送速率,满足高性能的可综合设计要求,适合于嵌入式处 理器与高性能外围设备、片内存储器及接口功能单元的连接,正是这些优点使其 成为了新一代片上总线的主流【1H6J。 SOC技术是超大规模集成电路发展的必然趋势和主流,它以超深亚微米工艺 和口核复用技术为支撑。口核的设计和制造是SOC技术中最为关键的部分。单 个系统芯片上要实现的功能非常复杂,如果芯片上的所有功能元件都从头开始设 计,所需要的工作量将非常大。所以EDA工具大多支持P库的使用,在腰库中 包含已经通过验证的IP模块。这样,在设计过程中需要某功能模块时,直接从口 库中调出该口模块即可,使得设计人员的主要精力集中到系统功能的实现和功能 模块之间的关系上,从而加快芯片的设计过程【5】16】。而USB2.0(通用串行总线) 接口,具有级连设各多、传输速度快以及支持热插拔技术等优点,它已经成为应 用最广泛的接I:1之_171,因此基于ARM核开发USB2.0接121 IP具有巨大的使用价 值和应用前景。 1.2课题任务 本课题是由电子科技大学与国内某著名Ic设计公司的合作项目,开发基于 ARM核SOC系统的USB2.0接口IP,本论文属于该课题的一部分。 本研究工作中基于ARM核的USB2.0-AHB接口m主要实现以下功能: ≯与高速USB2.0规范兼容,并可使设备能向下兼容USBI.1产品; 电子科技大学硕七学位论文 》与USB2.0 UTMI(Transceiver Macrocell Interface)和ULPI接口规范兼容; 》适应USB2.0PHY操作; >芯片内部的USB传输支持12Mb/s、480Mb/s模式; 》灵活的端设备配置: >支持AMBARev 2.0中规定的AItB总线协议; >内置DMA控制器; >减少CPU利用率,采用多DMA传输技术; >业务上实现u盘功能,支持Windows XP操作系统。 1。3开发主机端驱动程序的目的 首先,USB2.0.AHB接口IP在通过EDA验证后,将进行FPGA测试,而FPGA 测试包括寄存器测试、通道测试和业务测试,除了业务测试使用Windows XP自带 u盘驱动外,其它两种测试都需要主机按照测试需要对设备各个管道进行操作. 其次,基于u盘应用的USB2.0-AHB接口控制芯片软件所要完成的操作包括: 处理USB协议;进行Bulk-Only传输控制;解析u兀指令;申请内存建立虚拟u 盘。由此可见该软件需要完成的工作量很大,需要分步骤开发,而它的验证需要 测试人员通过主机端驱动程序发送数据到设备,比如通过同步管道发送同步数据, 通过块传输管道发送带有各种UFI命令的CBW等等。 由此可见,开发出方便测试的主机端驱动程序以及测试应用程序是必要的, 第四章将详细介绍主机端驱动程序的功能。 1.4本人完成的工作 》参与规格书的制定,并按照项目规格书设计FPGA测试方案; >研究使用DDK在Windows XP下开发USB驱动程序的方法,并根据FPGA 测试需要以及设备端驱动程序开发需要制定出主机端驱动程序的设计方 案; 》开发主机端驱动程序以及相应的测试应用程序,并对其进行调试以及测 试。 2 1.5论文结构及内容安排 第一章绪论 本论文第一章主要介绍课题背景和任务,研究目的,以及本人完成的主要工 作;第二章描述了基于WDM的USB驱动程序设计原理,对USB主机系统、WDM 驱动程序基础理论以及Mass Storage类协议的基础知识做了适当阐述;第三章对整 个项目从整体结构设计到数据传输方式设计,从内部模块设计到软硬件结构设计 做了简要的介绍。第四章通过对主机端驱动程序的需求分析,提出了主机端驱动 程序的总体构架设计,最后给出总体的设计流程。第五章选取了几个重要的模块 设计进行介绍,包括1RP MJ PNP的处理例程,控制传输例程,块传输例程,对 Flash操作例程,以及同步传输例程。第六章介绍了主机端驱动程序的调试方法并 给出了对主机端驱动程序的测试数据以及结果分析。第七章对论文的工作做了总 结,并展望了未来应该开展的工作。 3 电子科技大学硕十学位论文 第二章 基于WDM的USB驱动程序设计原理 应用程序要访问PC机下的硬件设备必须通过驱动程序来实现,WDM是微软 所推崇的一种支持即插即用的驱动程序模型,而基于ARM核的USB2.0-AHB接口 IP其应用环境是一个即插即用的USB设备,因此需要在主机端丌发出基于WDM 的USB驱动程序来实现主机和设备的通信。本章将先介绍USB主机系统和WDM 驱动程序基础理论,然后对Mass Storage类协议进行简要介绍,为介绍对Flash的 操作例程的实现做好理论准备。 2.1 USB主机系统概述 2.1.1 U¥B主机系统的结构 主机 互连 管道 下 圈2—1 USB主机的结构 通信流 4 第二牵基于WDM的USB驱动程序设计原理 图2.1为USB主机的系统结构图,由图所示,在USB系统中,USB主机可被 划分为三个功能模块:USB总线接口、USB系统软件和客户软件。 USB总线接口处理电气及协议层的互联,主要是指以主机控制器为核心的硬 件的部分,其中包括串行接口引擎(SIE),以实现数据的串并转换、产生帧起始 包等功能。USB总线接口包括USB主控制器和根集线器两部分,其中根集线器为 USB系统提供连接起点;USB主控制器负责完成主机和USB设备间数据的实际传 输。 USB系统软件负责和USB逻辑设备进行配置通信,并管理客户软件启动的 USB数据传输。它对USB主控制器的硬件进行抽象,并提供USBDI通信接口, 以简化客户软件和USB设备功能单元之间的通信机制。 客户软件负责和USB设备的功能单元进行通信,以实现USB设备的特定功能。 但它不能直接访问功能单元,其与USB设备闻的通信必须通过USB系统软件和 USB总线接口才能实现[71191110H14ll切. 2.1.2 USB通信流 在USB总线上,所有与USB设备功能单元的数据传输都是由客户软件启动的, 而且必须经过主机的USB系统软件和USB总线接口模块才能将数据发送到USB 设备,其传输过程如下图2-2所示。 图中的向下箭头表示了客户软件向USB设备发送数据的情况,其传输步骤如 下: (1)客户软件把要传输的数据放入数据缓冲区,并向USB总线驱动程序发 出IRP(I/o请求包),以请求数据传输; (2)USB总线驱动程序响应客户软件发出的IRP,并将其中的数据转化为一 个个具有USB格式的事务处理,然后将其向下传递; (3)USB主控制器驱动程序负责为这些事务处理建立一系列以帧,/J、帧为单 位的事务处理列表,并保证其不会超过USB的带宽; (4)USB主控制器负责读取事务处理列表,并将其中的事务处理以信息包 为单位发送到USB总线上,并且传输速率可以是低速、全速或高速; (5)USB设备接收到这些信息包后,SIE自动将其解包并将数据放入指定端 点的接收缓冲区内,由芯片固件对其处理。 同样,客户软件在接收USB设备发来的数据时也必须经过上诉四个软件实体 5 f711s1117l 电子科技大学硕士学位论文 区 囤 幽2.2 USB传输管理 2.2 WDM驱动程序基础理论 WDM采用分层驱动的方法,即在用户应用程序和硬件设备之间存在着几个不 同的驱动程序,每个驱动程序对应一层,且不同层上的驱动程序可以相互调用。 2.2.1关于WDM驱动程序的几个重要概念 2.2.1.1帅M驱动程序的分层 为适应即插即用系统,WDM重新定义了驱动程序的分层结构,其主要包括如 下三种类型的驱动程序。 1.总线驱动程序 负责驱动I/O总线,处理总线上的全部事务,控制对其总线上所有设备的访问。 计算机上每种类型的总线都需要一个总线驱动程序,它是必不可少的。如果某台 计算机上包含有多种同种类型的总线,则只需要一个总线驱动程序就可以同时驱 动它们。 2.功能驱动程序 用于驱动一个单独的设备,控制并实现该设备的主要功能,它是设备的主要 6 第二章基于WDM的USB驱动程序设计原理 驱动程序,也是必不可少的。对于一个设备,PnP管理器最多只能为其加载一个功 能驱动程序,但一个功能驱动程序能同时为多个设备服务。 3.过滤驱动程序 用于过滤发向设备、设备类或总线的I/O请求。它是可选的,即一个设备可以 拥有零个或多个过滤驱动程序。一个过滤驱动程序可同时服务于多个设备,其又 可被进一步划分为总线过滤驱动程序、上层过滤驱动程序和下层过滤驱动程序。 WDM驱动程序的分层结构也被称为WDM驱动程序栈,它指明了各种类型驱 动程序之间的关系。用户请求总是由WDM驱动程序栈的顶部进入。即当用户向 某个设备发出请求对,I/O管理器保证将这些请求都发送到其驱动程序栈的顶郁, 这样上层过滤驱动程序或功能驱动程序将首先处理这些请求171117J【261吲。 2.2.1.2设备对象和设备栈 WDM驱动程序对其控制的每个设备都要建立~个设备对象,以代表其操纵的 功能单元。从即插即用的角度看,设备对象可分为3种类型。 ·PDO(Physical Device Object);物理设备对象,相对于总线驱动程序而言, 它代表一个总线上的设备。 ●FDO(Functional Device Object):功能设备对象,相对于功能驱动程序而 言,它代表一个设备。 ●filter DO(Filter Device Objec-O:过滤设备对象,相对于过滤驱动程序而 言,它代表一个设备。 这3种设备对象具有相同的数据结构(DEvICE 0BJECT),但它们可以具有 不同的设备扩展(DEVICE EXTENSION),后面章节将详细介绍这两种数据结构。 根据WDM驱动程序的分层,每个驱动程序所建立的设备对象也就有了一定 的层次关系,这被称为设备对象栈(或设备栈),它代表驱动程序处理设备FO请 求的颓序例121[trlllSlll91。 2.2.1.3 I/0请求包(1RP) 对于支持WDM驱动程序的Windows操作系统,其I/O请求大多是包驱动的, 当I/o管理器接收到一个I/O请求时,将首先为其分配一个IRP并进行初始化,然 后把它传递到相应驱动程序栈的顶层,交给该设备驱动程序处理。有时一个独立 的IRP可能需要穿越几层驱动程序,有时也可能需要在驱动程序内部建立新的 IRPs,并把它们传递给其他层的驱动程序。 7 电子科技大学硕士学位论文 1.IRP的数据结构 IRP是从系统非分页式内存池中分配的一个数据结构,它包含一个固定大小的 首部和一个可变大小的“堆栈”,如图2-3所示。其中,首部含有IRP自身的属性: 堆栈含有与该I/0请求相关的参数,由一个或多个“I/0栈单元”组成。 I IRP 首部 loStatus l l 110栈啦元 ————叫 驱动程序i(顶层) I 堆栈 I/O栈衅元 —————叫 驱动程序2 I I I/0栈m元 —————叫 驱动程序3(底层) l 图2-3 IRP结构 (1)IRP首部 IRP首部包含怕请求的通用管理信息,长度是固定的,驱动程序只能访问其 某些字段。 (2)1RP堆栈 图2-4 IRP堆栈 图2-4为IRP堆栈结构图,如图所示,IRP堆栈由1个或多个I/O栈单元组成, 且它们都采用IO._STACK_LOCA缸ON结构,其内部包含该I/0请求的函数代码和 参数。在IRP堆栈中,其∞l栈单元的个数不是固定的,它的个数等于参与该FO 请求的驱动程序个数,且每层驱动程序只能访问自己所对应的I/O栈单元. 当某驱动程序把1个1RP传递给其下层驱动程序时,它必须首先在其对应I/O 8 第二章基于WDM的USB驱动程序设计原理 栈单元的下面建立1个新的I/0栈单元,I/0管理器会自动压入旧的I/0栈单元的 指针,以使该下层驱动程序指向其新的I/O栈单元。当下层驱动程序释放该IRP 时,旧I/O栈单元的指针将被弹出,以再次指向其原驱动程序。 2.处理mP FO管理器为驱动程序提供了一些IRP处理函数,根据IRP的组成结构,其可 分为两类,一类用于处理整个IRP,一类专门用于处理I/0栈单元。 驱动程序栈对IRP的处理操作大致可以分为三种基本类型:直接处理型、向 下传递型和独立构造型,其他各种情况都是这三种基本情况的组合。 (1)直接处理型 当驱动程序自己能够处理所接收到的IRP时,它将直接处理这个IRP,处理完 毕时,它会调用loCompleteRequest函数,之后该IRP将沿驱动程序栈向上传递, 直到它弹出栈顶,回到用户。 (2)向下传递型 当驱动程序需要把所接收到的IRP传递给其下层驱动程序时.它将“向下传 递”这个IRP。这时,驱动程序可能对该IRP不作任何处理或稍加修改就向下传递, 也可能等其下层驱动程序结束对该IRP的处理后,再接着处理它。 (3)独立构造型 独立构造型是指驱动程序需要创建一个新的IRP,并将它沿驱动程序栈向下传 递【711151。 2.2.1.4驱动程序对象 I 习设备对象E 一设备扩展卜 驱动程序对象 设备对象 Drivednit DriverStartlo DriverUnload 爿善芋 ,一Unl。ad例程 MajorFunction[] 、叫 分发例程 图2-5驱动程序对象的结构 Windows操作系统所加载的每个WDM驱动程序都有一个驱动程序对象,它 是驱动程序的一个镜像,其内部包含指向不同驱动程序例程的指针。当I/0管理器 9 电子科技大学硕十学位论文 需要调用这些例程时(DriverEntry除外),它将使用与该设备相关联的驱动程序对 象来查找,图2.5展示了驱动程序对象的结构以及内部所指向的驱动程序例程。 驱动程序对象采用的数据结构时DRIVER—OBJECT,与其他对象不一样,I,O 管理器没有提供对其进行操作的函数,各个字段的值均由DriverEntry例程直接设 置。 当操作系统加载一个驱动程序时,FO管理器负责为其建立一个驱动程序对 象。在驱动程序的初始化过程中,它的DfiverEntry例程会把其他驱动程序例程 (Unload、Startlo等)的指针装入到其驱动程序对象中,以便I/0管理器的调用 硎1811191。 2.2.1.5设备扩展 设备扩展是与设备对象相关的另一重要的数据结构(DEVICE_EXTENSION), 用于保存特定设备的一些专用信息。它通常出驱动丌发人员根据具体情况自行定 义,其长度和内容均不固定,但一般都含有设备对象的反向指针。 在加载驱动程序时,操作系统会为其设备扩展分配一块内存空问,I/O管理器 会自动把它和设备对象连接起来。驱动程序把设备的状态保存在设备扩展中,可 以避免在其例程中使用全局变量和静态变量,这样符合驱动程序的可重入性 17111911261。 2.2.2 WDM驱动程序的基本组成 简单地说,驱动程序是一些例程的集合,它们被动地存在,等待主机系统软 件(PnP管理器、I,O管理器、电源管理器等)来调用或者激活它们。具体驱动程 序不同,其所包含的例程也不同,本驱动程序主要包括以下五个例程:驱动程序 入口例程、即插即用例程、分发例程、电源管理例程以及卸载例程|7111311181【1叭。 2.2.2.1驱动程序入口例程 正如用户态的应用程序,有个mainOA,N--样,驱动程序也有一个相应的入口 函数DdverEntry0,它是由I/0管理器在驱动程序加载时调用。它有2个入口参数, 一个是DriverObject(指向驱动对象的指针),一个是RegistryPath(指向一个标示 驱动注册键路径的无符号字符串)。该函数的功能主要是设置驱动程序对象 DriverObject中指向各个例程的指针。 DdverObject给出了到DriverObject->HardwareDatabase的路径, 10 第二章基于WDM的USB驱动程序设计原理 HardwareDatabase指向一个无符号字符串,该字符串标示了到注册表中的 LRegistryLMachine\l-lardware树的路径。 Registr3,Path指向的注册路径字符串使用的格式是 源e豳田狮achine、Systc醯蕊ⅡentContToIset、Servicc=蚤D巾髓N啪e,驱动可以使用这 个路径来存储驱动特定的信息。DriverEntry例程需拷贝一份这个路径(而不是指 向该路径的指针),因为在DriverEntry例程完成后,FO管理器会释放这个路径。 2.2.2.2即插即用例程 从用户的角度来看,即插即用是很容易理解的,当连接某个新设备时,Windows 会自动识别,并提示用户选择正确的驱动程序,之后它就可以被使用了;当设备 被断开时,W'mdows将检测到这个事件并作相关处理,不需要用户的干预。 从系统内核的角度来看,为了实现设备的即插即用功能,PnP管理器必须向该 设备发送一系列PnP IRP。这些PnP IRP具有相同的主功能代码瓜P MJ PNP,但 其可以使用不同的次功能代码和不同的参数。 从驱动开发人员的角度来看,即插即用设备的驱动程序应该包括下列5个基 本功能: (1)处理设备的添加和删除; (2)处理设备的资源分配; (3)处理查询停止和查询删除消息; 《∞处理停止设备消息; (5)处理删除设备消息。 这些功能都是由驱动程序的即插即用例程来完成的,包括一个AddDevice例 程和一个IRP—MJ—PNP处理例程。其中AddDevice例程负责完成设备的添加, 1RP—MJ—PNP处理例程负责处理PnP管理器向其发出的PIIP消息. 1.AddDevice例程 任何支持PnP的驱动程序都必须有这个例程。它的入口参数是DriverObject 和PhysiealDcviceObjeet(物理设备对象,由下层USB总线驱动建立)。 在设备驱动程序迸行安装的过程中,系统进入DriverEntry后,将立即调用 AddDevice,以便向操作系统中添加设备对象。该函数要做的主要工作有; ·调用IoCreateDe,≯iee函数来建立一个Usb Storage的功能设备对象(H)o), 并同时指定设备类型以及设备扩展对象的大小; ●使用IoRegisterDeviceInteffaee来注册设备的功能,以及创建一个设备的符 电子科技大学硕七学位论文 号链接,应用程序可以用它来打开该设备: ●在设备扩展中保存指向设备的PDO的指针; ●在设备扩展中定义标准位来跟踪设备的某些PnP状态,例如设备中止,移 除或者意外删除: ●对设备的系统电源状态进行配簧; ·在设备扩展中创建或者初始化驱动来管理设备的其它资源,包括自旋锁, 事件,队列等等; ·调用loAttachDeviceToDeviceStack函数将该功能设备对象(FDO)连接到 物理设备对象上,并保存IoAttachDeviceToDeviceStack函数返回的指针. 这个指针指向下一层驱动的设备对象,在使用IoCallDriver和PoCallDriver 来把IRP向下传递给设备栈的时候将会使用此指针; ●清除在FDO中的DO INITIALIZ 2.mP MJ PNP处理例程 删除设备并释放其所占资源;.DVICE: 启动设备并为其分配资源;_DVICE: lNG标志位。_DEVICE IRP—MJ_PNP处理例程的函数有2个参数DeviceObjecl和hp,主要是对 MajorFunction为IRP M.1 PNP的一系列IRP的处理,这些IRP都是由PnP管理器 发出的。该例程在收到PnP IRP后,先使用loOetCurrentIrpStackLocation函数获取 I/O栈单元的指针,然后通过分析I/O栈单元中的MinorFunction来判断将该1RP 交给某个具体的处理予例程。下面简单介绍下本驱动程序将按MinorFunction对如 下几个IRP进行处理,后面章节将会对如何处理这些PnP傲更详细的介绍: IRP MN START IRP MN STOP DEVICE: 停止设备并进行资源的重新分配; IRP_MN_OUERY REMOVE DEVICE:查询设备能否被删除; IRP_MN_QUERY_STOP_DEVICE:查询设备能否被停止; IRP MN REMOVE IRP MN CANCEL_REMOVE_DEVICE."取消删除设备要求; 1RP MN CANCEL IRP MN SURPRISE_REMOVAL:设备被意外删除; IRP MN_QUERY CAPABILITIES:查询设备的功能及性能指标等。 2.2.2.3分发例程 驱动程序的分发例程主要用于处理用户软件发出的各种I/O请求,并为用户提 供操纵设备的接口。即用户的Win32应用程序将通过该分发例程与特定的设备进 第二章基于WDM的USB驱动程序设计原理 行通信。用户软件发出的I/O请求也是以IRP的形式传递给驱动程序。 如表2-1所示,本驱动程序的分发例程需要处理的IRP有IRP—MJ—CREATE, IRP—MJ—CLOSE,IRP—MJ—CLEAN,IRP~MJ—DEVICE_CONTROL。 表2-1分笈例程 分发例程 IRP主功能代码 Usb DispatchCreate Usb DispatchClose IRP—.MJ—。CREATE IRP_MJ CLOSE Usb_DispatchClean Usb_DispatchDevCtrl IRP——MJ..CLEAN IRP_MJ DEVICE CONTROL 2.2.2.4电源管理例程 WDM驱动程序支持对设备电源的管理,如它可以改变设备的电源使用策略以 适应系统电源状态的变化,或在设备处于空闲状态时减少其电源消耗等。系统的 电源管理器会向驱动程序发出主功能代码为IRP—MJ—POWER的IRP,以对设备进 行电源管理。该IRP有4个次功能代码,见表2-2. 表2-2 1RP_MJ_POWER的次功能代码 次功能代码 说明 IRP_MN SET POWER 设置系统或设备电源状态 IRP_MN QUERY_POWER IRP MN WAIT WAKE 查询能否更改系统或设备电源状态 响应外部事件.以唤醒设备 IRP—MN—POWER_sEQUENCE 确认设备是否进入指定电源状态 本驱动程序的电源管理例程的基本方案如下: (1)首先判断设备状态,如果设备处于断开状态,那么就通知电源管理器继 续传电源IRP,而且把该IRP传递回给电源管理器;如果设备处于未启 动状态,那么在通知电源管理器继续传电源IRP后,把该IRP向下传递。 (2)如果设备已经启动,再根据IRP的堆栈指向的MinorFunction以及 Parameters.Power.Type来判断把该IRP传递给哪个处理铡程。 电子科技人学硕七学伊论文 2.2.2.5卸载例程 一般情况下,驱动程序在加载之后会一直保存在系统中,如果需要卸载驱动 程序,系统必须调用其卸载例程。驱动程序不同,卸载例程完成的功能也不同, 通常其应该完成下列5项工作: (1)把设备的状态保存到注册表中,以便在下一次加载驱动程序时,设备可 以恢复到最近保存的状态; (2)如果使用了中断,则必须禁止设备,并断开它们和中断对象的连接; (3)释放驱动程序所占用的任何内存空问; (∞删除其符号链接名或全局惟一描述祷: (5)删除设备对象本身。 因为WDM驱动程序支持即插即用功能,所以其卸载例程的大部分功能都能 在IRP MN.REMOVE DEVICE的处理例程中实现,而卸载例程可能什么都不做, 本驱动程序的卸载例程仅仅释放了rcgistryPath。 2.2.3 w明驱动程序和应用程序之间的通信 虽然驱动程序是为设备的硬件层编程服务的,但同样需要提供和应用程序进 行通信的能力,从而最终达到应用程序控制设备的目的。 在Windows中,应用程序实现与WDM通信的过程是:应用程序先用CrcateFile 函数打开设备,然后用DcviccloControi和WDM进行通信,包括扶WDM中读取 和写数据给WDM两种情况,也可以用ReadFile从WDM中读数据,或者用WriteFile 写书据给WDM。当应用程序退出时,用CloseHandle关闭设备。这将产生对应于 此设备对象的相应IRP,这种关系如表2-3所利26】I翻。 表2-3 Win32函数对应的IRP主要功能代码 Win32函数 IRP主功能代码 CreateFile RcadFile WriccFne IRP——MJ—.CREATE IRP—。MJ—.READ 礅蛳奠RITE DeviceloControl 1RP M1 DEVICE_CONTROL CloseHandle IRP—MJ—CLOSE,IRP_MJ CLEANUP 14 第二章基于WDM的USB驱动程序设计原理 2.3 Mass Storage类协议 主机中的类协议设备驱动程序和用户软件构成主机系统的客户层,直接面向 不同的USB设备。而不同的设备分属不同的设备类,因此USB主机针对不同的设 备需要具有不同的类协议设备驱动程序。对于存储类设备普遍使用的是海量存储 设备类驱动程序。 USB组织定义了海量存储设备类(Mass Storage Class)的规范,这个类规范 包括四个独立的子类规范,即: (1)USB Mass Storage Class Control/Bulk/Interrupt(CBI)Transport; (2)USB Mass Storage Class Bulk-Only Transporh (3)USB Mass Storage ClassATACommand Block; (4)USB Mass Storage Class UFI Command Specification· 前两个子规范定义了数据,命令,状态在USB上的传输方法。Bulk-Only传输规 范仅仅使用Bulk端点传送数据,命令,状态,CBI传输规范则使用 Control/Bulk/Interrupt三种类型的端点进行数据/命令/状态传送。在本设计系统中采 用的传输方式为Bulk-Only传输。 后两个子规范则定义了存储介质的操作命令。ATA命令规范用于硬盘,UFI 命令规范是针对USB移动存储,其中就包括Flash闪存,因此符合系统设计的要 求[∞l-[Ul。 2.3.1 Bulk叼nIy传输协议 Bulk-Only传输是专门针对主机和大容量存储设备之间的数据传输一种协议。 通信包括以下几种形式: (1)主机通过Bulk Out端点发送CBW; (2)主机通过Bulk Out端点发送文件数据; (3)主机通过Bulk Out端点发送其它设置/状态数据; (4)主机通过Bulk In端点接收CSW; (5)主机通过Bulk In端点接收文件数据: (6)主机通过Bulk In端点接收其它设置,状态数据。 2.3.1.1 COMMAND/DAT^/STATuS协议 图2-6是Bulk-Only定义的命令传输、数据传输和状态传输的 屯子科技大学硕士学位论文 “COMMAND/DATA/STATUS流程”。它定义了一个以主机端发送的CBW为主导, 设备端依靠发送CSW配合的数据和命令传输机制。每一个数据或命令传输的流程 都是在主机端准备好之后,以CBW为通信丌始的标志,借助设备可以理解的命令 内容,得到设备的响应或者是主机于设备端的数据收发,在一个“成功”的CSW 返回之后,主机端回到准备好新的通信的状态。 蹦2-6 COMMAND/DAl.A/STAlllS流程 1.Command Block Wrapper(CBW) CBW为一定长(31byte)的数据包。数据报文定义了一些与usb相关的字段, 格式如表2.4所示。 \7 表“Command Block Wrapper ‘ S 4 3 2 l O O-3 dCBWSignature 4-7 dCBWTag 8-ll dCBWDataTransferLength 12 bmCBWFlags 13 Reserved bCB、^,l lIN 14 15.30 Reserved bCBWCBLength CB晡rcB 各字段的意义如下: 16 第二章基于WDM的USB驱动程序设计原理 dCBWSignaturc:数字签名,CBW的开始标志,值为43425355h,指明这是一 个CBW。 dCBWTag:主机发出的COMMAND块标签。设备需要根据相应的CBW响应, 填充dCSWTag字段于CSW,并将CSW返回给主机。 dCBWDataTransferLength:本次CBW希望Bulk-out/Bulk-in端点传送,接收的 数据长度。如果长度为0,本次传输无数据传输,可忽略bmCBWFlags。 bmCBWFlags:此域各个bit的定义如下: Bit7:Direction,数据传输方向标志{ 0:数据传输方向由主机至设备, I:数据传输方向由设备至主机。 BinBit6:主机应设置此位为0。 bCBwLUN:主机设置,固件不需要对其进行处理。 bCBWCI七ngth: CBWcB字段有效长度,有效范围为1至16。 CBWCB:设备所要响应的命令.设备先检查该段中长度为bCBWCLength的 子段中的命令是否为bInterfaceSubClass中所定义的命令类型。若是且长度小于16, 则设备忽略掉CBWCB段中从(15+bCBWCLength--1)至最后的数据。 2.Command Status Wrapper(CSW) CSW为一定长(13Byte)的数据包。数据报文定义了一些与USB相关的字段。 格式如表2-5所示。 表2-5 Command Status Wrapper \ 7l6 5I4 3 2 l O 0-3 dCSWSignature 毒-7 dCSWTag &n dCSWDataResidue 12 bCSWStatus 各字段的含义; dCSWSignature:数字签名,CSW的开始标志,值为53425355h,指明这是一 个CSW. dCSWTag:此字段需要填充为相应的CBW的dCBWTag的值。 dCSWDataResidue:剩余数据长度,用来监视数据传输过程。对主机一设备的 17 电子科技大学硕士学位论文 DATA-OUT,该值为dCBWDataTransferLength与设备实际接收到的数据量之差; 对设备一主机的DATA-IN, 该值为dCBWDataTransferLength与设备实际发送的 数据量之差。该值不得超过dCBWDataTransferLength。 bCSWStatus:该字段用来指示CBW命令执行成功或者失败。表2-6列出协议 对该字段取值的含义定义。 表2.6命令块状态值 bCSWStatus值 描述 00h 指令通过 01h 指令火败 02h 03h雨}04h 相位错误 保留 05h到FFh 保留 3.数据传输条件 以下部分描述了主机和设备如何保持同步。 (1)命令传输 主机经过BULK-OUT端点向设备发送包含命令字段的CBW,CBW必须位于 包的.丌头部分,以长度为31字节的短包结束。主机端期待的设备响应情况如下: CBW有效t设备发送ACK应答; CBW无效;设备STALL掉BuU艮0uT管道或接受并且抛弃BUuoOUT端 点缓冲区里的数据,设备将保持该状态直到复位恢复。 命令传输过程中主机检测到BULK-OUT端点的STALL,主机将执行复位恢 复。 (2)数据传输 所有数据传输要在一个包的边界处开始。主机将根据 dCBWDataTransferLength和Direction bit位来发送/接收确定数目的数据。为了在 数据传输过程结束前报告错误,设备将通过STALL掉数据传输所使用的端点来结 束本次命令。 (3)状态传输 设备经过BULK-IN端点向主机发送CSW以告知命令执行情况。CSW将在包 边界处开始并且在传送13个数据后结束。CSW向主机通知每个对应的CBW内的 18 第二章基于WDM的USB驱动程序设计原理 命令块的执行情况。dCSWDataResidue通知主机设备实际接收/发送的数据量。这 样主机将忽略接收到的序号超出dCSWDataResidue值的数据。 (4)相位错误 当主机接收到CSW中的相位错误时,主机将进行复位恢复。 (5)复位恢复 复位恢复由主机执行,先后执行下列三个工作: ●Bulk-Only Mass Storage Reset(主机向端点0发送该命令字段); ·对BULK-OUT端点的Clear Feature请求; ●对BULK-IN端点的Clear Feature请求。 2.3.1.2主机/设备数据传输 1.综述 Bulk-Only协议层处理开始于主机发送一个CBW给设备,并尝试开始自己所 期望的数据传输。设备接收CBW,核对CBW,解释CBW,并尝试开始满足主机 的要求,通过CSW向主机报告CBW运行情况。以下部分详细描述了在正常和异 常的Bulk-Only协议层处理过程中主机和设备交互的更多细节。 2.合法且有意义的CBW 主机通过发送CBW,通知设备自己的意图。设备在收到每个CBW后,执行 双重验证。首先,设备验证CBW是否合法。然后,设备判断CBW中的数据是否 有意义。设备在任何方式下都不会使用dCBWTag除了将它的值拷贝至对应的CSW 中的dCSWTag中。 (1)合法的CBW 以下情况都满足时设备将认为CBw合法: ·设备发送一个CSW后或上电复位设备收到一个CBW) ,●CBW长度是31个byte) ●dCBWSignature的值为43425355h. (2)有意义的CBW 以下情况都满足时设备将认为CBW有意义: ·没有保留的bit位被置位; ●bCBWLUN包含一个为设备所支持的合法的LUN: ·bCBWCBLength和CBWCB字段内容与bInteffaeeSubClass类中的声明一 致。 19 电子科技大学硕十学位论文 3.合法且有意义的Csw 设备通常通过CSW通知主机自己试图满足主机需求的结果。主机对每个收到 的CSW执行双重验证。首先,主机验证收到的CSW是否合法。然后,主机判断 CSw中的数据是否有意义。 (1)合法的CSW 以下情况部满足时设备将认为CSW合法: ·CSW长度是13个byte; ·dCSWSignature的值为53425355h: ·dCSWTag的内容与CBW中dCBWTag的内容匹配。 犯)有效的CSW 以下情况设备将认为CSW有效: ·bCSWStams的值为00h或01h,且dCSWI>ataResiduc的值不超过 dCBWDataTransferLenIgth的值; ●或bCSWStatus的值为02h120l。 2.3.2 Mass Storage类协议的UFI子类命令 在Bulk-only传输协议传送的CBW命令封包中CBWCB字段(即子类命令字 段)中包含了设备类的子类命令,在本系统中,使用的是Mass Storage类协议中的 UFI子类命令。对于大多数UFI命令,其命令块结构如表2-7所示。 。\. 7 表2-7 UFl典璀命令块结构 ‘ S 4 3I2 1 O O Operation Code l l ogical Unit Number Resc'rved 躺 Logical BlockAddress(ifrequired) 6 Reserved 7-8 Transfer Or Parameter List何Allocatmn 12ngth(ifrequired) 9-11 Reserved ●Operation Code(操作码):所有命令块的第一个字节应该为操作码。操作 码定义了需要进行的操作。 ·Logical Unit Number( 辑单元号):该字段定义了处理命令块的逻辑单元。 ’20 第二章基于WDM的USB驱动程序设计原理 若UFI设备仅支持一个逻辑单元,则LUN应被设置为0。 ·Logical BlockAddress(逻辑块地址LBA):LBA应从0开始,连续编号直 到最后一个逻辑块。 ●TransferorParameterListorAllocationLength(传输长度):传输长度字段 规定了传输数据的总量,通常是block的数目12lJ。 2.4本章小节 本章首先对USB主机系统进行7简要介绍,然后介绍了WDM驱动程序的几 个基本概念,WDM驱动程序的基本组成,阻及应用程序和驱动程序之间通信的方 法,最后对Mass Storage类协议中的Bulk-Only传输协议以及UFI子类命令进行了 简要介绍。 21 电子科技大学硕十学位论文 第三章 基于ARM核的USB2.O-AHB接13 IP系统设计简介 本驱动程序的应用对象是基于ARM核的USB2.0.AHB接口IP以及与其开发 相关的各个部分(统称基于ARM核的USB2.0.AHB接口IP的系统),本章将对该 系统做简要介绍。 3.1 系统应用环境及系统结构设计 本lP支持AHB接口,而且对AHB接口加wrapper(包裹电路)后,可以与 其它片上总线连接。本IP不含MCU,故需要IP外部MCU辅助处理USB协议和 解析上层命令,并配置IP内部寄存器,所以使用本lP的SOC系统中需含MCU, 并能读写本口寄存器。 图3·1基于ARM核的USB2.0-AHB桥的系统构成幽 本口不含USB 2.0接收器(PHY),支持USB 2.0的8位UTMI接口和ULPI 接口。出于本IP含内鬣DMA控制器,故在大批量数据传输中经过AHB总线上的 MASlER(如ARM)设置相关寄存器后,可以大大减少本IP对AHB总线MASTER 第三章基于ARM核的USB2.0-AHB接口lP系统设计简介 (ARM)的中断。 图3-1描述本m的典型应用环境。灰色部分为本IP,其余部分是IP外部应用 环境。 3.2数据传输方式设计 理解本设计中的数据流程对于了解口核的组成和功能有很好的意义,因此下 面列出了在几种情况下的数据流程。 3.2.1非DMA方式数据传输 ARM配置口的寄存器后,将m设置为非DMA方式传输。在该种传输方式 下,ARM配置好USB的端点后,USB端成功收到数据或发出数据即报告中断, ARM根据中断处理数据,重新配置端点,开始新的一轮数据传输。图3.2中带箭 头虚线为非DMA方式数据传输的数据通路。 图3-2非DMA方式数据传输 3.2.2 SLAVE DMA方式数据传输 ARM配置m的寄存器后,可由SLAVE申请外部DMA进行DIViA传输。初 始状态时,ARM配置好口的端点状态和SLAVE的寄存器,当USB端成功收到 USB数据或发出USB数据后,USB向SLAVE报单次数据传输完成申请,SLAVE 查看当前的剩余DMA数据长度,若长度为零,向ARM报DMA传输完成中断; 若长度不为零则继续申请外部DMA进行DMA数据传输。图3-3中带箭头虚线为 SLAVE DMA方式数据传输的数据通路。 鞲。◆电子科技人学硬十学位论文 3.2.3 MASTER DMA方式数据传输 ARM配置lP的寄存器后,可由MASTER进行DMA传输。初始状态时,ARM 配置好口的端点状态和MASTER的DMA寄存器,当USB端成功收到USB数据 或发出USB数据后,向MASTER报单次DMA完成申请,MASTER查看当前的 剩余DMA数据长度,若长度为零,向ARM报DMA传输完成中断:若长度不为 零则继续进行DMA数据传输。图3-4中带箭头虚线为MASTER DMA方式数据传 输的数据通路。 ●……………………………_ 幽34 MASTER DMA方式数据传输 3.2.4寄存器读写 外部MASTER(如ARM)可通过SLAVE访问IP内部所有寄存器,图3.5中 带箭头虚线为配置通道。 第三章基于ARM核的USB2.0-AHB接口IP系统设计简介 学 问 SlE d心AH程B斗 --4 EDP +二 (DI'RAM) AHB L -● AHB BUS ●‘ SL~VE ●…………………一………J 图3.5寄存器读写 3.3内部模块结构设计 该部分将整个设计分为三个大的模块进行描述,分别为USB_ULPI模块, USB SIE模块(包含USB GLC模块,USB_PiE模块,USB SIF模块,USB EPB 模块)。USB_AHB模块。USB_ULPI模块负责将UTMI的接121信号转接为ULPl 的接口信号;USB SIE模块负责处理USB的数据链路层协议;USB_AHB模块负 责处理AHB的总线协议。ULPI和SIE模块按照UTMI协议进行通信,SIE和AHB 模块问按照5l单片机时序进行数据传输,按照ARM公司PL080DMA时序进行 DMA申请时序设计。 3.4软硬体系结构设计 软件的主要功能是负责接收和处理主机发给设备的各种请求,并向主机返回 设备的状态信息。USB2.0-AHB接口控制芯片控制USB协议和AHB协议的完成, 同时协助外部DMA进行数据传输。接口控制芯片软件设计的目标是使U盘在USB 总线上达到最大的传输速率。 3.4.1软件的设计思想 软件要实现的功能包括:USB2.0-AHB接口控制芯片的初始化;响应主机的标 准请求,并做出合适的动作:主机要求通信时,能够做出应有的响应。由于USB2.0 协议的主/从式模式,软件设计成全中断驱动的方式,ARM做它的前台事务时, USB传输在后台进行处理,即:当SIE从USB总线上接收到一个请求包时,就触 发一个中断事务,ARM立即执行中断服务程序以响应这个中断,这样做一方面保 证了快速的数据传输和较好的软件结构,另一方面简化了编程和测试。同时根据 25 电子科技大学硕士学位论文 BULK传输的特点设置了DMA方式,这样在BULK传输时,数据传输的中断经 过配置可以转换成DMA申请,不经过ARM解析直接由外部或内部DMA进行数 据传输,这样可以最大程度降低CPU利用率。 3.4.2 OSB逻辑处理流程 连接 状态 系统上电 上电 状态 并个模块上电复位 ARM对系统进行毛U始化配置 C 1\咄 举\/删 分析Bulk.Out端点数据是否有对 u疵进千j:操作的命令、解释命 令,进行相成的操作、判断数 据足否需要DMA传输 根据Bulk-Out端点巾的UFl指 令,进行相应的操作,并通过 BulkIn端点返回枢应的状态和 结果给主机 图3.6 USB逻辑处理沉程图 图3-6描述了USB逻辑处理流程。当USB设备接入到主机的USB接口后, 主机给其供电,USB设备等待主机发过来的复位信号。软件在接收到复位信号后, USB设备进入到总线缺省状态,此时它有一个缺省地址0,主机通过此缺省地址 与USB设备进行通信,等待主机给它分配一个唯一的非0地址,并对它进行配置; 在USB设备枚举过程完成以后,主机可以通过其分配的地址来通知USB设备完成 相应的操作。整个过程可以归纳为主机通过USB设备的相应端点向软件发出各种 操作请求,软件通过对这些请求的解析来控制硬件电路模块完成相应的操作,并 向主机返回设备的状态信息。软件的具体工作流程如下: 第三章基于ARM核的USB2.0-AtlB接口IP系统致计简介 (1)主机通过向地址0发送获得设备描述符请求GetDescriptor(Devicc),软 件响应该请求,此时主机只是想获取USB设备缺省控制管道所支持的 最大数据包长度,该长度信息在设备描述符的bMaxPacketSizeO字段中, 地址偏移量为7。因此,软件只需返回设备描述符的前8个字节就可以。 此时设备处于缺省状态。 (2)主机向软件发出设置地址请求Set Address,为其提供一个非0的唯一 地址。USB设备必须在50ms内完成对该请求的处理,并结束控制传输 的状态阶段。软件通过读取sIE的地址寄存器就可以知道主机设置的地 址信息。软件在响应请求后,USB设备进入地址状态. (3)主机再次发出获得设备描述符的请求GetDescriptor(Device),读取设备 提供的设备描述符.在设备描述符中,软件将向主机报告USB设备描 述符的全部字段,包括供应商ID、产品m等。 (4)主机循环发出获得配置描述符的请求GetDescriptor(Configuration),软 件晦应这一请求,提供USB设备完整的配置信息,包括配置描述符、 接口描述符、端点描述符以及各种设备类定义描述符和供应商自定义描 述符等。 (5)主机根据已读取的配置信息为USB设备选择一个合适的驱动程序,并 向软件发出设置配置请求Set USB设备的枚举过程已成功完成,软件将其非控制端点设置成有效状 态,USB2.0-AHB接口芯片就可以正常工作了。 (6)如果USB设备是首次接入到主机,那么在枚举成功后,操作系统会提 示用户安装驱动程序或者从系统中搜索驱动程序.在驱动程序注册后, USB设备将处于空闲状态,等待主机发过来的各种读写请求。 ∽主机应用程序发出的磁盘操作请求,经过可安装文件系统及输入输出系 统层层过滤被分解为一个个基本的UFI块读写请求。然后经过UFI驱 动层封装成IRP(I,0 Request Packet)下发USB传输驱动层。USB传输 驱动层对接收到的IRP进一步封装成CBW,下发给设备方的软件。 (8)软件检查CBW是否有效.若无效将Bulk端点Stall掉,并发送CSW向 主机汇报CBW无效。主机将执行相应的端点复位操作,并重发CBW。 (9)若CBW有效,软件将把CBW中的信息做进一步的处理,解析出UFI 命令请求。若主机发过来的是读非O长度的数据,则软件将启动u盘 的读操作,从内存中读取数据,并将数据写入到Bulk-In端点发送给主 ,设备响应这个谤求。此时.Cfguration 电子科技大学硕士学位论文 机,若主机发过来的是写非0长度的数据,则软件等待从Bulk.Out端 点接收主机发过来的数据,然后启动写操作,将数据写入到内存晕面。 (10)若主机没有数据请求或主机请求的数据处理已经结束,则软件将最终的 处理结果封装戍CSW返回给主枫。此后,USB设备将处于空闭状态, 等待接收主机的下一个请求。 3.4.3系统功能层次划分 基于U盘应用的USB2.0-AHB接口控制芯片软件所要完成的操作包括:处理 USB协议:进行Bulk-Only传输控制;解析UFI指令;申请内存建立虚拟u盘。 软件对硬件电路的控制是通过对各个模块的控制寄存器进行设置,同样ARM可以 通过读取各个模块的状态寄存器来获取该模块当前的状态;ARM把各个模块的寄 存器和实例化的RAM都当作外部RAM来访问,通过DEC模块和各个模块内部 的地址译码电路来进行译码。 以u盘为典型应用的系统从功能上可以翅分为三个层次。 1.USB数据链路层 该层主要实现主机和USB设备问数据的实际传输,包括USB数据包的封装和 解析、位填充、NRZI编码等功能:主要由硬件电路实现,不需要软件干预。 2.USB设备枚举层次 该层实现了主枫和USB设备问的配甓通信,如USB设备地址分配、读取设备 配置描述符等。USB设备通过响应主机的各种请求,使主机能够识别设备,并使 设备的配置端点能够完成各种功能;主要由软件实现,并且一般不使用DMA而是 ARM直接访问。 3.U盘管理层次 在该层次上,主机通过驱动程序完成对设备的所有磁盘操作,包括读操作、 写操作、格式化、读ID等:设备根据UFI命令规范解析命令,执行相应操作,并 返回执行结果。 3.5本章小节 本章从系统应用环境及系统结构,数掘传输方式,内部模块结构,软硬件体 系结构四个方面简要介绍了本主机端驱动的应用对象,从而引出主机端驱动程序 的总体设计。下一章将从功能需求入手,介绍主机端驱动程序的设计构架和设计 28 流程。 第三章基于ARM核的USB2.0-AHB接口IP系统设计简介 屯子科技大学硕士学位论文 第四章 主机端驱动程序总体构架设计 本章将介绍本驱动程序的总体构架设计。确定总体设计构架和设计流程是软 件开发的重要步骤,总体设计的好坏直接影响到软件丌发的效率甚至成败。 4.1主机端驱动程序功能需求分析 主机端驱动开发的目的是为了配合设备驱动丌发人员按照项目提供方的要求 对整个系统进行测试,因此,下面将从测试的要求者手,对主机端驱动程序的功 能做详细介绍。(省略了部分与主机端驱动开发无关的测试) 1.总线枚举测试,热插拔测试。 根据这两个测试要求,主机端驱动程序至少需要完成启动设备请求,停止设 备请求和删除设备请求的处理,各种请求处理的过程将在下一章做详细介绍。 2.端点1—6全速(以及高速)内置DMA、外雹DMA以及非DMA方式块传输 测试,其中测试中根据包长度分为整包、短包和NULL包测试。 由于采用什么样的DMA方式是由设备端决定,端点也可以由设备端进行配 置,因此主机端驱动程序只需要根据传输端点缓冲区大小来向设备端用块传输方 式发送已知数据的整包、短包和NULL包。 3.端点3—6全速(以及高速)内罨DMA、外置DMA以及非DMA方式同步传 输测试,其中测试中根据包长度分为整包、短包和NULL包测试。 和上面类似,主机端驱动程序只需要根据端点缓冲区大小来向设备端用同步 传输方式发送已知数据的整包、短包和NULL包。 4.业务测试,设备端需要能完成优盘的基本功能。 由于对Flash的操作是基于Bulk-Only协议和UFI命令的,设备端的驱动程序 需要对主机端发来的数据包按照Bulk-Only协议和UFI命令进行处理,因此主机端 驱动需要在块传输的基础上加入Bulk-Only协议和UFl命令,用于检测设备驱动程 序的正确性。 通过上述分析可以列出主机端驱动程序需要完成的功能,如表4-l所示。 第四章主机端驱动程序总体构架设计 表舡1主机端驱动程序功能介绍 主机端驱动功能 具体功能介绍 正常加载,PnP实现 控制传输 块传输 同步传输 对Flash进行读写 当设备插入主机,主机能正常加载相应的驱动程序并 且能完成基本的PnP操作,比如安全移除设各 主机能获取设备描述符 主机能够根据传输端点缓冲区大小来向设备用块传输 方式发送已知数据的整包、短包和NULL包 主机能够根据传输端点缓冲区大小来向设备用弼步传 输方式发送已知数据的整包、短包和NULL包 主机能通过Bulk-Only传输方式对Flash进行读写;能 发送各种非法或者无效的CBW,并能在主机端观测设 备端返回的数据 4.2主机端驱动程序的基本组成例程 简单地说,驱动程序是一些例程的集合,它们被动地存在,等待主机系统软 件(PnP管理器、FO管理器、电源管理器等)来调用或者激活它们。具体驱动程 序不同,其所包含的例程也不同,图4.1描述了本驱动程序的基本组成,它包括以 下5个例程: (1)驱动程序入口例程:处理驱动程序的初始化; (2)即插即用例程:处理PllP设备的添加、删除和停止; (3)分发例程:处理用户应用程序发出的各种FO请求; (4)电源管理例程:处理电源管理请求; (5)卸载例程:处理驱动程序的卸载。 其中,对于分发例程,需要处理的IRP包括:Ⅱ冲MJ CREATE, IRP MJ CLOSE,IRP—MJ—CI.EAN,IRP—MI—DEVlCE CONTROL。本驱动程序 使用IRP—MJ—DEVICE_CONTROL来实现对Flash的操作例程、控制传输例程、 块传输例程以及同步传输例程,因此将对常用来处理读写的IRP MJ READ以及 IRP_MJ_WRlTE不做特别的处理,收到这两个IRP,驱动程序直接返回即可。 31 电子科技大学硕士学位论文 图4-1主机端驱动程序的基本组成例程 4.3主机端驱动程序的设计流程 上一节介绍了主机端驱动的总体构架,可以看出,由于本驱动程序需要完成 的功能繁多,处理例程复杂,因此在设计上适合采用分步骤设计,这样有利于程 序员对主机端驱动程序进行调试。下面将结合图4-l介绍本驱动程序的设计流程: 1.主机端驱动程序设计第一步 ●设计目标:驱动程序能够J下常加载,以及处理简单的PnP请求。 ·设计操作:如图中无色框图所示,完成一个拥有上面提到的5种基本例程 的驱动程序以及和驱动程序相关的inf文件,其中分发例程暂不对 IRP MJ DEVICE CONTROL进行处理。 2.主机端驱动程序设计第二步 ·设计且标:驱动程序能够完成控制传输、块传输以及同步传输。 ·设计操作:如图中有阴影的框图所示,增加控制传输例程、块传输以及同 步传输例程,通过对IRP MJ DEVICE CONTROL所对应的FO栈单元的 Parameters.DeviceloCoatr01.10ControlCode进行分析,将用户通过加管理 第四章主机端驱动程序总体构架设计 器发送的IRP~M.I DEVICE_CONTROL交给上述3种传输例程之一进行 处理。 3.主机端驱动程序设计第三步 ·设计目标:应用程序能够通过驱动程序能够对Flash进行操作,并且能发 送无效或者非法的CBW到设备。 ·设计操作:如图中灰色框图所示,在驱动能实现块传输和控制传输的基础 上加入了BULK_ONLY协议,其中还包括了UFl命令。 4.4本章小节 本章通过对主机端驱动程序的功能需求分析,提出主机端驱动程序的总体构 架,并根据利于开发的原则提出分步式设计流程。 皇王型垫苎堂堡圭堂堡堡壅 一一一 第五章 主机端驱动程序主要模块设计与实现 在介绍了本驱动程序的总体构架以及设计流程后,本论文将主要从数据结构 和流程设计两个方面介绍此驱动程序的几个重要模块的设计,其中包括 IRP—MJ—PNP处理例程、控制传输例程、块传输例程、同步传输例程以及对Hash 操作例程。 5.1 I RP-MJ—PNP处理例程的设计 前面一节,简单介绍了IRP—MI—PNP处理例程是即插即用例程的一个最重要 的组成部分,其中还简单介绍了IRP—MJ—PNP处理例程的入口参数,主要功能以 及需要处理的各种PnP IRP,下面将详细介绍如何设计IRP MJ PNP处理例程。 5.1.1即插即用设备状态 1丽 设备未连接 户l设 堕±墨 设备已连接 骜 设 停止状惫 IRPJlNJOEMO VIE DEVICE设 备物理连接断歼 IRP MN IERP MN REMOVEl START. DEVJCBI DBVlCl三 IRP MN SToP DEvICE 删除棣起状态I I意外删除状态 停止挂起状态 IRP MN mP MN 0UERY— CANCEL REMOVE REMOVE DEVICE [RP M札 SURPRIS E REMO VAL IRP—MM QUERt STOt DEVICE IRP MN CANCELL STOP DEVICE 设备被歹}j举 启动状态 1砸E J IRP-MN—REMOV 碾孰哂爵旒 E_DEVICE 设备仍物理连接 PnP管理器调用r1 程序初始化 程 或filter PBP管理器分配资源 并发IRP MN. START DEVICE 隧5.1 Pill'设备状态转换豳 在介绍详细的设计前,首先对即插即用设备状态以及状态转换进行简要介绍· 图5.1描述了PIlP设备状态以及各种状态转换。 34 第五章主机端驱动程序主要模块设计与实现 下面将从图5.1的左上部开始对即插即用设备状态转换进行详细说明。 (1)一个即插即用设备被连接入系统,可能是由用户剐刚插入设备,也可能 是由系统启动产生的连接。这时,系统软件还不能识别出该设备。 (2)在对该设备进行软件配置前,总线驱动程序和PIlP管理器将首先对它进 行列举,并找到合适的驱动程序,这可能包含一个功能驱动程序和任意 多个过滤驱动程序。如果这些驱动还没有被加载,PllP管理器将调用每 个驱动程序的DriverEntry例程,并对它们进行初始化。 (3)该设备的驱动程序初始化完毕后,它需要准备初始化设备。对于驱动控 制的每个设备,PnP管理器都会调用一次这个驱动程序的AddDeviee饲 程。 (4)当驱动收到从PnP管理器传来的一个IRP MN START DEVICE请求包 时,驱动将启动设备,并准备为设备处理I/O请求. (5)在该设备处于启动状态时,如果PnP管理器需要为其重新分配资源,它 将向设备驱动发送mP MN QUERY_STOP_DEVICE请求包,以查询该 设备能否被停止。如果能,它将进一步发出IRP MN STOP DEVICE 请求包;如果不可以(驱动程序可能正在传输数据),它将进一步发出 IRP MN CANCEL_STOP_DEVICE请求包,以使设备再次回到启动状 态。当设各处于停止状态时,其驱动程序不能对它进行访问;在系统资 源重新分配完毕后,PnP管理器通过发送一个 IRP MN START_DEVICE请求包,以通知其获取新的资源并再次启动。 (6)在该设备被删除前,PnP管理器将首先向其驱动程序发出一个 IRP_MN_QUERY_REMOVE_DEVICE请求包,以询问该设备能否被删 除.如果可以,其将进一步发出一个IRP MN REMOVE DEVICE请 求包以删除设备;如果不可以(驱动程序可能正在传输数据),它将进 一步发出IRP_MN_CANCEL_REMOVE_DEVICE请求包,以使该设备 再次回到启动状态。在该设备被删除后,PIIP管理器将卸载其驱动程序。 仍如果用户偶然断开该设备,PllP管理器将发出IRP MN _SURPRISE_REMOVE_DEVICE请求包,以使该设备进入意外删除状 态,然后再发出IRP MN REMOVE DEVICE请求包,删除设备1181【1帅。 电子科技大学硕十学位论文 5.1.2增加的相关数据结构 根据对PnP设备状态转换图的分析,在驱动程序的头文件中增加了以下数据 结构: 1.设备状态的枚举 typedef enum—DEVSTATE{ NotStarted, //未启动状态 Stopped. Working, //停止状念 //启动状态 PendingStop. Pending,Remove。 SurpriseRemoved, //停止挂起状态 ,,删除挂起状态 //意外删除状态 Removed //已删除状态 )DEVSTATE; 2.设备IRP队列状态 typedef eiiuln QUEUE_STATE{ HoldRequests. //设备尚未启动,但可以接收新的IRP AllowRequests, //设备准备好处理IRP队列中的IRP FailRequests //设备已经移出,不能接收新IRP }QUEUE STATE; 3.设备扩展中关于PnP的数据结构 DEVSTATE Device.State; //当前设备状态 DEVSTATE PrevDevState; //用于保存设备前一状态 KSPIN LOCK DevStateLock; //设备状态自旋锁,在获取此自旋锁后, 才能修改设备状态 QUEUE STATE QueueState;//未处理的IRP队列状态 LIST ENTRY NewRequestsOueue;//未处理的IRP队列的入口 KSPIN LOCK OueueLock;//IRP队列自旋锁 KEVENT RemoveEvent; //设备移除事件 KEVENT StopEvent; //设备停止事件 ULONG OutStandinglO; //正常取值为0,1,2,通过观测其值变化 来判断对事件的操作 第五章主机端驱动程序主要模块设计与实现 KSPIN—LOCK IOCountLock;//OutStandinglO的自旋锁 5.1.3主要处理例程的设计 5.1.3.1处理启动设备请求 初始化事件starlDeviceEvent J 为下层驱动建立I/O栈单元 Jr 为该IRP设置Iocomplclion例程 l 调用IocallDfivcr函数把该IRP向下传递 、◇№ 读取设备描述符、配置描述符以及选择接口 I 使能在AddDevieem面获褥的设备符号链接 I 把PnP状态设置为working 、L l 设备IRP队列状态设置为AllowRequesls J, 处理在捧队的请求包 广1点一。 图5.2处理启动设备请求流程图 虽然mP MN START_DEVICE请求包是由PnP管理器从设备栈顶层驱动程 序自上面下传递给下面的驱动程序,但是由于设备启动的顺序是沿设备栈自下而 上进行的,即总线驱动程序(设备栈的最下层驱动程序)是第一个处理该IRP的 驱动程序,因此,本驱动程序作为一个功能驱动程序,在收到该IRP后,需设置 请求包后此时,下层驱动已经_DVICE 电子科技大学硕士学位论文 一个loCompletion例程并沿设备栈向下传递该IRP,在其所有下层驱动程序对浚 IRP处理完毕后,它再处理自己的启动操作。其处理流程如图5—2所示。 当下层驱动完成了IRP MN START 向USB设备发出了SetAddress请求,为其分配了一个惟一的设备地址,设备进入 了地址状态。此时功能驱动程序负责完成对设备的进一步配置(读耿设备描述符、 配置描述符以及选择接口),使设备进入配置状态,在设备进入配置状态后,客户 软件才能和功能单元进行数据传输。下面将详细介绍本驱动程序在对设备进行配 箕的流程,如图5-3所示。 图5.3对设备的配置流程 5.1.3.2处理停止设备请求 IRP—MN STOP_DEVICE请求包从设备栈中的顶层,自上而下被传递给下面 的所有驱动程序,对它的处理也是自上而下的。本驱动程序对其处理的流程如图 5-4所示。 第五章主机端驱动程序主要模块设计与实现 I 确保硬件已经被停止 J I 将设备PNP状态设置为STOP l l 清空所存在设备启动过程中保存在设备扩展的信息 Jr l使用函数usbBuildsclcctconfigurationRcqucst解除配置 l I 设置Jrp一>loStatus.Status;tjSTATUS—SUCCESS 1L I 向下传递该IRP 强5.4处理停lE设备请求流程圈 其中UsbBuildSelectConfigurationRequest(urb,Length,ConfigurationDescriptor) 本是用来构造一个URB来对USB设备选择一个合适的配置,当第三个参数为 NULL时,该函数功能就变为构造一个URB来使设备进入未配置状态。 5.1.3.3处理删除设备请求 即插即用设备无论是被彻底删除还是被意外删除,PnP管理器都会向其设备栈 发出IRP MN REMOVE DEVICE请求包,以使其驱动程序删除该设备的软件标 识。 设备栈中的驱动是自上而下处理该IRP的,最下层的驱动在处理完该IRP负 责将其删除。本驱动程序对其处理的流程如图5-5所示。 驱动程序在收到IRP MN REMOVE_DEVICE请求包时,因为根据图5-1可以 知道设备既可能在意外删除状态收到该IRP,也可能在删除挂起状态收到,因此例 程首先要判断收到该IRP时设备的状态,以做不同的处理。如果设备是意外删除, 那么驱动程序只需要设置设备PnP状态,清空所有在启动设备时保存在设备扩展 中的信息,然后将该IRP直接向下传递,断开FDO与设备栈的连接并释放该FDO. 如果该设备是通过查询的方式删除,那么驱动程序将在前面的基础上增加以下操 作:禁止IRP队列接收新的IRe,并处理完1RP队列中尚未完成的IRP,停止之前 已注册的设备接口,并且取消已打开的管道。 39 电子科技大学硕十学位论文 开始 /7设各处于\ \状态?/ SurpriseRemoved 将设备IRP队列状态改为FailRequests 设胃设备的PNP为Removed 处理完在排队中的IRPs 闪为是从启动状态直接删除,闪此将 OutStandinglO减上2 清空所有在启动'垃备时保存在t搜备扩 展中的信息 禁It打开设蔷的接口 取i『j已打开的管道 调用IoCalllMiver把该IRP商接往下面传 调用loDetachDevice函数以使得FDO与 设螽栈断丌连接 调用loDeleteDevice函数释放该FDO 返回 图5.5处理删除设备请求流程图 5.2控制传输的设计 5.2.1基本实现方式 控制传输适用于传输少量的、且对传输时问和传输速率均无要求、但必须保 证传输的数据。控制传输主要用于发送和接收与USB设备的配置信息有关的数据, 如设备地址、配置描述符等。 USB设备驱动程序先使用USBDI提供的接口函数来设置一个特定URB结构 的参数,使其能够完成不同的控制传输的要求,然后把这个URB作为IRP的一个 参数,并把它沿设备栈向下传递给其下层驱动。这时,该IRP的主功能代码为 IRP MJ INTERNAL.DEVICE CONTROL,其下一I/O单元的Parameters.Devicelo. Contr01.IoControlCode字段应设置成IOCrL INTERNAL UsB SUBMIT URB。 40 第五章主机端驱动程序主要模块设计与实现 5.2.2实现控制传输的实例介绍 USB定义了11种标准的USB设备请求,如GetDescriptor、SetFeaturc等,其 主要功能是完成USB设备的配置操作。表5.1列出了这些请求的请求号及功能。 表5.1标准USB设备请求 请求名 请求号 功能 GetStatu¥ ClearFeature SetFeature 00H 01H 03H 读取殴备、接口或者端点的状态 清除或禁lt设备、接口域者端点的某些特性 设置或使能设备、接口或者端点的某些特性 SetAddress 05H 分配设备地址 GetDescriptor SetDescriptor 06H 佣 读取指定的描述符 更新已有的描述符或添加新的描述符 GelConfiguration SetConfiguration 08H 09H 读取USB设备当前的配置值 为USB设备选择一个合适的配置 GctIntefface 0AH 读取指定接口的当前可替换设置值 SetInterface OBH 为指定接口选择一个合适的可替换设置 SynehFrame oC}I 读墩同步端点所指定的帧序号 这些标准请求只能使用控制管道来进行传输。下面将选择2个请求来说明实 现控制传输的方法。 1.获取设备描述符 设备描述符包含了USB设备的总体信息,一个USB设备只能有一个设备描述 符,它由14个字段组成,其长度为18字节。获取设备描述符实际是上面的标准 请求中GetDescriptor的一种,它支持三种类型的描述符:设备描述符、配置描述 符和字符串描述符。下面将介绍获取设备描述符的流程,如图5.6所示。 41 电子科技人学硕士学位论文 分配一块内存空间来存放将获驭的设旃描述符,其人小为结构体 USB_DEVICE~DESCRIPTOR的人小 J 分配块内柞空间来存放将构建的URB,其人小为结构体 一URB—CONTROL_DESCRIPTOR—REQUESTfl‘J人小 工 使刚UsbBuildGetDescriptorRequestt猫数柬构建。个读般端点状态 |fnURB,儿指定把返同的设需描述符放入|ji『面分配的内存空间中 l 初始化‘个事件cvcntH{柬等待F层驱动完成该IRP J, I使用函数loBu.1dDeVicclocontrolRcquesl为上面构建的uRB创建一 个刚于设备没备控制请求的fRP 1 . 令№ 图5-6获取设备描述符的流程 UsbBuildGetD*scriptorRequest就是USBDI提供的接口函数,用来创建一个读 取描述符的URB,如果是要获得其它两种描述符,只需要更改第一步分配的内存 空间的大小,更换UsbBuildGetDescriptorRequest函数中的某些参数比如 DescdptorType,TransferBuffer等。然后再使用函数loBuildDeviceloControlRequest 为上面构建的URB创建一个用于设备设备控制请求的/RP,并向下层驱动发送。 2.获取端点状态 获取端点状态请求是标准USB设备请求中GetStatus的一种,其数据阶段所返 回的2字节数据中,只有DO位是有效的,其它位均被保留。DO位指明端点的停 止特性,1表示该端点已被停止,0表示其未被停止。获取端点状态的流程如图5.7 42 第五章主机端驱动程序主要模块设计与实现 所示,其和获取设备描述符的流程的过程很类似,主要的不同在使用不同的函数 来构建URB。通过GetStatus还可以获得设备状态和接口状态,只需要更改函数 usbBuildGetStalusRequest中的个别参数。 分配一块内存空问来存放将获取的设备描述符,其大小为2 J 分配一块内存空删来存放将构建的URB,其大小为结构体 -URB CONTROL.GET STATUS.REQUEST的大小 J l使用UsbBuildGetStatusRequest函数来构建一个读取端点状态的 l URB.并指定把返回的瑙点状态值放入前面分配的内存空间中 J I 韧始化一个事件even佣来等待下层驱动完成该IRP l 使用函数IoBundDcvjceloCoBtroIRequcst为上面构建的URB创建一 个用于设备设备控制请求的IRP l 调用loCallDriver函数把该IRP下传递 令№ 图5-7获取端点状态的流程 5.3块传输的设计 5.3.1增加的数据结构 typedef stmct_BULKUSB—RW—CONTEXT{ 43 电子科技大学硕士学何论文 PURB Urb; PVOⅡ) Buffer; ULONG Length; ULONG Numxfet; PDEVICE EXTENSION DeviceExtension; }BULKUS毽RvLCONTEXT,‘PBULKUSB RW CONTEXT; 该数据结构用于控制块传输,其中Urb是一个指向URB结构的指针,用于保 存每次使用URB传输完数据后前一个URB的信息;Buffer指向内核空『白J数据区 的指针;Length表示飘余传输数据豹长度;Numxfcr表示已经传埝数据的长度。 5.3.2传输流程设计 1.选择用户数据和内核数据的交互方式 在传输流程设计之前,首先需要选择用户数据和内核数据的交互方式。出第 四章的设计流程知道,应用程序可以通过执行API函数DeviceloControl,向本驱 动程序发送I/O请求包IRP MJ DEVICE_CONTROL来实现和驱动程序数掘交互。 用户模式和内核模式传输数据有三种Buffered方式,Direct方式以及Neither 方式。为了指定∞管理器以什么方式进入用户的数据缓冲区并把数据传输给驱动 程序,程序员需要在AddDevice函数中,在创建设备对象后,立即设置其中的标 志位: N'IsTATUS USB_AddDevice(…) { PDEVICE OBJEcr fdo; loCreateDeviee(…,&fdo); fdo->Flags l-DO_BUFFERED IO; ,,或fdo·>FIa笋l-DO_DIRECT_IO; ,,或fdo.>Fla擎l-o; } Buffered方式适合传输数据量比较小的时候使用;在传输数据量大的时候,当 然也可以选择Direct方式{如果不需要传输数据,Neither方式是最佳选择。由于 本驱动程序不需要传输大量数据,因此将数据传输方式都设置为Buffered。 程序员如果要使用1RP_MJ DEVICE_CONTROL,除了在AddDevice例程中 请求包后进.CNTROL 第五章主机端驱动程序主要模块设计与实现 要设置,还需要在头文件中按照如下方式设置这个字段的值: #define IOCTL_BULK翼卫IGH CTL_CODE(FILE_DEVICE_UNKNOWN, OxS00,METHOD BUFFERED,F衄_ANY ACCESS) ’ 其中IOCTL_BULK W HIGH是IoControlCode,它的命名规则是必须以 IOCrL开头,此代码表示以高速块传输方式写数据到设备;Ox800表示控制码的 索引值,不同的控制码的这个值必须不同;METHOD BUFFERED表示用户模式 和内核模式之间传输数据使用的方式是缓冲模式。 2.驱动程序获取用户空间数据的流程 下面将遥过介绍驱动程序在接收到IRF MJ DEVICE 行的操作,来说明用户数据是如何和内核数据进行交互的. (1)驱动程序收到∞请求包1RP—MJ—DEVICE CONTROL后,它根据该 IRP的I/O栈单元中Parameters.DeviceloContr01.IoControlCode这个字段 的值来判断进入哪个操作例程。 (2)从IRP的Assodatedlrp.SystemBuffer域获得应用程序传来的数据指针, 并从IRP堆栈的Parameters.DeviceloContr01.1npntBufferLength域获得应 用程序传来的数据长度,分配一块内存空间,并将用户传递来的数据缓 冲区拷贝到新分配的这块中。这样驱动程序就可以使用新分配的这块数 据来进行和设备的数据交互了. (3)如果用户需要数据传回,他会在DeviceloControl函数中给出输出的缓 冲区指针咀及输出数据长度,驱动程序会分配一块长度和IRP堆栈的 Parameters.DeviceloContr01.OutputBufferLength相同的内存空间,把传回 的数据先放入这个数据缓冲区,再将这个缓冲区拷贝回 Associatedlrp.SystemBuffer· 3.驱动程序和设备之间的数据交互 与传统PC总线(如PCI总线)设备的驱动程序相比,USB设备驱动程序从 不直接与硬件对话。相反,它仅靠创建URB(USB请求块)并把URB提交到总 线驱动程序就可完成硬件操作. 可以把USBD.SYS看作是接受URB的实体,向USBD的调用被转化为带有 主功能代码为IRP MJ_INTERNAL DEVICE CONTROL的IRP。然后USBD再调 度总线时间,发出URB中指定的操作. 因此,USB设备功能程序中对设备进行块传输的写操作,简单的看来就是将 用户传来的数据按照管道最大传输包长将数据分为若干段,并按次序使用USBDI 45 电子科技大学硕士学位论文 提供的接口函数UsbBuildInterruptOrBulkTransferRequest柬创建一个URB,原来的 IRP改变为包含有URB的IRP MJ INTERNAL DEVICE CONTROL请求,并把 这个修改后的IRP送到下层驱动程序。对于读操作,就是根据用户希望获得的数 掘长度分配一块缓冲区,按照管道最大传输包长把缓冲区分为若干段,再按照上 面的方式创建URB以及修改1RP,把IRP发送到下层驱动。 下面将详细介绍用块传输方式写设备的详细流程。 (1)首先分别查看设备是否处于工作状态,管道是否是块传输管道,如果不 是将结束该IRP并退出; (2)分配一块数据结构为BULKUSB—RW—CONTEXT的内存空间,指向它 的指针是bulk_rwContext,它的作用是保存数据传输的信息,比如指向 内核中数据的指针,传输数据使用的URB,剩余数据长度以及设备扩 展指针; (3)判断用户要求传的数据是否超过一定长,此定长由程序员设定: (4)判断用户要求传或接收的数据是否低于单个URB最大传输包长。如果 低于,就把本次通过发送UP.1]传输的数据长度定为用户要求传或接收 的数据长度;否则就定为单个URB最大传输包长; (5)分配一块内存空间,并把用户要求写入设备的数据拷贝到该空间中; (6)构造一个用作块传输的URB,设定步骤(4)中指定的传输长度,修改IRP 为IRP M.I INTERNAL_DEVICE CONTROL,用来传输URB; (7)设置bulk_rwContext的数据,设置完成例程,并向下层发送该限P; (8)当成功发送完第一个URB要求发送的数据后,该1RP返回到完成例程, 其中bull【rwContext作为参数也进入了完成例程: (9)在完成例程中,通过bulk_rwContext里面保存的剩余数据长度判断是否 低于单个URB最大传输包长,其处理和(幞似,然后可以找到前一次 发送的UI{B,更新URB中的数据传输长度,再更新剩余数据长度以及 指向数据的指针; (10)设置完成例程,把处理过的URB再次发送到下层驱动; 01)进入(9)~直循环,直到剩余数据长度为O。 第五章主机端驱动程序主要模块设计与实现 5.4同步传输的实现 5.4.1实现的难点 同步传输和块传输不同,它每个包的长度不需要是管道的最大包长,在每次 传输中,它的大小都可能不同。但是根据USB2.0协议,高速同步传输,最大包长 必须小于或等于1024字节,全速同步传输,最大包长必须小于或等于1023字节。 在使用URB来进行同步传输数据时,URB的结构也和块传输使用的结构有所 不同,它包括了一个结构体为USBD—ISO PACKET_DESCRIPTOR的数组 IsoPacket,这个数组描述了同步传输中的每个传输包的信息,包括偏移量、长度以 及状态。 在~般的同步传输驱动中,通常的做法是把应用程序要求传输的数据分成n 段,然后建立n对予]RP/URB,把它们发送到下层驱动中,其中每一对子IRP/URB 负责传送若干个数据包。对于全速同步传输,每一对子IRP/URB只能传送255个 数据包,对于高速同步传输,每一对能传1024个数据包,但是数据包数必须是8 的倍数,因此需要程序员通过某些办法来调整数据包的长度。而且主机端驱动程 序设计目标要求应用程序能控制主机发送整长包、短包以及空包,在此要求下, 给出下面的解决方案。 5.4.2解决方案 其思路是将传输的数据分成2或3种长度的包传输:一种长度的包是满长度 包,其长度是由管道信息获得的最大包长;第二种包是最短长度包,其数量和长 度都会根据传输的总长度而变化;第三种包是中间长度包,它的长度介于前2种 包长之同,数量只会是0或者1. 其步骤如下: (1)保证传输总长度TotalLength>=8; (2)求出在朱调整包长前,要传输所有数据需要的包数量numbcrOIPackets; numberOtPackets=(TotalLength 4-packetSize·11,packctSize (3)因为需要实际包数量为8的整数倍,因此需要让numberOIPackets加上 某个小于8的整数正好为8的整数倍; if(o==(numberOIPackets%8)){ actualPackets=numberOfPackets; 47 电子科技人学硕士学位论文 } else{ actualPackets=numberOfPackets+(8一(numbetOfPackets%8)); } (4)确定数据包当中最短长度包的长度; minDatalnEachPacket=TotalLength/actualPackets; (5)把最短长度包那么长的数掘放入所有包中,计算剩余数据的大小; dataLeftToBeDistributed=TotalLength一 (minDatalnEachPacket‘actualPackets); (6)把这些剩余数据填充最短长度包,求出能把多少个包填满; numberOfPacketsFilledToBrim=dataLeftToBeDistributed/ (packetSize·minDatalnEachPacket); (7)确定在填满后是否还有剩余数据; dataLefiToBeDistributed一=(numberOfPacketsFilledToBrim+ (packetSize-minDatalnEachPacket)); 中间长度包的包长=dataLeftToBeDistributed+minDatalnEachPacket (8)数据的存放顺序是先在前面存放满包,中间放中等长度包,最后放最短 长度包。 5.4.3增加的数据结构 typedef stmct_ISOUSB RW CONTEXT{ PIRP RWhg; ULONG NumXfer; ULONG Numkps; ULONG hpsPending; PDEVICE_EXTENSION DeviceExtension; PSUB CONTEXT SubContext; 1 ISOUSB RW CONTEXT,’PISOUSB RW CONTEXT; 该数据结构用于控制同步数据传输,其中RWlrp是一个指向当前IRP的指针, 用来保存主1RP信息;Numxfcr表示已经传输数据的长度;Numlrps表示子1RPAJRB 对的数量;IrpsPending表示未处理的子IRP/URB对的数量;SubContext是一个指 第五章主机端驱动程序主要模块设计与实现 向结构体为SUB_CONTEXT的指针,该结构体用来保存子IRP/URB对的信息, 如下所示: typedef struct—SUB—CONTEXT{ PIRP Sublrp; PURB SubUrb; }SUB_CONTEXT,‘PSUB_CONTEXT; 5.4.4传输流程设计 接下来将介绍高速同步传输的流程。 (1)按照上面提到的解决方案调整包长,并确定需要传输子1RP/URB的数 量(Numlrps); (2)同块传输类似,创建一个结构体为ISOUSB—RW—CONTEXT的内存缓 冲区来保存主IRP的传输信息,让指针iso rwContext指向这个缓冲区, 再创建一个结构体是SUB_CONTEXT的缓冲区来保存每对子IRPAJRB 的状态信息,让iso_rwContext.>SubContext指向该缓冲区。缓冲区还包 括指向主IRP的指针,Numlrps,待处理的子IRP/URB数量,指向设备 扩展的指针。最后把指向该缓冲区的指针保存在IRP的 Tail.Overlay.DriverContext中。在做完准备工作后,下面开始建立予IRP 和子URB; (3)创建一个子IRP,并把该IRP指针保存在rwContext.>SubContext中; 将实际包数量和1024做比较,如果小于或等于,表示这个子1RP将是 最后一个,该IRP的包数量就是实际包数量,如果大于则这个IRP包数 量是1024,并将实际包数量减去1024; (4)创建一个子URB,并把该URB指针保存在r,vContext->SubContcxt中; 比较此次传输的包数量和满长度包数量的大小,得到此次传输数据的长 度; (鳓初始化该子URB; (6)在.subUrb.>UrblsochronousTransfer.IsoPacket中设置每一个数据包的信 息,由于前面是按照满包、中等长度包以及最小长度包的顺序排列包的, 而且每种包的数量都已知,因此在设置数据包信息的时候就比较容易; (7)对子IRP的堆栈进行设置,并对完成例程进行设置; 49 电子科技人学硕十学位论文 (8)返回(3),直到创建了Numlrps对IRP/URB (9)依次向下层驱动发送所有子IRP/URB。 5.5对FIash操作例程的设计 对Fl弱h操作例程的设计需要深入理解Bulk.Only传输协议以及UFI子类命令, 而且当中涉及到块传输和控制传输的使用,下面将分析如何在例程中实现该操作。 5.5.1增加的相关数据结构 根据Bulk—Only协议对CBW和CSW格式的规定,对二者的数据结构定义如 下: 1.CBW typedef struet_USB CBW{ ULONG dCBWSignature; ULONG dCBWTag; ULONG UCHAR dCBWDataTransfeflLength; bmCBWFlags; UCHAR bCBWLUN; UCHAR bCBWCLength; UCHAR CBWCB[161; }USBCBW,。USBCBW; 2.CSW typedef struct_USB CSW{ ULONG ULONG dCSWSignature; dCSWTag; ULONG UCHAR dCSWDataResidue; bCSWStatus }USBCSW,。USBCSW; 其中每个成员变量的含义参见表2-4和2-5。 50 第五章主机端驱动程序主要模块设计与实现 5.5.2传输流程设计 本部分要做的就是在得到任何一个UFI命令,或者它和数据的组合,按照协 议的要求,生成符合要求的CBW,通过块传输管道向设备进行传送,并将本部分 程序和/或设备对命令的处理结果返回给上层驱动程序。通过理解和总结Bulk.Only 协议可以得到主机端Bulk—Only传输中的几条基本原则: ●所有进行传输所需要的管道被STALL掉的,要先清除管道的STALL状态; ●在一个UFI命令处理流程中同一个管道已经被STALL掉两次以上的,要 对管道进行复位恢复操作; ●只有得到了有效的CSW,才可以说明一个上层发来的命令被本部分程序 成功处理完了(但不一定是设备成功按照主机要求执行了命令); ·当得到了有效的CSW,如果其bCSWStatus域为02h,主机要执行复位恢 复操作。 由第二章对Bulk-Only协议的介绍,可以知道主机端进行一次Bulk-Only传输 需要有三个阶段,发送CBW阶段、数据传输阶段以及接收cSW阶段。下面将分 别介绍三个阶段的流程设计。 1.发送CBW · 如图5-8所示,当例程收到一个UFI命令和相应数据后,首先查询OUT管道 的状态,如果管道状态是STALLED,那么就调用函数去清理管道,清理完毕后就 可以根据UFI命令创建并发送一个相应的CBW,如果发送成功,则返回成功状态, 如果发送失败,则表示OUT管道被STALLED了,根据Bulk-Only协议,主机端 应该做复位恢复操作,并返回一个相应的状态。 51 电子科技大学硕十学位论文 图5.8发送CBW操作流程圈 2.数据传输 如果发送CBW的例程返回成功状态,那么就根据UFI命令判断是否需要读写 数据,如果要读数据那么就初始化读数据的请求并发送出去,如果读取数据成功, 那么就进入读取CSW例程,如果失败,主机端将会发出读取IN管道状态请求, 如果IN管道被STALLED掉了,则申请清理IN管道,并进入读取csw例程,如 果玳管道未被STALLED,那么执行复位恢复并返回错误代码。如果根据UFI命 令判断不是需要读数据,而是要求写数据那么执行流程和读数据类似,只是管道 不同。如果既不读数据也不写数据,那么直接进入读取Csw例程。其流程图如图 5.9所示。 52 第五章主机端驱动程序主要模块设计与实现 圈5-9数据传输操作流程图 3.读取CSW 如图5-lO所示,进入读CSW例程后,先初始化读CsW请求并发送,如果读 取成功,那么先检查该Csw是否合法,如果合法,判断其是否有效,如果无效复 位恢复并返回错误代码,如果有效返回CSW.Status,如果该Csw是非法的,则也 做复位恢复操作;如果读取失败对矾管道做清理,如果清理成功则再次读取CSW, 如果仍然失败则做复位清除处理,如果成功就按照第一次读取CSW那样进行处理. 53 屯子科技人学硕士学位论文 翻5-10读取CSW的流程图 5.6本章小节 第五章主机端驱动程序主要模块设计与实现 本章根据主机端驱动程序设计流程,首先从分析即插即用设备状态入手,分 析增加的数据结构,并通过介绍3个基本设备请求来介绍即插即用例程的设计与 实现;然后从比较简单的控制传输开始介绍主机端驱动程序设计的第二步,即完 成三种基本数据传输方式的传输例程;最后分析了对Flash操作例程的设计,将 Bulk-Only传输这个复杂过程分成3个较为简单例程介绍,并给出了详细的流程图。 55 电子科技大学硕士学位论文 第六章 主机端驱动程序的调试和测试 无论是用户层程序还是内核层程序,在程序的开发过程中不可避免的会产生 错误,所以程序的开发是不断的改进,调试和测试的过程。对于用户层程序,程 序员可以在编译的过程中同时进行调试,很多的集成开发工具对用户层程序调试 提供了很好的支持,但是对于处于内核层的驱动程序,程序的调试和测试是一个 复杂的过程,结合本次驱动程序的丌发,本章将介绍驱动程序的调试和测试过程。 6.1主机端驱动程序的调试 6.1.1调试环境 本次主机端驱动程序的调试采用了NUMEGA公司开发的SofllCE内核调试 ’ 器,这罩简单的介绍该调试环境。 1.主机需安装的软件; ● Windows XP: ● Visual C++6.O: ●Windows XP DDK: .●DriverStudi03.2。 2.设置SofllCE:进入Settings选择SofllCE启动方式为Boot。 6.1.2调试方法 1.加载驱动程序,在SoflICE中带有一个Symbol Loader的工具,该工具用来加 载驱动程序,加载一个驱动程序分为三个步骤,首先选中待调试的驱动程序, 然后把加载的.sys文件翻译成为.nms文件最后才是加载.nms文件。 2.一旦成功的加载了驱动程序,按ctfl+D进入SofllCE调试命令行窗口。S曲lCE 窗口主要由数据窗口、代码窗口以及命令窗口三个部分组成,在命令窗口中, 使用File命令可以在代码窗口中显示待调试的源码。光标移动到源码某处,可 以按“F9”或者在命令窗口中使用BPX命令设置断点进行调试。 3.SofllCE包含丰富的调试命令,具体使用可以参考SofllCE的帮助文档。 第八章土机端驱动程序的调试和测试 6.2主机端驱动程序的测试 6.2.1测试内容 在驱动程序编译通过之后,需要对驱动程序进行测试以判断驱动程序是否符 合预期的要求,本驱动程序主要从以下几个方面进行测试: 1.驱动加载测试 卸载主机中原有usbstor.sys,并且删除usbstor.inf文件,通过把现成的U盘插 入主机,选择加载本驱动程序,观测驱动程序是否能够加载成功。 2.PnP测试 通过把现成的u盘插入以及移除主机,验证驱动程序能否正确完成PIlP操作。 3.控制传输测试 通过获取现成U盘设备描述符,验证驱动程序能否进行控制传输。 4.块传输测试 主机向设备发送指定内容的数据,通过连接在USB分析仪的监视主机观测传 输的数据是否是主机发送的数据;主机再从设备读取已经写入的数据,通过监视 主机观测读取的数据是否和写入的相同。 5.同步传输测试 测试方法和块传输测试类似。 6.对Flash操作测试 (1)正常响应测试 通过执行应用程序对U盘进行数据传输操作,通过DebugView观测内核数据, 测试驱动程序是否如预期的那样作出响应。 但)错误响应测试 通过执行应用程序对u盘进行数据传输操作,通过DebugView观测内核数据, 检查错误激励应用于驱动程序时做出的相应响应。 6.2.2测试环境 1.硬件环境:调试主机、监视主机各一台,ARM开发板一个,USB分析仪一台, 现成的U盘一个; 2.软件环境:调试主机运行在Windows xP环境下,并安装有DebugView。 其硬件连接图如图6-1所示。 57 电子科技火学硕十学何论文 图6-1主机端驱动氍序测试环境幽 当测试驱动同步传输功能时,只能使用ARM开发板;在进行其它测试时,可 以使用现成的U盘。 6.2.3测试工作 由于部分测试由于条件限制无法在学校进行,因此下面只给出使用现成u盘 测试到的数据。 1.测试驱动能否正常加载 图6-2 USB设备的相关信息 第六章主机端驱动程序的调试午¨测试 其执行步骤如下: (1)修改USB onboard.inf文件,将其VID和P1D换成即将插入的u盘对 应值。 (2)卸载主机中原有usbstor.sys,并且删除usbstor.inf文件。 (3)插入U盘,并按照其提示选择USB onboard.inf和USB onboard.sys所 在目录。 (4)打开设备管理器,观测是否能看到该设备 图6-2是加载驱动后从设备管理器看到的内容,可以看到USB_onboard这个 驱动程序已经成功加载,表明驱动程序能够讵常加载。 2.测试驱动能否正常完成PnP操作 由第二章可以知道即插即用设备的驱动程序应该包括下列5个基本功能:处 理设备的添加和删除,处理设备的资源分配,处理查询停止和查询删除消息,处 理停止设备消息以及处理删除设备消息。但是对于本项目来说最重要的是设备插 入主机后,驱动程序能够启动该设备,并且能够完成后面的测试,因此本论文未 对PnP所有功能进行测试。下面给出依靠查询方式删除硬件的测试结果。 图6-3通过查询方式安全卸载设备 图6。3是u盘插入主机后,点击右下角安全删除硬件的图标后显示的内容, 表明该硬件能够被通过查询的方式安全删除,表明该驱动程序能成功完成通过查 询方式删除设备此PnP功能。 3.测试驱动程序的控制传输功能 59 电子科技大学硕士学位论文 测试驱动程序的控制传输功能的方法就是通过执行应用程序柬调用驱动控制 传输例程,并在DebugView观测内核凋试信息。下面给出对获取设备描述符此项 控制传输的测试结果。 图6-4从设备获取的设备描述符 图64是通过应用程序执行获取设备描述符例程后从DebugView观测到的内 核调试信息,其中打印了获取的设备描述符所有信息,和该U盘的设备描述符完 全一致,表明本驱动程序能正确获得设备描述符。 4.测试驱动程序的块传输功能 由于测试驱动程序对Flash的读写操作就是对驱动程序块传输的应用,因此此 处就省略此项测试。 5.测试驱动程序的同步传输功能 由于此项测试工作只能在公司进行,因此无法给出测试结果。 6.测试驱动程序对Flash的读写操作 ●正常响应测试 本次测试希望能将已知的连续的整数写入Flash的0号逻辑块地址,写入的整 60 第六章主机端驱动程序的调试和测试 数从O开始,然后从O号逻辑块地址读取相同长度的数据,观测数据是否和写入 的数据相同。由于UH命令中传输长度字段规定了传输数据的总量,通常是逻辑 块的数目,因此每次写入Flash的数据必须是512的整数倍(一个逻辑块能容纳的 字节数是512)。 图6—5是在写入数据时从Debugview中获取的调试信息,其中包含了发出的 CBW的值和数据传输过程以及收到的CSW值。 38.5831250T 33.58314514 33.58315659 33.5831T94T 83.56319473 33.5832138I 33.56323288 33.58505249 33.58508682 33.5851 0971 33.58510971 33.56514023 33.585i52t9 33.58703995 33.58T089钳 33.50903885 33.58909225 33.59103394 33.59109116 33.59303665 33.5030938T 33.60174179 33.60180283 33.61053848 33.61050189 33.61203766 33.61209488 33.6t403656 33.61608124 33.61612320 33.62003708 33.62007141 33.620098ll 33.62012i00 33.62014389 33.62017059 33.60019730 33.62022018 33.62024689 33.82025978 33.62029648 33.62032318 33.62034607 33.62037659 33.62039566 ebw[25]is:妇0 盘};器i:;簧: 发送cBw成功 。chhe[29[28j冀;盎:t 开始数据传输 cbv【30】is:Ox0 l c5T[3t】15:010 l + 8ucessfully send the c"to tIl。d·吐ceI I 瓦五rr嚣瓦百田i五筛r———一 Coaaand is of for’rrzte type.1 l I I Ihre are 512 bytes data to read oE paramettrs to,end to deviceI write啪to Send out the request to write dnta to the PIPE 007{ sent out a packet t珂to write the data with the lm珥th of明byte= wire啪to Send out the requeet to vrxte data to the PIP童OUTl sent out a packet t玎to write the data Iith the length of 64 bytes write啪to of翻研e● Send out the requeet to write&ata to the PIPE 0I,TI sent out a packet try to write the datt with the lencth Send out the requeut to vrxt●data to the PIPE 0wr! packet"ite啪to sent out a t珂to wite the data with the lex堪,th of 64 bytet Send out the KeqLlest to wite data to the PIPE 0IITf write嘞to sei“t out a packet try to write the data with the ler*th of鲥b外e‘ wxte嘲to Send out the request to Trlte data to the P口E 007I sent out a packet tr7 to write the data with the lerqrth of附hltes packet”it●啪to Send out the request to wite data to the PIPE 0玎T! serdt out a try to wite the data with the 1蜘‘th of鲥bytes sertt呲a Send out the request to write data to the PIPE OUTI packet Eite u陆to try to Y“te the d破a Tith the ler,Cth of“切t·, C暑Iled S曲titUrb to sent out a IJ髓to get the CSW a first tile 品#毛萼删f矗ii=三==五i_获取到csw recelved a valid C观Decoding... 麓the fo撼r j曩is 0ix53——一溅淼W .ge一t c…Ⅳfl】: %伺烈HOL3 the for。get—c“.c“【2】is:0142 the for_get—c纠.c“【3】is:0x53 the for—get—c“.c“【4J is:0Il the for—get—c玎.c肼【5】is:o=o the for—get—c纠.cs-【6】is:OxO the for—get—c抖.c钳【T】h:呶0 the for_get—cot cs-[81 i0:OxO the for_get—cm cs-【9】iu:0xo the for—get—cm c计【l 0】is:010 the for 1.t c,玑on,[111 is:OxO 图6-5写入数据 由图可以看到在成功发送CBW到设备后,由于命令要求写,因此进入写数据 循环,并显示出写数据的数量是512bytes,每发送一个URB写64bytes到u盘: 在发送完毕后,尝试第一次接收CSW,并成功获得CSW,然后丌始解析CSW, 判断这是个合法并且有效的CSW;接着驱动程序把CSW每一位都打印出来,可 以观察出dCSWSignature即是43425355h,而dCSWTag此字段也为相应的CBW 61 电子科技大学硕十学位论文 的dCBWTag的值。 图6-6是从u盘读出数据时,从Debugview中获取的调试信息,其中包含了 获得的数据以及CSW。 l Ti耻Deb啦Pzi_nt ..34069.13671875 read啪to serrt out a packet t玎to read the data砒th the len武h of 64 byte= ..34069.i3671875 ..34069.13671875 read啪to Send out the reque5t to sead d破a frol the PIPE I耳I =ent out a packet try to read the data with the lerLfth 0f M b计e¥ ..34069.13671875 ..34069.13671675 read嘞to Send out the request to read data frol the PIPE IN! sent out a packet try to read the data with the Im幢th of 64 bytes ..34069.1367l 875 ..34069.14062500 ..M069.14062500 read嘲to of阻研eJ Send out the request to read data from the PIPE工胃l sent out a packet try to rend the data with the letlfth conand data length=512 ..34069.i4062500 ..34069.1d062500 ..34069.14062500 Data recexved。————————————中已经获墩剑数据 Called 8ubmtUrb to 5啦t out a URB to‘n the C讣a first t1" ..34069.14062500 ..34069.14843750 ..34069.14843750 ..34069.14843750 ..34069.14843750 臻害毒耋差粼嚣^■石葛————_—争验证出此csw 』teGcoe旦xvte丛d tah二vaeli垃dsCtsaI奎.tDue!c-os扎氧嚏毫…i暮j曩事蠢矗聊———一-已…经…获取一剑csw ..34069.14843750 —34069.14843T50 ..34069.14843750 ..34069.14843750 ..34069.14843750 ..34060.14043780 ..34060.14843T50 ..34060.14843750 ..,4069.14843750 ..34069.14843750 ..M069.14843750 :hehe;oorr_一。ge。t.。c。sv..。。“。【[2I;::;怒器 the for—get—c玎.c"【3l is:0=53 the for—gut—c“.c“【41 1,:恤1 the for—cet—cst c纠【5】i●:0=0 the for—get—csv.c“【6】is:OxO the for—get—csw.csv[7】is:0x0 the the for一‘计~c“.c,’[8】is:OxO for—get.c纠.c纠【9】i3:妇0 the for—get—c州.c“【10】is:OxO the for—get—cfv.cs-[1 l】is:OzO 为有效且合法 ..34069.14843750 ..34069.14843750 ..34069.14843700 ..34069.14843750 ..34069.14843750 -打日J出获取剑get 1地———一 ’he‘t h:e:da一tgae:t‘。。:。=:’—:—=!’翌’!。:。竺‘!。。。1。。。。。’’……一。 的数据 011. 假2J ..34069。14843750 ..34069.14843750 Ox3, 呶4. ..34069.14843750 ..34069。14043750 呶吼 帜6。 ..34069.14843750 Ox7. ..34069.14843750 0x8J ..34069.14843750 ..34069.14843750 妇9J 血II ..34069.14843750 Oxb, ..34069.14843750 Oxc, ..34069.14843750 幽6-6读取数据 从图可以看到在主机发送数个URB读取IN管道数据后,收到了数据,之后 又发送URB读取IN管道,获取到CSW,经过检测,判断出该CSW是合法且有 效的,并且在后面打印出了获取的CSW的值,最后打印出获取的数据,可以看到 获取的数据就是从0开始连续递增的整数,也就是主机端通过OUT管道发送到 Flash中0号逻辑块地址的数据,由此可知,主机可以通过本驱动程序来对Flash 进行操作,正确得读或者写数据。 ●错误响应测试 本次测试将发送非法的CBW到设备并且希望读取数据,从前面的Bulk。Only 第八章主机端驱动程序的调试和测试 协议知道,设备在收到非法的CBW是不会发送数据到主机的,图6.7是主机向设 备发送了一个非法的CBW后从Dcbugvicw中获取的调试信息。 17439.32812500 17439.328i2500 17439.32812500 17430.32812500 1H39.32812500 17439.328i2500 17439.32812500 17439.32812500 17439.32812500 17430.32812000 17439.3281 2500 17439.32812500 17439.32812500 17439.325l 2500 17439.32512500 t7439.32812500 17439.32812500 17409.32812500 t7439.32512500 17430.32012500 17439.328i2500 17439.32812500 I丁439.328t2500 17439.32812500 17439.32812500 17439.32812500 17439.32812500 i7439.32812500 17439.32812500 17439.3281 2500 17439.32812500 17439.32812500 lN39.33007813 17439.33007813 17439.33007813 17439.330078t3 17439.330070i3 1744lJ 33007813 17441.33203125 174q1.332031 25 i74qI.33203l 25 17441.33203125 17441.028l 2500 1744I.82812500 17441.83007813 cbw[5】h:OxO cbw[B】is:0x0 cb-【T】1#:0=0 cbw[8】h:0=0 cb-【9】is:0x2 cbv【10】h:0=0 cb·【11】1s:OzO cbw【12】is:血80 cb-【13】is:0=0 cbw【t4]is:啦c cbw【15】10:血28 cbw【15]is:0=0 cbw[171 is:0=0 cbw【18】is:OxO cbw[1们1s:0x0 cb-【20]is:0x0 obw【21】1s:010 cbT[22】1s:妇0 cb-[23]is:011 cb-[24】is:0=0 ch【25J 10:0=0 糍㈦is黜0=0蚕蓑装襄嚣 ch,【28】 : m映啾裂借 cbw【29】13:0=0 cbw[30】1}:0xo ‘ cbw【31】b:0=0 T 末能获取csw 未收到数据, 但足lN管道来 被阻塞 雾黧搿2恤e“l蔓or FIFE: is of forread . I datⅢad There 512 bytes州t to read }l ‘ S蛳d the request t ● read dat a fr靠 the 碍‘ y圭’:·toConand loopout toBecLn iype2Ll[e Faxled t 0 read data from the devxce a}ld nOW tz01"瑚elved a And the pxpe l■1s 黼。蛊}辫翟::。5笛严3““”“ 60t the natus of pipe IN w比cesdullyl of∞b,t●● 图617发送非法的CBW 图中显示,当主机向设备发送一个非法的CBW后,主机无法从玳管道获取 数据然而矾管道也未被STALLED掉,主机向设备发送URB以读取CSW,也未 能获取CSW,由此可知,当主机发送非法的CBW包给U盘,本驱动程序能按照 Bulk-Only传输协议来对U盘的响应进行处理。 6.2.4测试结论 由已完成的测试可以得出以下结论: (1)驱动程序能够被正常加载: 电子科技人学硕十学何论文 (2)驱动程序能实现基本PnP操作; (3)驱动程序能完成控制传输; (4)驱动程序能够完成高速以及全速块传输,根据传输端点缓冲区大小来向 设备端用块传输方式发送已知数据的整包、短包和NULL包; (5)驱动程序能够通过Bulk—Only传输方式对Flash进行读写。 第七章总结和展望 第七章 总结和展望 论文以基于ARM核的USB2.0-AHB接口IP设计为课题背景,本人在大量搜 集和研究相关资料的基础上,采用理论实践相结合的方法,完成了以下几点工作: 1.深入学习USB2.0协议以及Mass Storage类协议,根据项目的实际需要,分析 本驱动程序需要完成的功能; 2.全面学习WDM驱动程序基础理论,从分析本驱动程序需要完成的功能入手, 完成本驱动程序的整体构架设计,并根据实际情况提出分步设计方案; 3.在研究使用DDK开发WDM驱动程守的基础上,完成本驱动程序的主要功能 . 模块设计:PnP处理例程,块传输例程,同步传输例程,控制传输例程以及对 Flash的操作例程: 4.广泛查阅在Windows下调试和测试驱动程序的相关资料,完成对本驱动程序 的调试和测试。 经过长时间的研究和开发,本人最终完成了基于ARM核的USB2.0.AHB接口 lP主机端驱动程序的开发,通过了除同步传输外其他所有测试。 本口核已经实现为FPGA验证板,通过了实际应用环境的测试,达到了课题 的各项技术指标和要求,并通过了验收。 总的看来,本次课题设计过程中,本人顺利完成了相关的工作,但是另外一 方面诸多原因使得本次课题设计存在如下的一些不足,有待改进:丌发由于项目 最终对u盘的文件传输测试可以直接使用Windows下的驱动程序,因此本驱动没 有增加对文件的处理功能;由于合作公司在最后阶段临时改变FPGA测试方案, 使用CATC完成主机端驱动的功能,因此该本人没有条件对该驱动进行同步传输 测试。 参考文献 参考文献 【1l Gerwin Heyer.32一bit ARM-based MCU Offer Interesting SoC Design Reference.世界电子 原件,2005,3:32-36 嘲 钟文枫,耿彦莉.AMBA片上总线在SOC芯片设计中的应用.电子设计应州,2006,3: 97-98 杨I||lj,陈禾.基于SoC平台的AHB总线系统研究.现代电子技术,2006,6:67.69 嘲Ⅲ 张青竹,陈文楷,张利洲.USB CORE与AHB总线接口功能模块的硬fl:殴计.仪器仪表 用户,2006,13:3940 黄国勇.基于IP的SOC设计.世界电子元器件,2001,9:33.35 张溯,高明伦,李丽等.SOC重Hj设计中的IP库技术.电子产品世界,2003,2:52-55 王成儒,李英伟.USB2.0原理与二l:程开发.国防工业出版社,2003 嘲嘲研嘲 兰晓红.Windows下基于WinDriver驱动的USB程序殴计.重庆师范人学学报(臼然科学 版).2004,21(4):31-33 刘少峰,韦克平.USB软件系统的开发.计算机应用研究,2002,3:102-104 研m 刘明珠.USB Host技术剖析与应用设计.麻用科技,2005,32(8):20-22 李平,张云麟.Windows 2000内核模式驱动程序没计.计算机应H{研究,2003,l:122-124 m陷 郭静,刘付火.Windows WDM USB殴备驱动程序的开发.国外电子测域技术,2004,3: 37-41 范献林.WDM设备驱动程序开发与应Hj.仪器仪表刚户,2004,11(1):29-31 盖索丽,常青.USB接口的驱动程序开发.河北省科学院学报,2005,22(2):17.20 眇畔∞ 陈国华,郑玲.Windows环境下应州程序与WDM驱动程序的通信机制.现代电力,2004, 21(2):73—76 武安河等.Windows2000/XPWDM设备驱动程序开发【M}屯子工业出版社,2003 Compaq,Hewlett·Packard,Intel,et a1.Universal Serial Bus Specification,Revision 2.0.2000 Waiter oney.Programming Windows Driver Modal.US:Microsoft Press,1999 陋Ⅳ郾眇 Mirosoft Corporation.Windows XP Driver Development Kit Documentation.US:Microsoft Corporation,2002 参考文献 [20l USB lmplementem Forum.Unlvelsal Serial Bus Mass Storage Class Bulk-Only Transport. 1999 [21】USB lmplementers Forum.Universal Serial Bus Mass Storage Class UFI Command Specification.1998 张峰峰,潘明,韦海旋等.嵌入式U盘读写器接口技术和系统设计.技术纵横,2006, 11:20-23 [231 卞廷波,王忠仁.USB Mass Storage类的设备端固件开发.实验科学与技术,2005,4: 49-52 [241 洪毅峰.基于ARM的嵌入式USB主机系统设计:【硕士学位论文】,杭州:浙江大学, 2m5 【25】 宋滨,裴昌幸.WDM驱动程序和上层应用程序之间建立通信方法讨论.电子科技,2005, 3:10-12 【26】 沈利香,郭麦成,黄兆样等.基于WDM的设备驱动程序设计.计算机工程与科学,2004, 26(3):94-97 [271荣佳波,常明志,井科伟等.USB设备的WDM目g动程序设计.应用科技,2004,31(3): 39-41 67 致i身} 致谢 首先怀着诚挚的敬意深深感谢我的导师李广军教授,在课题设计和论文撰写 过程中,他给予了大力帮助和悉心指导,引领我学会了分析问题和解决问题的方 法,对课题设计和论文撰写中存在的具体问题提出了许多宝贵的建议和意见,并 帮助我克服了许多实际工作中遇到的困难,李老师严谨的治学态度和实事求是的 工作作风已经成为我在学习和工作中的表率,再一次向李老师表示我真诚的感谢。 此外要特别感谢同课题组的刘俊江、左宏权、陈静、李琦,冯韬几位同学, 他们在设计思想和技术细节上带给了我许多有益的探讨和启发,同时也为我带来 了深厚的友谊。对其他在我论文写作过程中给予过帮助的老师和同学,在此也一 并表示感谢。 感谢我的父母和家人。感谢他们对我二十多年无微不至的关心和支持。 个人简历、攻硕期间的研究成果及学术论文发表 个人简历、攻硕期间的研究成果及学术论文发表 个人简历 程俊,男,1982年生; 2000年9月~2004年7月, 就读于电子科技大学通信与信息工程学院计算机 通信专业,获学士学位; 2004年9月~2007年6月, 就读于电子科技大学通信与信息工程学院信号与 信息处理专业,攻读硕士学位。 参加的科研项目 2005年9月至2007年3月,参与和某公司合作的“基于ARM核的USB2.0.AHB 接口IP设计”,负责主机端驱动开发以及FPGA测试方案设计。 发表、录用的论文与申请专利 程俊,李广军.使用DriverStudi03.1开发usb设备驱动程序.通信与信息技术, 2006中国西部青年通信学术会议论文集:631--635 69 基于ARM核的USB2.0-AHB接口IP主机端驱动程序的设计与实现 作者: 学位授予单位: 程俊 电子科技大学 相似文献(10条) 1.学位论文 李忠 远程USB波分复用光纤通信技术研究 2004 本文结合深海波分复用光纤通信系统这一实际课题,重点研究了采用现场可编程门阵列进行USB协议的解析,实现USB远程透明传输,并对使用光纤 实现USB设备的远距离连接所涉及的相关硬件技术进行设计和实验研究。主要包括三部分,第一部分分析了USB总线的通信原理和USB1.1协议,包括:通 信的协议层次结构,包的编码、组成、类型,事务处理的过程,传输的过程。第二部分针对USB总线透明连接的功能要求提出了实现方案,并对近端 USB主设备光收发模块(Local Host Module)、远端USB从设备光收发模块(Remote Slave Module)电路进行了设计,包括芯片选取以及外围电路的设 计。第三部分是根据USB光收发模块的结构和功能,介绍了系统的FPGA内核设计。最后,对本文的工作进行了简要的总结,并提出研究工作的进一步展望 。 2.期刊论文 杨柳.杨一栋.王新华.YANG Liu.YANG Yi-dong.WANG Xin-hua 基于USB的波分复用光传飞行控制系统的 开发 -光通信技术2006,30(9) 针对飞行控制系统的特点,开发了一套基于USB的多路数字信号进行波分复用的光纤传输系统,以提高光传系统的传输速率.着重构建了光发射器、光 接收器及光波分复用器的物理系统.在直升机显模型跟踪电传飞行控制系统(MFCS)的基础上,开发了直升机贴地飞行波分复用光传系统实时半物理仿真验 证平台.通过光传与电传性能对比,验证了所开发系统的可行性,具有工程实用意义. 3.学位论文 杨柳 基于USB的光传操纵系统开发 2007 随着航空电子系统任务量的日益庞大,飞控系统中传递着大量的实时控制信息,这对传输速率提出更高的要求。本文以提高光传操纵系统的传输速 率为目的,开创性地提出了分布式USB光传操纵系统的设计思想,开发成功基于USB总线的光传操纵系统原型样机,并进行了相关地面物理仿真验证。同 时研究了基于PCI总线的双通道全双工光通信系统硬件部分的开发。 本文首先阐述了USB系统的组成特性,对USB的电气特性进行了讨论,探讨了构建USB光传操纵系统的可行性方案。在此基础上,利用USB接口并结合 波分复用技术实现了多通道光通信系统,可在单根光纤中同时传输三路数字信号,单路传输速率最高达3Mbps,实现了光传操纵信号的Mbps级以上的稳定 传输。 其次,为了满足光传操纵系统中的点对点传输的需要,本文开发了基于USB接口的点-点链路光通信系统。该系统可以实现传输速率同样高达 3Mbps的高可靠的数据传输,从而为飞控系统构建点对点光通信网络提供了解决方案。 第三,为了验证本文所提出的USB光传操纵技术方案的正确性及所开发的光接口器件的可行性,开发了USB人工着舰光传推力控制系统仿真验证平台 。这套平台验证了USB波分复用光通信系统和USB点-点链路光通信系统在技术上是可行的。 最后,为了满足高速航空电子对中高速数据传输速率的要求,本文提出了基于PCI总线的中高速光通信系统的实现方案,合作开发了一套基于PCI总 线的双通道全双工光通信系统。该系统采用了现今流行的大规模可编程逻辑器件FPGA作为控制器,从而并行控制多个光通信接口的收发。本文侧重于该 系统的硬件部分开发,重点论述大规模可编程逻辑器件FPGA的设计。 4.期刊论文 李忠.卢加林.陈建平.李新碗 远程USB波分复用光收发模块研究与开发 -光电子·激光2004,15(z1) 通用串行总线(Universal Serial Bus,USB)是一种新兴的计算机外围串行通信接口标准,与常用的计算机接口(如串口、并口等)相比,具有热插拔、 即插即用、传输速率高、可靠性好、扩展方便、成本低等优点,已成为当前计算机必备的接口,并广泛地应用于各种数码产品、计算机外设等[1].由于 USB电接口的最大传输距离为5 m,使得它不能应用于远程监控、远程数据采集等场合.本文研究远程USB波分复用光收发模块,采用现场可编程门阵列进行 USB协议的解析,实现了USB远程透明传输.USB光收发模块可广泛应用于远程使用USB设备的场合. 5.学位论文 宣海燕 基于USB总线的高速光纤Bragg光栅解调系统的研究 2007 光纤Bragg光栅(FBG)是传感领域研究的重要方向之一,其中光纤光栅波长解调是光纤光栅传感器能否得到应用推广的关键技术之一。目前商用光纤 光栅解调产品的采样速度在几赫兹到几百赫兹左右,仅能满足静态或准静态测量的需要,不能满足振动、地质监测等动态环境所要求的高速采样。 为了满足同时适应动态测量和静态测量的要求,需提高光纤光栅解调系统的采样和传输速度。本课题针对这一要求,设计了基于USB总线和边缘滤波 器的高速光纤Bragg光栅解调系统。完成了USB总线接口电路的设计,充分利用USB总线的即插即用、热插拔等特点,实现了光纤光栅解调系统的解调数据 在计算机平台上的高速采集、显示和存储。 本论文的主要工作如下: 1、解调系统基于无源比例解调原理,线性滤波器选用响应灵敏度比较高的基于介质薄膜原理的粗波分复用器CWDM,并对CWDM的分光特性进行了测试 ,实验结果显示CWDM的线性工作范围为1539.5nm-1543nm,响应灵敏度达到了15dB/nm,保证了解调系统的快响应速度和高分辨率。 2、设计了基于USB总线的高速光纤Bragg光栅解调系统的数据采集与USB传输硬件,包括AD采样以及USB接口控制部分。 3、设计了USB接口控制器的固件程序,用GPIF Designer波形生成工具设计了GPIF波形,并完成USB接口的枚举、批量传输的实现。 4、设计了解调系统的上层应用程序“FBG数据采集”,利用多线程技术在VC++6.0的编译环境下实现了数据采集与数据存储工作的同步进行。 5、为适应CWDM高的响应灵敏度,增大本解调系统的测量范围,对光信号检测与解调电路进行了优化改进。 6、建立实验系统,对解调系统的采样速度、传输性能、解调范围和波长分辨率进行了实验分析与研究。实验结果表明该解调系统的采样速度为 6.53kHz,可解调400Hz以下的动态信号;输入光功率大于或等于4μw时,解调范围为1539.5nm-1543nm;输入光功率为6.2μw时,在解调范围内波长分辨 率达到了9pm。 6.会议论文 李忠.卢加林.陈建平.李新碗 远程USB波分复用光收发模块研究与开发 2004 通用串行总线(Universal Serial Bus,USB)是一种新兴的计算机外围串行通信接口标准,与常用的计算机接口(如串口、并口等)相比,具有热插拔、 即插即用、传输速率高、可靠性好、扩展方便、成本低等优点,已成为当前计算机必备的接口,并广泛地应用于各种数码产品、计算机外设等.由于USB电 接口的最大传输距离为5m,使得它不能应用于远程监控、远程数据采集等场合.本文研究远程USB波分复用光收发模块,采用现场可编程门阵列进行USB协议 的解析,实现了USB远程透明传输.USB光收发模块可广泛应用于远程使用USB设备的场合. 7.学位论文 崔海朋 基于光纤光栅的液位测量技术的研究 2009 光纤光栅传感器除具备光纤传感技术的所有优点之外,还具有以下独特的优点:光源的光强波动与光损耗不对系统准确度造成影响;可实现波分复 用传感网络;可实现分布式测量系统。基于光纤光栅的液位传感器兼具了传统浮筒式液位传感器的结构简单、使用成熟的优点,还具有性能优越、安装 条件要求低、节能环保等其它优势。将光纤光栅引入液位测量领域具有广泛的应用前景。 本文设计和开发了一种新型的基于光纤光栅传感器的液位测量系统。液位传感部分基于浮筒式液位传感器的测量原理,利用光纤布拉格光栅作为敏 感元件,采用等强度悬臂梁对传感光纤布拉格光栅进行调谐,将液位高度变化引起的应变信号转换为光波长信号;解调部分采用与传感器中心波长完全 相同的光纤光栅作为匹配光纤光栅,采用匹配光纤光栅法对中心波长进行解调,实现了全光纤传感系统。测量系统利用光电转换电路和锁相放大电路对 含有噪声的信号进行处理,通过USB型数据采集卡把信号采集到计算机,利用LabVIEW软件对液位信号进行处理,构成实时信号处理系统。最后进行了初 步的试验,试验证明,采用光纤光栅传感器进行液位测量是可行的。 8.期刊论文 业界动态 -电视技术2001,""(4) 影立驰推出先进的视频点播系统 日前,美国影立驰技术公司宣布推出了目前世界最先进的整合宽带、互联网、数字视频应用及电视的端到端整体解决方案--EnReachVOD视频点播系统,从 而实现了通过电视机为消费者提供丰富的按需的互联网和多媒体内容。EnReachVOD 采用了目前世界先进也是价格具有优势的芯片组。EnReachVOD系统适 用于酒店、智能化小区和医院等场所。 EnReachVOD是一种将电缆、数字用户线(DSL)、光纤、无线等基础设施整合配置并服务运用于电视的解决方案,可以在电视上实现高质量、经济、内容丰 富的数字视频节目点播。除此之外,它采用了EnReachTV客户端软件,由通用的EnReach客户中间件组成并包括可选模块,从而允许宽带服务提供商自如地开 展各种综合服务,如互联网交流、多媒体应用、交互式电视和家庭娱乐功能,且对平台没有特殊要求。 EnReachVOD视频点播系统可以与Time-shifting功能相结合,借助大容量的硬盘存储,像操作录像机一样实现节目的播放、暂停、倒回、快进、自动搜索 等,并可即时或定时录下喜爱的节目。 另外,通过系统浏览器可以自由搜索、浏览网页,还支持POP及WEB方式收发电子邮件。系统具有MP3,CD,DVD,DVR播放器,实现了将音频、视频、网络交流 及各种宽带技术应用完美地结合在电视上,可以说,此项技术的出现使得电视机变成了一种可以随时获取丰富的个性化多媒体信息的先进网络设备,代表了 当今最先进的宽带视频应用技术,必将引起业界的广泛关注。■ Adobe推出Premiere 6.0 近日Adobe推出 Premiere 6.0。它是用于Mac与Windows系统的专业视频编辑工具的最新版本。 Premiere 6.0的新增功能包括:一个更新的用户界面、可支持一定范围的数字视频设备、一个新的情节串连图板界面、新的滤镜及可输出与 RealNetworks RealMedia,Microsoft Windows Media和Apple QuickTime等多种格式兼容的数字视频图像的能力。 同时,Adobe Premiere 6.0进一步完善了包括捕捉、编辑直至最终投影输出整个数字视频编辑过程的全部功能,提供了对DV(数字视频)设备、增强型用户 界面、新型专业编辑工具中内置跨平台的多种支持,并实现了包括与Photoshop、Adobe Effects及GoLive 等Adobe产品家族屡获殊荣应用软件的无缝集成 。■ 张海涛副局长在CCBN 2001上作报告 2001年3月21日,由国家广播电影电视总局主办的中国国际广播电视信息网络展览会(CCBN)主题报告会在北京国际会议展览中心隆重举行。国家广电总局 副局长张海涛作了主题演讲,向众多与会人士总结了"九五"期间广播影视科技事业发展的成绩与经验,展望了"十五"时期至2010年广播影视科技事业发展 的总体目标和主要任务,通报了传输网络公司组建和融资方面的进展情况。 报告中指出,今后5~10年,我国广播影视科技事业发展的主要任务可以概括为实现"两化"(即广播影视数字化、网络化),建成"三个系统"(即强大的无线 广播覆盖与实验系统、广播影视数字传输与直播相结合的卫星系统、广播电视监测系统)和"一个平台"(即以中央为主、省级为辅的全国性数字广播影视 节目平台),实施"三项工程"(即广播覆盖工程、村村通工程和电影2131工程)。 数字化、网络化、智能化和交互式成为当今广播影视的发展趋势,数字化、网络化是广播影视实现智能化和交互式的前提和基础,"十五"期间,必须在数 字化、网络化方面有所突破。 实现广播电视数字化分三步走:第一步是全面启动和推进(到2005年前),主要标志为两个,一是卫星传输全部实现数字化,有线电视以及省以上广播电台、 电视台基本实现数字化,现有模拟电视机采用机顶盒兼容接收数字电视信号,二是完成地面数字电视(包括高清晰度电视)标准的制定,在大城市开播数字电 视(包括高清晰度电视)标准;第二步是基本实现数字化(到2010年),主要标志是广播影视节目制作、播出及卫星、有线传输实现数字化,地面电视基本实现 数字化,数字电视接收机得到普及;第三步是全面实现数字化(到2015年),即全面完成模拟向数字的过渡,逐步停止模拟电视的播出。 实现广播电视网络化分两步走:第一步是"十五"期间基本实现网络化,主要标志有两个,一是有线电视实现全国联网,东部地区实现乡村联网,中西部地区 实现省内联网,有线电视用户达到1.5亿户,二是理顺全国网络管理体制,基本形成广播电视网络一体化的格局;第二步是到2010年全面实现节目传输和交换 网络化,主要标志有两个,一是中西部相对发达的地区实现乡村联网,有线电视用户达到2亿户,二是形成全国一体化的集有线、无线、卫星于一体的星网结 合、上下贯通、技术先进、覆盖全国的广播电视网络格局。 美国博通公司Broadcom宣布成立中国办事处 2001年3月22日美国博通公司(Nasdag BRCM)在北京宣布成立中国办事处。 美国博通公司是提供用于语音、视频及数据的宽频数字传输的高集成度芯片方案的主要提供商。该公司利用自已的专有技术和先进的设计方法,进行设 计、开发,提供宽带通信市场的单芯片系统的解决方案。Broadcom是一家系统级IC的供应商,其产品包括,有线电视机顶盒,电缆调制解调器 ,VoIP,HDTVxDSL高速以太网产品和光纤通信等。广泛应用于高速局域网,城域网,广域网和光纤网,家庭网住宅宽带网关,网络处理,直播卫星,地面数字广 播电信服务,无线通信,系统I/O服务器方案等。 美国博通公司具备的关键竞争优势是其拥有强大的核心技术,能够将一个完整的系统集成到一个单芯片上。 美国博通公司成立中国办事处旨在进一步加强与中国高速发展的宽带工业之间的联系,向全球最重要的宽带市场之一的中国提供全面支持的正式承诺。 该办事处将向有线电视网络、光纤、双绞线和无线网络上传输数字视频、语音和数据的宽带设备生产商提供本地化的服务。 在2001年3月的CCBN展览会上,美国博通公司介绍了其在业界领先的电缆调制解调器,电缆机顶盒和VoIP相关的芯片。 BCM3352是世界上集成度最高的家庭宽带网关的单芯片方案。该产品集成了电缆调制解调器、家庭网路、VoIP软件和高速因特网加密系统等核心技术的 成就,使设备制造厂商能够给运营商提供非常经济的多线宽带服务的网关设备;BCM3350是世界上集成度最高的单芯片Cable Modem方案,同时具有以太网和 USB接口;BCM7100是全球唯一的高集成度双向有线电视机顶盒单芯片方案,包含所有的主要功能模块,如QAM接收器、带外(OOB)接收器、突发上传调制、 DVB/DAVIC MAC、CPU、图形引擎、MPEG电视解码和周边设备;BCM1100是世界上第一颗单芯片IP以太网电话方案,可以与一台办公室电脑共享一个以太网插 座,提供高品质语音的IP电话,从而能够极大地降低企业网运行的通信成本。 Broadcom的方案不仅为有线电视运营商及OEM厂商提供了新的商机,也为广大的消费者提供多种宽带服务,如PC高速上网、VoIP电话、电视上网、VOD、家 居银行和股票交易等。 Agere Systems推出业内第一种10 Gbps可调谐激光发射机 前朗讯科技(NYSE:LU)微电子部Agere Systems日前于北京宣布推出业界第一种支持短距和长距高速光网络系统的10 Gbps可调谐激光发射机。该发射机 模块结构小巧,具备高达20条信道(间隔为50 GHz)的波长调谐功能。 新推出的C92发射机基于EML(电吸收调制激光器)技术,在一个公用的硅平台(即单片集成平台)上结合了一个可调谐的激光器和一个电吸收调制器,并在一 个小巧的封装中带有一个调制器驱动器、波长稳定器、光检测器及其它电子邮件。这一强大的集成功能使高速光网络系统生产商可以加快新产品的上市 时间。设备的强大功能可满足要求灵敏调节波长的应用(即实时交换不同波长),同时使生产商可以减少库存数量。 C92发射机内置有获专利的LambdaLock频谱稳定器,可以将激光辐射限制在间隔为50 GHz的20条相邻信道的任一条,从而提供优于20 pm的波长稳定性。内 置微处理器可以控制各种发射机功能,如平均光功率、波长和调制特性。客户可以通过一个RS232软件界面输入控制某一光信道的指令,以改变波长和监控 发射机性能。该发射机是应用于城域和最远可达40 km的远距离密集波分复用(DWDM)系统中终端设备的理想选择。 这种新的发射机可以和Agere C48制冷型激光发射机系列的产品兼容,使系统设计人员能够方便地替换模块以满足各种不同的传输要求。 Agere Systems已于2001年3月19日召开的OFC(光纤通信)展示会上现场演示了C92可调谐发射机。C92的试用样品将于2001年第2季度上市,并有望在 2001年第4季度大批量上市。 远太系统公司与华虹NEC,SUNTEK,CABLESOFT合作拓展中国有线(电视)网络管理市场 2001年3月22日,远太系统公司(FESNT)宣布与华虹NEC,SUNTEK,CABLESOFT等国际著名企业合作,共同进行中国有线(电视)网络管理系统及产品的开发与生 产。 中国有线(电视)网络的管理一直是困扰中国有线(电视)网络业发展的瓶颈,多年来由于这一方面的落后,使中国有线(电视)网络业的发展受到了严重的阻 碍,中国有线(电视)网络管理已经成为目前亟待解决的问题。远太系统公司是中关村专业从事有线(电视)网络管理系统研发高新技术企业之一,其系统及 软硬件产品已经被中国多家有线(电视)网络管理者应用。远太系统公司的有线(电视)网络管理解决方案已为众多有线(电视)网络管理者提供了快捷有效 的管理途径,降低了管理成本,提高了工作效率,使中国有线(电视)网络管理发生了革命性的变革。为进一步拓展中国有线(电视)网络管理市场,先后同华 虹NEC等多家国际知名企业合作,在有线(电视)网络管理系统及产品的开发与生产上加大了投入。 在本界CCBN展览会上,远太系统公司推出了同华虹NEC合作开发的应用于可寻址系统产品的FESNT CA2000网管专用集成芯片,使可寻址系统产品提升到了 一个新的水平,极大改善了可寻址系统产品的质量和产品的稳定性。从而为各传统分支分配器生产商生产优良的可寻址产品提供了渠道,并大大加快了有 线(电视)网络管理系统及产品的市场化进程。 哈雷演示用于光纤延深节点平台的以太网交换模块 作为推广光纤延深架构的一种折衷方案,哈雷公司在CCBN展示用于PWRBlazer节点平台的一系列以太网(Ethernet)交换模块。这些以太网交换模块可使运 营商将光纤同轴混合(HFC)网络无缝地进化成光纤到路边(FTTC)或光纤到户(FTTH)网络。 哈雷公司的以太网系列模块用来在电缆网络上传送基带IP流。CURBswitch和NODEswitch模块是PWRBlazer节点模块系列的最新添加的产品,它可提供 Ethernet over FTTC/FTTH功能。这一系列模块还包括哈雷光节点以太网模块均为用于PWRBlazer可扩容节点平台的插入式模块。因此可以通过将智能化 的光节点模块引进到灵活的PWRBlazer节点平台,来改变系统的网络架构。 哈雷公司的CURBswitch和NODEswitch模块将传统电缆网络前端交换设备的智能性和功能性,移置于可适应各种环境温度的节点内。NODEswitch模块置于前 端与FTTC或FTTH CURBswitch模块之间。对于开展双绞线入户业务的运营商而言,FTTH CURBswitch将在FTTC应用系统或MDU中提供多个10/100 BaseT、 10/100 BaseFX连接。对于在网络的最后一英里使用光纤的经营商而言,FTTH CURBswitch可通过单模或多模光纤提供多达12路100 Mbps连接。利用 NODEcmts可在HFC上首先提供IP服务,然后有选择性并具成本效益地添加FTTC/H CURBswitch,以便为高带宽的客户提供额外的服务。NODEcmts、 NODEswitch和CURBswitch模块可在同一网络中共存,从而提供了极大的灵活性。 华彩网络软件公司成为Tamino数据库中国区代理 2001年3月20日德商塞克(Software AG)正式授权"北京天下华彩网络软件有限公司"成为Tamino数据库中国区代理。 华彩软件此次将Tamino产品引入中国业界证明了一个事实,即华彩软件一直致力于将世界先锋的技术、创新的产品及时地传递给中国计算机用户。 会上,来自Software AG台湾公司的主要技术负责人做了"今日不应用,明日必后悔"的讲演,重点介绍了XML技术应用的优势,纯XML技术核心的数据库产品-Tamino在"内容管理"方面的成功应用。 Tamino的核心技术是XML,它是以纯碎且标准的XML格式进行资料存储与读取的信息服务器,是一个能够将企业资料转换为因特网物件,提供资料交换和应 用程序集成环境,又支持WEB的完整资料管理系统。 影立驰推出EnReachDTVTM软件 在2001年中国国际广播电视信息网络展览会上看到EnReach公司已经成功地将 EnReachDTVTM软件安装在美国博通公司(Broadcom Corporation)的 BCM93710机顶盒平台上,从而为有线运营商们提供了一种低成本的双向有线机顶盒方案。 EnReachDTVTM是EnReach公司的数字电视解决方案,它由一整套用于实现多种交互式电视服务的增强型电视软件产品组成。为便于客户根据自己的需要进 行调整,EnReachTV设备的客户端和服务端软件、内容定制和编辑工具可以在基础界面上进行交互式操作从而定制用户界面。服务提供商可以自如地在服 务端和客户端展开他们选择的服务。 影立驰的数字电视产品为数字有线机顶盒制造商提供了一种包括浏览和收发电子邮件的低成本因特网接入方案。影立驰的软件系统支持基于ATVEF标准 的数字视频应用和增强型电视功能。 Softimage公司发布SOFTIMAGE|XSI 1.5版 Avid Technology公司的子公司Softimage公司近日推出旗舰软件SOFTIMAGE|XSI 1.5版,可供电影、广播、游戏和交互市场的动画师使用。有了 SOFTIMAGE|XSI 1.5,Softimage就极大地扩充了其协同工作的、高端三维内容创建的软件包,即提交了一个完整的端到端生产解决方案。 利用SOFTIMAGE|XSI 1.0的体系结构可将大量的新功能和增强的性能集成进SOFTIMAGE|XSI 1.5版中,这些新功能包括新的多边形网格造型器、曲面细分 、新的纹理UV编辑器、织物动力学与网状观察(Net View)、一个完全集成的Web浏览器。此外,还引入了电子数据板、消息数据板等工具,使工作环境更加 灵活。 SOFTIMAGE|XSI 1.5提供了艺术家创造和协同工作所需要的全部工具,从而简化了动画师的共同工作过程,并且通过Net View集成进因特网,其性能和工作 流得以大大提高。 Softimage公司提交了基本型和高级型两种SOFTIMAGE|XSI系统,以满足用户不同层次的需要,并为符合条件的老用户提供1.5版的升级。 Agere Systems推出系列单光纤网络接入设备 Agere Systems(前朗讯科技)日前宣布推出全双工单光纤光收发器系列。该系列可以帮助服务供应商打破"最后一英里瓶颈",更加经济高效地为家庭、企 业或路边分布节点提供模拟及数字视频、因特网和话音业务。折中端口和3端口双向光收发器(分别称为双工型光收发器和三工型光收发器)可以接收娱乐 视频,可以在单光纤上接收话音和因特网数据业务。 原始设备制造商(OEM)利用这种光收发器可帮助服务供应商创建低投资成本的系统,同时将独立的广播视频、数据和话音接入业务在一条光纤上传输。 Agere的新双工型光收发器解决方案支持在一根光纤上的全双工、双向数据和话音传输业务。这些产品以小型封装的形式提供,通常包括数据速率为 OC24(1.25 Gbps)的正向发射极耦合逻辑(PECL)接口。 新三工型光收发器系列具有双工型光收发器的功能,提供可选择的多种图像、接收器及高带宽数据功能。1 GHz视频接收器可以满足所有CATV及HDTV广播 要求,而2 GHz还可以支持直播卫星(DBS)。三工型光收发器的各种型号均可以支持速率为OC3到OC24的双向数据,可应用于电话和因特网接入。三工型光收 发器采用的波分复用/解复用的设计与应用于光纤传输网络的传统波分复用器件相比可以大幅度节约费用,这是这些器件能够经济高效地在住宅用户中被 广泛采用的关键因素。 VTEL向VCON提供安装及维修服务 企业网络视讯方案及产品与服务供应商VTEL美国视讯公司宣布将向VCON公司提供安装及维修服务。 IP网络视讯方案VCON公司将通过VTEL公司解决方案业务实体向其在美国及加拿大的客户提供技术服务。VTEL涉及到各个领域的服务机构将为VCON桌面和 工作组系统提供安装及技术支持服务。 VTEL解决方案业务实体高级副总裁戴维·特恩布尔与VCON的总裁鲍博·罗曼度均表示此次合作进一步加强了双方的实力、巩固了双方的地位。 哈雷推出新的VOD网关解决方案 哈雷(Harmonic)公司(Nasdag HLIT)推出其专播业务网关NSG 8100,以提供下一代视频点播(VOD)服务。NSG是一个创新的一体化服务器网关,可使网络运 营商经济地传送VOD内容,更有效地进行带宽管理。 Harmonic的NSG是整个VOD系统的关键部件,可处理多个高容量服务器的输入接收、多路复用、节目筛选及路由、有条件接入加扰以及8个频道的QAM调制 和上变频。 NSG 8100减少了推出和支持VOD的成本及复杂性,并减少了布线、集成和维护费用,从而为服务提供商开发了一种可行的VOD商业模式。作为业界最小巧的 网关,NSG是唯一在单一台架单元(RU)上支持8个QAM频道的解决方案;具有先进的散热设计,无须散热空间;基于开放式的结构设计可以方便与其它VOD系统 组件进行互连。NSG的推出,将使VOD变得切实可行并可获得赢利。 CCTV落成世界首例基于MPEG-2 IBP帧格式 的新闻制播网络 2001年3月,由CCTV和索贝数码联合建设的"中央电视台海外中心无磁带英语新闻制作、播出、文稿系统"在CCTV落成。据悉,该网络是世界首例基于MPEG2 IBP帧格式的大型新闻制播网络。 电视台数字化的重要步骤之一,就是采用MPEG2格式连接节目拍摄、制作、存储、播出、传输的整个过程。多年致力于电视数字化的索贝数码,凭借在数 字电视技术应用方面的实力和经验,提出了MATROX视频硬件的IBP帧实时编辑/特技解决方案,并在与MATROX合作中首次采用了迥异于国内其他OEM厂商的互 动开发模式,完美实现了双路IBP帧数据流的实时编辑、特技和字幕叠加,这就是索贝的"智能分割、并行解码、实时切换"专利技术。而"中华第一网"的落 成,宣告了这一技术的成功应用。 索贝MPEG2技术上的重大突破,为MPEG2技术的实用化、建设数字化电视台打破了最后一道藩篱。实施两年已久的索贝SDNA数字视频网络工程、近百个不 同规模的非线性网络的建设经验以及MPEG2应用技术上的重大突破,使索贝成为建设数字化电视台的中坚力量。 60GB硬盘的BS数字高清晰度电视调谐器 夏普公司日前宣布,该公司开发出了配备有60 GB硬盘的BS数字高清晰度电视调谐器,于2001年3月上市。 为了保护记录在硬盘中的内容,夏普在将数据存储于硬盘时做了加密处理。而且调谐器本身和硬盘都分配有独立的号码,在两者相互认证之后,才能够进 行解密处理。另外机壳为通过特殊的螺旋线组装而成、机体小巧玲珑。除非将产品拿到工厂去,否则无法打开机壳取出其中的硬盘。夏普公司表示"在著 作权保护方面,作为硬件制造商我们采取了一切可能的措施"。 第六届国际集成电路研讨会召开 摩托罗拉、德州仪器、SONY、美国模拟器件公司、IDT、lnfineon等全球知名集成电路厂商的销售市场总监及技术专家们,出席他们一年中最重要的行业 聚会--"第六届国际集成电路研讨会暨展览会"(IICChina2001)。本界展览会先后在上海、北京、深圳三地举办。 来自信息产业部的数据估计,去年中国电子工业的总产值比上一年增长了34%,达到了1 194亿美金。而电子工业的飞速发展产生了对集成电路--这一对任 何电子产品来说都是至关重要因素的产品产生了令人不可置信的需求量。许多集成电路被用来制造电视机、显示器、打印机、无线电话和计算机产品,而 这些产品中的大部分是出口到世界各地的。为此,中国在2000年引进了价值290亿美金的相关产品与元器件,在国际集成电路研讨会暨展览会上展示的正是 这些能极大地提升电子产品附加值的最新技术。 在本届国际集成电路研讨会暨展览会期间,还同时安排了嵌入系统技术(中国)研讨会。 9.学位论文 王云新 便携式大量程光纤Bragg光栅解调系统研究 2006 近年来光纤光栅(FBG)在传感领域的应用研究日益得到人们的关注,其中光纤光栅波长解调是光纤光栅传感器得到应用推广的关键之一.尽管已提出多 种波长解调方法,然而真正得到实际应用的仍然较少,因此针对实际应用要求开发相应的光纤光栅波长解调系统具有较高的实用价值,同时也会对光纤光栅 传感技术的发展和应用推广起着重要的促进作用.基于这一思想,本文针对建筑结构现场监测的要求,设计开发了一套便携式大量程光纤光栅波长解调系统 ,解调系统具有测量范围宽、结构简单、成本低等优点.本论文的主要工作如下: 1.设计了光纤光栅波长解调系统的光纤系统部分.解调系统基于无源比例解调方法,光源使用基于掺铒光纤的ASE光源,线性滤波器采用基于熔融拉锥 技术的波分复用器,设计了波分复用器的性能参数,要求线性工作范围在7nm以上;利用光功率计、可调谐激光器对波分复用器的分光特性进行了性能测试 ,实验表明此波分复用器可实现大于lOnm范围的波长检测,输出光信号的分光比与光纤光栅波长具有良好的线性关系. 2.将光衰减器用作解调系统的光调制器,解决了解调系统光信号的调制问题. 调制频率可达4kHz,设计了光衰减器的驱动电路,调制频率为2kHz. 3.设计了光信号检测部分.基于锁相放大技术实现了光信号的检测,设计了专用的正交矢量型锁相放大器,消除了双路锁相放大相位差的影响,直接提 取到信号的幅度信息,有效降低了系统误差;利用带有24位∑-△高精度AD的单片机ADuC847实现数据采集、数据处理及外设控制,利用液晶模块实时显示 光纤光栅波长信息,并通过USB接口实现数据存储;开发了单片机及其外设的驱动程序,采用软件实现两路信号的增益补偿,实现了解调系统可视化与智能 化. 4.对光纤光栅解调系统进行了性能测试实验.实验结果表明光纤光栅的波长与应变具有良好的线性对应关系,能够较好的跟踪光纤光栅的波长位移,线 性拟和度达99.3﹪,解调系统应变测量误差为7.92με;对光纤光栅解调系统的测量误差进行了分析,详细讨论了误差来源,并针对一些误差源给出了相应 的解决方法. 10.期刊论文 乔文.李刚.QIAO Wen.LI Gang 一种新型光纤光栅传感器解调系统 -光电子·激光2007,18(10) 选择线性滤波法解调光纤光栅(FBG)传感信号,实现传感光栅Bragg波长微小偏移的实时检测.利用单片机取代PC机,有效实现了系统的小型化.采用锁 相放大电路和24位∑-Δ高精度A/D转换模块采集有用信号,提高系统精度和动态范围.使用USB接口模块存储和传输数据,使解调系统特别适合现场测量和 野外作业的要求.设计出了一种新型FBG传感器解调系统,通过实验和数据验证了该系统高精度、便携带的特点. 本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1067891.aspx 下载时间:2010年5月26日
更多简介内容

评论

下载专区


TI最新应用解决方案

工业电子 汽车电子 个人电子
$(function(){ var appid = $(".select li a").data("channel"); $(".select li a").click(function(){ var appid = $(this).data("channel"); $('.select dt').html($(this).html()); $('#channel').val(appid); }) })