vhdl语言实验系统后台pc机支持程序设计计算机本科学位论文.docx

上传人:b****3 文档编号:5404536 上传时间:2022-12-16 格式:DOCX 页数:23 大小:317.95KB
下载 相关 举报
vhdl语言实验系统后台pc机支持程序设计计算机本科学位论文.docx_第1页
第1页 / 共23页
vhdl语言实验系统后台pc机支持程序设计计算机本科学位论文.docx_第2页
第2页 / 共23页
vhdl语言实验系统后台pc机支持程序设计计算机本科学位论文.docx_第3页
第3页 / 共23页
vhdl语言实验系统后台pc机支持程序设计计算机本科学位论文.docx_第4页
第4页 / 共23页
vhdl语言实验系统后台pc机支持程序设计计算机本科学位论文.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

vhdl语言实验系统后台pc机支持程序设计计算机本科学位论文.docx

《vhdl语言实验系统后台pc机支持程序设计计算机本科学位论文.docx》由会员分享,可在线阅读,更多相关《vhdl语言实验系统后台pc机支持程序设计计算机本科学位论文.docx(23页珍藏版)》请在冰豆网上搜索。

vhdl语言实验系统后台pc机支持程序设计计算机本科学位论文.docx

vhdl语言实验系统后台pc机支持程序设计计算机本科学位论文

VHDL语言实验系统——后台PC机支持程序设计

摘要

USB产业近几年的迅猛发展,使得传输速度和性能上都有了大幅度的提高,也使得该技术的优势越来越明显,应用也相应的越来越广泛。

学习和应用单片机的热潮始终不减,特别是MCS51系列。

实际上,从应用通用数字集成电路系统到广泛应用单片机,是我国电子设计在智能化应用水平上质的飞跃。

本文主要介绍的是PC机上驱动程序的编写,主要包括WindowsUSB驱动程序设计,即编写用户程序以及内核驱动并让其进行通信。

在本文中,首先介绍了USB的发展现状,接着介绍了编写驱动程序需要用到的一些知识,其中包括:

Windows驱动程序,USB设备,USB内核驱动等的介绍。

最后给出详细的开发技术以及设计程序步骤。

最后对这次毕业设计的过程进行了总结和收获。

关键词:

USB驱动设备驱动程序PC机WDM

 

ABSTRACT

USBtechnologyhasadvancedbyswiftandviolentinrecentyears,thetransmissionspeedandperformancehaveimprovedsubstantially,butalsomakesthetechnologymoreandmoreobvious,moreandmoreextensiveapplications.Learningandapplicationofmicroprocessorhasreducedthefever,especiallyMCS51series.Infact,theuniversaldigitalintegratedcircuitsfromtheapplicationsystemstothewideruseofsingle-chip,istheapplicationofintelligentelectronicdesignlevelinaqualitativeleap.

ThispapermainlyintroducesthePC,thedriverofthepreparation,includingthedesignofWindowsUSBdrivers,thatis,userprogramsandkerneldriversandtheircommunication.Inthisarticle,firstintroducedthedevelopmentofUSB,andthenintroducedthedriversneededtopreparesomeoftheknowledge,including:

Windowsdrivers,USBdevices,USBkerneldrivers,etc.introduction.Finally,detailedproceduresforthedevelopmentoftechnologyanddesignsteps.Thefinaldesignofthegraduationprocessandharvestsummary.

Keywords:

USBDriverDevicedriverpersonalcomputerWindowsDriverModel

 

目  录

一绪论1

1.1课题设计背景1

1.2课题设计意义1

二系统总体模块划分2

2.1系统模块分类2

2.1.1系统硬件电路2

2.1.2实验板监控程序2

2.1.3后台PC机支持程序2

2.2后台驱动模块的功能和意义3

2.2.1后台驱动模块的功能3

2.2.2后台驱动模块的意义3

2.3基于Windows的驱动程序概述3

2.3.1Kernel模式驱动程序框架构建3

2.3.2基于框架驱动程序的WDM概念4

2.3.3I/O请求数据包5

三Windows驱动程序简介6

3.1Windows驱动分类6

3.2WDM驱动程序6

四USB设备简介8

4.1USB总线协议8

4.2USB设备简介8

4.3USB连接拓扑结构9

4.4USB通信的流程10

五USB内核驱动简介12

5.1功能驱动与物理总线驱动12

5.2构造USB请求包12

5.3发送USB请求包12

5.4USB设备初始化13

5.5USB设备的插拔13

5.6USB设备的读写13

六USB应用程序编写过程14

6.1选择开发环境15

6.2进行前台设计15

6.3创建KMDF驱动程序16

6.3.1建立KMDF编程环境以及驱动程序16

6.3.2生成KMDF驱动程序16

6.3.3安装KMDF驱动程序17

6.4进行KMDF驱动程序与应用程序之间的通信17

6.4.1应用程序对驱动程序的通信17

6.4.2驱动程序对应用程序的通信18

总结19

谢辞20

参考文献21

一绪论

1.1课题设计背景

Windows驱动发展,从开始到现在经历了几个阶段:

VXD,NT,WDM,WDF。

其中VXD已经被淘汰,而NT式驱动是非即插即用的,在此基础上又提出一个新的驱动模型:

WDM驱动,WDM驱动支持即插即用,由于大多数驱动程序中都需要处理即插即用,所以NT式驱动已经基本没多少人使用。

但是由于WDM驱动的编写很繁琐,微软退出全新的WDF驱动。

自Windows2000开始,开发驱动程序必以WDM为基础的,但其开发难度之大,根本不能奢望像用户模式应用程序开发那样容易。

为改善这种局面,微软推出了新的驱动程序开发环境。

要预先指出的是,这不是另起炉灶改弦更张,而是以WDM为基础进行了建模和封装,显著特点是降低了开发难度。

1.2课题设计意义

本课题研究的是VHDL实验班监控,具体功能为:

用户可以使用EDA软件编译VHDL硬件描述语言编写的程序,然后将得到的目标文件将通过JTAG口下载到FPGA中以得到需要的逻辑功能。

该实验系统中还包含一个基于ARM7TDMI-S微控制器的芯片LPC2142,用于运行监视、控制实验板的工作状态,并通过通信口上传到后台主机。

具体是后台PC机通过USB接口与该单片机相连进行信息交互。

而单片机通过用通用I/O口模拟的JTAG接口与FPGA芯片相连进行通信。

通过本实验系统电路设计人员可以在很短时间内就可完成电路的输入、编译、优化和仿真。

而我负责的模块为后台PC机驱动程序的编写,该模块为整个实验系统提供了数据传输的通道。

能够将主机上的FPGA的配置数据解析然后送到实验板的FPGA中。

 

二系统总体模块划分

2.1系统模块分类

该系统一共分为三个模块:

系统硬件电路设计;实验班监控程序设计;后台PC机支持程序设计。

2.1.1系统硬件电路

系统硬件电路设计主要包括:

在确定了系统的整体功能后,选择满足需求的芯片进行学习研究;根据系统功能,画出系统电路图并反复检查是否正确;进行布线,选择电路板交印刷公司印刷;对印刷好的电路板进行焊接;

其中主要进行的是电路板电路图是否正确以及焊接、排线是否正确。

2.1.2实验板监控程序

焊接实验板监控程序设计。

该模块又包括三个主要子模块:

LPC2142的Bootloader设计、后台PC与单片机的USB通信和单片机通用I/O口模拟JTAG口进行数据传输。

Bootloader是LPC2142的引导程序,主要负责初始化芯片时钟、中断向量、通用I/O等操作,同时为RTOS必要的运行环境然后将控制权交给操作系统。

USB通信实现的是后台PC和LPC2142芯片间的数据传送和信息反馈,主要是对LPC2142主机控制器的编程和PC机方基于WDM的USB编程。

LPC2142通过通用I/O模拟JTAG接口的TAP状态机来完成数据通信。

2.1.3后台PC机支持程序

后台PC机程序设计,主要包括WindowsUSB驱动程序设计,其中具体的主要分为三个模块:

首先利用VC++编写用户界面,然后编写USB驱动程序,最后把QuartusII编译的目标文件整理成USB的数据格式以数据包的形式通过USB电缆传输到单片机。

其三部分如图2-1所示:

图2-1系统总体模块划分

2.2后台驱动模块的功能和意义

2.2.1后台驱动模块的功能

在本次试验中,我负责的是后台驱动模块的设计。

其主要包括两个部分。

第一、编写用户程序,使得用户可以运用来读取文件或者缓冲区内容。

并把其分成USB数据包,通过底层的WindowsUSB驱动下载到单片机上运行。

然而,单片机也可以反馈信息到用户,把单片机上的信息通过USB电缆传输到底层WindowsUSB驱动进行解析并反馈到用户界面上。

使用户对文件进行更详细的认识。

第二、编写内核驱动。

主要是编写基于WMD的驱动程序,其主要功能是接收传输下来的数据并发送到单片机上。

2.2.2后台驱动模块的意义

实现了后台监控程序对可编程逻辑器件进行数据配置,并进行信息反馈以及对它进行监控。

对文件的传输提供了很重要的作用,并有效的提高了文件下载到单片机的速度。

使得用户可以简单的操作,下载,并进行试验。

2.3基于Windows的驱动程序概述

2.3.1Kernel模式驱动程序框架构建

Kernel模式驱动程序框架为驱动程序提供了机基于对象的界面,框架定义的对象界面包括:

对象方法:

方法是使驱动程序能用来对对象执行某项操作或者用来收集或设定对象属性的一种函数。

对象事件回调函数:

事件回调函数由驱动程序提供,每一函数都代表一个基于对象的特定事件。

当特定事件发生时,框架就会执行事件回调函数。

对象属性:

属性是对象自身价值,驱动程序可以取得(即拥有)或者设定(即改变)这些价值。

对象处理:

基于框架的取得程序不能直接访问框架对象。

相反的,驱动程序会接收对象处理,并传递给对象方法。

框架定义了几种基于框架的驱动程序能使用的对象类型:

1框架驱动程序对象代表每个驱动程序。

2框架设置对象代表驱动程序所支持的每种设置。

3框架队列对象代表能接收设置I/O请求的I/O队列。

4框架请求对象代表每个I/O队列接收的I/O请求。

下面列出框架定义的所有对象,每个基于框架的驱动程序包括:

1当驱动程序满载时使用的DriverEntry路线。

2当特定对象事件发生时,框架使用的一系列事件回调函数。

例如,框架设置对象定义了一种驱动程序能够执行的EvtDeviceD0Entry回调函数。

每次当设置进入工作(D0)状态时,框架就会调出EvtDeviceD0Entry函数。

2.3.2基于框架驱动程序的WDM概念

Kernel模式驱动框架是一种围绕微软WDM界面的封装器.虽然框架简化了许多WDM概念,并能将无需处理的概念完全隐藏,但仍要了解它的一些基本概念。

特别的,要了解一下内容:

驱动程序类型:

基于Windows的驱动程序分为三种类型:

总线驱动,智能驱动和筛选驱动。

总线驱动通过发现嵌入母线的子装置并回报其属性来支持I/O总线。

(这一行为被称为总线清点.)函数驱动为设备和总线控制I/O操作。

筛选驱动能接收、检查或修改用户应用软件和驱动程序之间或个人驱动器间的数据流动。

总线驱动本质上是也能清点子设备的职能驱动.当清点总线上子设备数目时,驱动程序扮演着“总线驱动”的角色。

另外,当处理访问总线适配器硬件设备的I/O请求时,同一驱动程序扮演着“职能驱动”的角色。

驱动程序堆栈:

在Windows操作系统中,WDM驱动程序按垂直顺序安放,称之为驱动程序堆栈。

堆栈顶端的驱动程序主要接收来自用户应用软件的I/O请求,当然是在这些请求通过操作系统的I/O管理器之后。

底层的驱动程序主要与计算机硬件进行交流。

一般的驱动程序堆栈包括底端的总线驱动,处理特定的总线I/O操作并相关的子设备数目。

典型的,一个或多个特定设置的职能驱动程序置于总线驱动之上。

这些职能驱动程序处理与总线相关的I/O操作。

筛选驱动可能位于职能驱动之上,或者位于总线驱动和职能驱动之间。

每一个运行系统都有几个支持不同类型设备的驱动程序堆栈。

设备堆栈:

每个驱动程序堆栈都支持一个或多个设备堆栈。

设备堆栈是由WDM定义的设备对象结构创建的一系列设备对象。

每个设备堆栈代表一种设备。

驱动程序为每种设备创建一个设备对象,并将每一对象与堆栈相连。

设备堆栈会随着设备被插入移除或者系统重启而被创建或移动。

当总线驱动程序发现子设备被插入或移除时,它会通知插入和运行管理器(PnP)。

相应的,PnP管理器会命令总线驱动程序为每个与之相连的子设备创建特定的设备对象(PD0).PDO会置于设备堆栈的底端。

接着,PnP管理器会装入职能和筛选驱动程序来支持每种设备(如果还未被装入),然后,PnP管理器命令每个驱动程序创建一个设备对象并将其置于设备堆栈的顶端。

职能驱动程序创建职能型的设备对象(FDOs),筛选驱动程序创建筛选设备对象(筛选DOs)。

当I/O管理器发送I/O请求到设备驱动程序时,它会将请求传递给创建堆栈顶端设备对象的驱动程序。

如果这一驱动程序要求I/O管理器将请求传递给下一层级,管理器会通过堆栈来确定谁是次级驱动程序(次级驱动是创建次级设备对象的驱动程序)。

Kernel模式驱动程序框架为每一个WDM设备对象创建框架设备对象。

基于框架的驱动程序会访问这些设备对象而不是WDM设备对象。

2.3.3I/O请求数据包

I/O管理器通过创建I/O请求数据包(IRPs)将请求发送给驱动程序。

每一IRP包括一个执行I/O操作的请求(如读/写操作)或一个执行I/O控制行为(如状态反馈)的请求。

另外,PnP管理器会创建代表PnP的IRPs和驱动程序必须执行的电源管理操作并且会发送这些IRPs到驱动器。

典型的,当用户软件要求读或写操作时,I/O管理器会创建一个读或写IRP并将之传递给置于堆栈顶端的驱动程序,这一驱动程序或者处理请求或者将之传递给下一层级。

有些请求会运行到堆栈底部,有些完全由高层驱动程序来处理。

每当驱动程序接收一个IRP时,它会同时接收一个指示给能够处理这一操作的设备对象,因此,堆栈中的驱动程序运用设备对象来决定特定请求会进入哪一个嵌入设备。

基于框架的驱动程序一般不直接访问IRPs。

Kernel模式驱动程序框架会将代表读、写的WDMIRPs和设备I/O控制操作转化为驱动程序能在I/O队列中接收的框架请求对象。

框架会处理PnP和内部的电源管理IRPs并通过事件回调函数告知PnP驱动和电源事件。

 

三Windows驱动程序简介

3.1Windows驱动分类

Windows驱动程序分为NT式驱动程序和WDM式驱动程序,NT式驱动程序不支持即插即用功能,而WDM式驱动程序是支持即插即用功能的一类驱动程序。

本文中编写的是WDM式驱动程序,接下来对WDM驱动程序做一个详细介绍。

3.2WDM驱动程序

对于WDM驱动程序来说,一般都是基于分层的。

也就是说,完成一个设备的操作至要由两个驱动设备共同完成。

在WDM模型中,完成一个设备的操作,至少有两个设备对象共同完成。

其中,一个是屋里设备对象(PhysicalDeviceObject),另一个是功能设备对象(FunctionDeviceObject).其关系是“附加”与“被附加”的关系。

当PC插入某个设备时,PDO会自动创建。

确切的说,是由总线驱动创建的。

PDO不能单独操作设备,需要配合FDO一起使用。

系统会提示检测到新设备,要求驱动安装驱动程序。

需要安装的驱动程序指的就是EDM程序,此驱动程序负责创建FDO并且附加到PDO之上。

当一个FDO附加在PDO上的时候,PDO设备对象的子域AttachedDevice会记录FDO的位置。

PDO被称作底层驱动或者是下层驱动,而FDO被称作高层驱动或者上层驱动。

这里的“上”层指的是接近发出I/O请求的地方,而“下”层指的是靠近屋里设备的地方。

PDO和FDO之间的关系可以从图3-1中得到更好的理解。

图3-1FDO与PDO

这是最简单的一种情况,事实要比这个复杂一些。

在FDO和PDO之间还会存在过滤驱动,如图3-2所示。

在FDO上面的过滤驱动被称作上层过滤驱动。

在FDO的下层的驱动,被称为下层过滤驱动。

另外每个设备对象中,有个StackSize子域,表明操作这个设备对象需要几层才能到大最下层的物理设备。

如图3-2所示,最上层过滤设备对象的StackSize为4,也就是需要4个设备对象才能到大最底层的物理设备。

图3-2设备对象堆栈

 

四USB设备简介

4.1USB总线协议

USB设备驱动和PCI设备驱动是PC中最主要的两种设备驱动程序。

与PCI协议相比,USB协议更复杂,设计面较多。

USB总线协议比PCI协议复杂的多,涉及USB物理层协议,又涉及USB传输层协议等。

4.2USB设备简介

USB即通用串行总线(UniversalSerialBus)是一种支持即插即用的新型串行接口。

也有人称之为“菊链(daisy_chaining)”是因为在一条“线缆”上有链接127个设备的能力。

USB要比标准串行口快得多,其数据传输率可达4Mb/s~12Mb/s(而老式的串行口最多是每秒115Kb)。

除了具有较高的传输率外,它还能给外围设备提供支持。

需要注意的是,这不是一种新的总线标准,而是计算机系统连接外围设备(如键盘、鼠标、打印机等)的输入/输出接口标准。

到现在为止,计算机系统连接外围设备的接口还没有统一的标准,例如,键盘的插口是圆的、连接打印机要用9针或25针的并行接口、鼠标则压用9针或25针的串行接口。

USB能把这些不同的接口统一起来,仅用4针插头作为标准插头,通过这个标准插头,采用菊链形式可以把所有的外设连接起来,并且不会损失带宽。

USB正在取代当前PC上的串口和并口。

以USB连接设备时,所有的外设都在机箱外连接,连接外设不必再打开机箱;允许外设热插拔,而不必关闭主机电源。

USB采用“级联”方式,即每个USB设备用一个USB插头连接到另一个外设的USB插座上,而其本身又提供一个USB插座供下一个USB外设连接用。

通过这种类似菊花链式的连接,一个USB控制器可以连接多大127个外设。

而每个外设间距离可达5m。

USB能智能识别USB链上外围设备的插入或拆卸。

它可使多个设备在一个端口上运行,速度也比现在的串行口或并行口快得多,而且其总的连线在理论上说可以无限延长。

对PC来说,以上这些都是一些难得的有点,因为不再需要PS/2端口、MIDI端口等各种不同的端口了,还可以随时随地在各种设备上任意插拔。

可以在一个端口上运行素表、控制手柄、键盘以及其他输入装置,而且也不必重新启动系统去做这些工作。

现在USB设备正在快速增多,且由于操作系统已内置支持USB的功能,因而用户现在就可以方便的使用。

显然,USB为PC的外设扩充提供了一个很好的解决方案。

目前USB技术的发展,已经允许用户在不适用网卡、HUB的情况下,直接通过USB技术将几台计算机连接起来组成小型局域网,用户只需要给各台计算机起个名字就可以开始工作。

这种网络具备Ethernet网络的各种优点,同时少了个Ethernet网络的许多限制。

假设以为用户上班时使用笔记本电脑,回家时用PC机,为实现数据传输,他可以通过采用USB技术的接口将两部电脑连接起来交换资源,其数据传输速度可达12Mb/s,这是传统串行扣无法比拟的。

而且用户在组网的时候根本无需考虑DIP、IRQ等问题。

此类技术除支持兼容Ethernet的软硬件外,也支持标准的网络通信协议,包括IPX/SPX、NetBEUI和TCP/IP,这为通过USB技术组成的小局域网连接至大型网络或Internet提供了条件。

4.3USB连接拓扑结构

对于每个PC来说,都有一个或者多个称为Host控制器的设备,该Host控制器和一个根Hub作为一个整体。

这个根Hub下可以接多级HUB,每个Hub又可以接子Hub。

每个USB作为一个节点接在不同级别的Hub上。

(1)USBHost控制器:

每个PC的主板上都会有多个Host控制器,这个Host控制器其实就是一个PCI设备,挂载在PCI总线上。

(2)USBHub:

每个USBHost控制器都会自带一个USBHub,被称为根(Root)Hub。

这个根Hub可以接子(Sub)Hub,每个Hub上挂载USB设备。

一般PC有8个USB口,通过外接USBHub,可以插更多的USB设备。

当USB设备插入到USBHub或从上面拔出时,都会发出电信号通知系统。

这样可以枚举USB设备,例如当被插入的时候,系统就会创建一个USB物理总线,并询问用户安装设备驱动。

(3)USB设备:

USB设备就是插在USB总线上工作的设备,广义的讲USBHub也算是USB设备。

每个根USBHub下可以直接或间接的连接127个设备,并且批次不会干扰。

对于用户来说,可以看成是USB设备和USB控制器直接相连,之间通信需要满足USB的通信协议。

有的USB设备功能单一,直接挂载在USBHub上。

而有的USB设备功能复杂,会将多个SB功能连在一起,成为一个符合设备,它甚至可以自己内部带一个Hub,这个Hub下接多个USB子设备,其和多个子设备作为一个整体当做一个USB设备。

以上就是USB的拓扑结构,但是对于用户需要用图4-1所示的逻辑拓扑结构理解USB拓扑结构。

图4-1USB逻辑拓扑结构

但对于具体USB设备来说,每个USB设备的传输绝对不会影响其他USB设备的传输。

例如在有USB设备传输的时候,其他USB设备的带宽不会被占用。

对于USB设备来说,每个USB设备的直接连接到USBHost控制器上的。

因此,应该用图4-2所示的视角考虑USB设备的通信。

图4-2用户对USB设备的观察

4.4USB通信的流程

USB的连接模式是Host和Device的连接模式,它不同于早期的串口和并口,所有的请求必须是HOST向Device发出,这就使Host端设计相对复杂,而Device端设计相对简单。

Host端会在主板的南桥设计好,而Device的厂商众多,厂商只需要遵循USB协议,重点经理可以放在设备的研发上,而与PC的通信不用过多考虑。

在USB通信中,可以看成是一个分层的协议。

分为三个层次,即最底层USB总线接口层、USB设备层、功能通信层,如图4-3所示:

主机互相连接物理设备

功能通信层

USB设备层

 

总线接口层

 

实际通信流

逻辑通信流

需实现的区域

图4-3USB协议

对于每个USB设备,都有一个或多个的接口(Interface),每个Interface都有多个端点(Endpoints),每个端点通过管道(Pipes)和USBHost控制器连接。

每个USB设备都会有一个特殊的端点,即Endpoint0,它负责传输设备的描述信息,同时也负责传输PC与设备之间的控制信息。

USB设备驱动向USB控制器驱动请求的每次传输被称为一个事务(Transaction),事务有四种类型,分别是BulkTransaction、ControlTransaction、InterruptTransaction和IsochronousTransaction。

每次事务都会分解成若干个

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1