基于FPGA技术实现USB通信软件毕业设计Word下载.docx

上传人:b****5 文档编号:18105317 上传时间:2022-12-13 格式:DOCX 页数:21 大小:118.37KB
下载 相关 举报
基于FPGA技术实现USB通信软件毕业设计Word下载.docx_第1页
第1页 / 共21页
基于FPGA技术实现USB通信软件毕业设计Word下载.docx_第2页
第2页 / 共21页
基于FPGA技术实现USB通信软件毕业设计Word下载.docx_第3页
第3页 / 共21页
基于FPGA技术实现USB通信软件毕业设计Word下载.docx_第4页
第4页 / 共21页
基于FPGA技术实现USB通信软件毕业设计Word下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

基于FPGA技术实现USB通信软件毕业设计Word下载.docx

《基于FPGA技术实现USB通信软件毕业设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于FPGA技术实现USB通信软件毕业设计Word下载.docx(21页珍藏版)》请在冰豆网上搜索。

基于FPGA技术实现USB通信软件毕业设计Word下载.docx

所面临的主要问题是,速度仍然不够快,USB1.1版的最高速度为12Mbps,因此当连接设备多了时,带宽共享导致每个设备得到的有效带宽太小。

所以USB所应用的范围仍然很窄,针对于这些缺点,经过改进的USB2.0规范诞生了。

1999年初在Intel的开发者论坛大会上,与会者介绍了USB2.0规范,该规范的支持者除了原有的Intel、Microsoft和NEC等成员外,还有惠普、朗讯和飞利浦三个新成员。

1999年10月,正式制定了USB2.0通用串行总线规范,2001年11月Comdex展览上,基于USB2.0的外设产品系统如USB2.0界面扩充卡、外接式硬盘、外接式刻录机等产品开始出现。

随着时间的推移,USB已成为PC的标准配置。

基于USB的外设越来越多,现在可以直接使用WindowsME默认驱动的外设就有:

调制解调器,键盘,鼠标,光驱,数码相机,活动硬盘,手柄,软驱,扫描仪等,而非独立性I/O连接的外设将日渐减少。

即主机控制式外设减少,智能软件控制的外设增多。

1.2国内外相关研究状况

2008年11月18日,由Intel、微软、惠普、德州仪器、NEC、ST-NXP等业界巨头组成的USB3.0PromoterGroup宣布,该组织负责制定的新一代USB3.0标准已经正式完成并公开发布。

新规范提供了十倍于USB2.0的传输速度和更高的节能效率,可广泛用于PC外围设备和消费电子产品。

制定完成的USB3.0标准已经移交给该规范的管理组织USBImplementersForum(简称USB-IF)。

该组织将与硬件厂商合作,共同开发支持USB3.0标准的新硬件,不过实际产品上市还要等一段时间。

第一版USB1.0是在1996年出现的,速度只有1.5Mb/s;

两年后升级为USB1.1,速度也大大提升到12Mb/s,至今在部分旧设备上还能看到这种标准的接口;

2000年4月,目前广泛使用的USB2.0推出,速度达到了480Mb/s,是USB1.1的四十倍;

如今八个半年头过去了,USB2.0的速度早已经无法满足应用需要,USB3.0也就应运而生,最大传输带宽高达5.0Gb/s,也就是625MB/s,同时在使用A型的接口时向下兼容。

IEEE组织最近也批准了新规范IEEE1394-2008,不过新版FireWire的传输速度只有3.2Gb/s,相当于USB3.0的60%多一点。

难怪苹果等业界厂商普遍对该技术失去了兴趣。

USB2.0基于半双工二线制总线,只能提供单向数据流传输,而USB3.0采用了对偶单纯形四线制差分信号线,故而支持双向并发数据流传输,这也是新规范速度猛增的关键原因。

除此之外,USB3.0还引入了新的电源管理机制,支持待机、休眠和暂停等状态。

测量仪器大厂泰克(Tektronix)在上个月第一家宣布了用于USB3.0的测试工具,可以帮助开发人员验证新规范与硬件设计之间的兼容性。

USB3.0在实际设备应用中将被称为“USBSuperSpeed”,顺应此前的USB1.1FullSpeed和USB2.0HighSpeed。

预计支持新规范的商用控制器将在2009年下半年面世,消费级产品则有望在2010年上市。

1.3USB的特点

USB总线与传统的外围总线接口相比,主要有以下一些特点:

(1)传输速度快:

USB有低速(Low-Speed)、全速(Full-Speed)和高速(High-Speed)三种传输模式,传输速率分别为1.5Mbps、12Mbps和480Mbps,可以灵活选择以适应各种不同类型外设的需求。

(2)安装配置简单快捷:

USB设备支持即插即用(PlugandPlay)和热插拔(HotPlug)功能。

USB连接器将各种各样的外设I/O端口合而为一,使之可热插拔,并具有自动配置能力。

在电脑正常工作时,用户只要简单地将外设插入到PC的USB总线上,PC就能自动识别所连接的是什么设备,并动态的加载驱动程序,而无须关机断电或重新启动,打开机箱等操作,实现真正的即插即用。

(3)供电方式灵活,总线结构简单

USB总线自身能够提供5V电压,最大500mA电流。

同时,也可以由外部供电,或使用两种供电方式的组合,并且支持挂起和唤醒模式。

总线结构简单,信号定义仅由2条电源线,2条信号线组成。

(4)良好的兼容性:

USB接口标准有良好的向下兼容性,例如USB2.0就能很好的兼容USB1.1的外设。

系统会自动侦测外设接口的版本,并自动选择传输速度。

(5)使用和扩展灵活:

为了适应各种不同类型外设的要求,USB提供了四种不同的数据传输模式。

增加外设时无需在PC内添加接口卡,多个USB集线器可相互传送数据,使PC可以用全新的方式控制外设。

使用USBHub可以同时连接多达127个外设。

(6)广泛的应用

1.4系统软件设计要求

(1)通过大规模可编程芯片FPGA完成对数据的实时处理、并进行转换,以便进行数据传输。

(2)编写下载到USB芯片中的固件程序,完成对电路时序的控制,实现数据从硬件电路到计算机之间的传输。

(3)开发在Windows下的驱动程序和应用程序,完成数据的存储、分析及显示等功能。

1.5系统基本方案

系统确定的基本方案:

PC主机控制程序与USB接口模块进行通信,并通过USB接口模块控制FPGA进行语音的采集、存储、回放。

系统框图如图1_5-1所示:

图1_5-1系统框图

1.6软件设计主要内容

本系统软件主要由以下四个部分组成:

(1)PC主机应用程序设计

(2)USB接口模块WINDOWS驱动程序设计

(3)USB接口模块固件设计

(4)FPGA模块语音采集,存储,回放控制程序设计

第二章软件实现方案选择论证

2.1PC主机应用程序设计实现方案

方案一:

采用VisualBasic编程

VB是VisualBasic,是微软的比尔盖茨发明的,专为编程初学者设计,界面友好。

但VB是不够完全的面向对象编程工具,属本地编译语言,其效率相对VC低了很多。

方案二:

采用VisualC++编程

VC++是在Windows平台下构建32位应用程序的强大而有复杂的开发工具,是目前世界上使用最多的开发工具之一。

VC++的应用非常广泛,从桌面应用程序到服务器端软件,从系统软件到应用软件,从单机程序到分布式应用程序,VC++无所不在。

VC++是完全面向对象的编程工具,VC++效率高,封装性好,继承性高。

掌握VC++编程,对于电子专业人员而言也是非常必要的。

综上,选择方案二。

2.2WINDOWS下USB设备驱动程序的设计实现方案

采用DDK进行驱动程序开发

DDK是DeviceDevelopmentKit——设备开发包,是由微软提供的专业的设备驱动程序开发包,里面有很多驱动程序开发的例子。

但对于刚接触USB设备驱动程序开发的人员而言,有点博大精深。

采用DriverStudio进行驱动程序开发

DriverStudio是Numega公司提供的驱动程序开发工具,它提供对USB总线的封装,大大简化了对USB总线的操作接口。

DriverStudio中的DriverWorks软件为开发WDM程序提供了一个完整的框架,相比于DDK驱动程序的开发会比较简单。

综上,采用方案二。

2.3USB设备固件设计实现方案

采用汇编语言进行固件程序开发

汇编语言有执行效率高的优点,但其可移植性和可读性差,以及它本身就是一种编程,效率低下的低级语言,这些都使它的编程和维护极不方便,从而导致整个系统的可靠性也较差。

采用C语言进行固件程序开发

使用C语言进行嵌入式系统的开发,有着汇编语言编程不可比拟的优势。

其优势主要是:

编程调试灵活方便,生成的代码编译效率高,完全模块化,可移植性好,便于项目维护管理等。

2.4FPGA程序设计实现方案

采用Verilog语言进行开发

产业界Verilog比较流行,其语法比较自由。

VerilogHDL推出已经有20年了,拥有广泛的设计群体,成熟的资源也比VHDL丰富。

Verilog更大的一个优势是:

它非常容易掌握,只要有C语言的编程基础,通过比较短的时间,经过一些实际的操作,可以在2~3个月内掌握这种设计技术

采用VHDL语言进行开发

目前,高校教学主要采用VHDL,其语法比较严谨。

VHDL语言具有很强的电路描述和建模能力,能从多个层次对数字系统进行建模和描述,从而大大简化了硬件设计任务,提高了设计效率和可靠性。

VHDL具有与具体硬件电路无关和雨设计平台无关的特性,并且具有良好的电路行为描述和系统描述的能力,并在语言易读性和层次化、结构化方面,表现了强大的生命力和应用潜力。

本人对VHDL语法与设计流程也比较熟悉,固以VHDL为首选。

第三章PC主机应用程序设计

3.1开发环境VC++6.0简介

本设计应用程序的开发采用VC++6.0,VC++是在Windows平台下构建32位应用程序的强大而有复杂的开发工具,VC++是微软公司开发的一个IDE(集成开发环境),是目前世界上使用最多的开发工具之一。

VC++应用程序的开发主要有两种模式,一种是WINAPI方式,另一种则是MFC方式,传统的WINAPI开发方式比较繁琐,而MFC则是对WINAPI再次封装。

3.2API函数简介

API——ApplicationProgrammingInterface(应用程序接口)函数,这些函数是Windows提供给应用程序编程的接口,也就是系统提供的函数,主要的函数都在Windows.h头文件中进行了声明。

Windows操作系统提供了1000多种的API函数,API函数名大都是有意义的单词的组合,每个单词的首字母大写,这些函数的准确拼写与调用语法都可以再MSDN中查找到。

3.3应用程序控制界面设计

本系统控制界面设计如图3_3-1所示:

图3_3-1语音采集与回放系统控制界面

3.4应用程序设计

在Win32系统中,把每一个设备都抽象为文件,此时的应用程序只需通过几条简单的文件操作API函数,就可以实现与驱动程序中某个设备通信。

一个驱动程序可以驱动多个设备,并且此驱动程序可能为Windows系统中已有的,也可能为用户安装的。

通常,这些Win32API函数有以下几种:

CreateFile函数.打开一个设备,返回一个与设备相关的句柄。

该函数的声明形势如下:

HANDLECreateFile(

LPCTSTRlpFileName,//要打开的设备名

DWORDdwDesiredAccess,//访问模式

DWORDdwShareMode,//共享模式

LPSECURITY_ATTRIBUTESlpSecurityAttributes,//通常为NULL

DOWRDdwCreationDistribution,//创建方式

DOWRDdwFlagsAndAttributes,//文件属性和标志

HANDLEhTemplateFile//临时文件的句柄,通常为NULL

);

如果调用成功,该函数返回打开设备的句柄。

ReadFile函数。

从设备中读取数据,该函数的声明形式如下:

BOOLReadFile(

HANDLEhCom,//设备句柄

LPVOIDlpBuffer,//指向接收缓冲区的指针

DWORDnNumberOfByteToRead,//指向所要读的字节数

LPWORDlpNumberOfBytesRead,//指向调用该函数读出的字节数

LPOVERLAPPEDlpOverlapped//异步结构

WriteFile函数,向设备写数据,该函数声明形式如下:

BOOLWriteFile(

HANDLEhCom,//设备句柄

LPCVOIDlpBuffer,//指向读数据缓冲区

DWORDnNUMBEROfBytesToWrite,//所读的字节数

LPDWORDlpNumberOfBytesWritten,//指向已读入的字节数

其中,参数hCom为CreateFile函数所打开的串口句柄。

(4)DeviceControl函数。

对设备进行一些自定义的操作,比如更改设备等。

该函数的声明形式如下:

BOOLDeviceControl(

HANDLEhDevie,//设备句柄

DWORDdwIoControlCode,//所要执行的操作命令码

LPVOIDlpInBuffer,//输入缓冲区

DWORDnInBufferSize,//输入缓冲区空间大小

LPVOIDlpOutBuffer,//接收缓冲区

DWORDnOutBufferSize,//接收缓冲区空间

LPDWORDlpBytesReturned,//实际所需接收数据个数

其中,参数hDevice为CreateFile函数所打开的串口句柄。

(5)CloseFile函数,关闭一个由CreateFile打开的设备。

该函数声明形式如下:

BOOLCloseHandle(HANDLEhCom);

其中,参数hCom为CreateFile函数多所打开的串口句柄。

这些函数的执行,都对应着驱动程序的一些分发例程。

表3_4-1是常用API函数和驱动程序的IRP对应关系表。

表3_4-1常用API函数和驱动程序的IRP对应关系

API函数

IRP

说明

CreateFile

IRP_MJ_CREATE

打开设备

ReadFile

IRP_MJ_READ

从设备获取数据

WriteFile

IRP_MJ_WRITE

向设备发送数据

CloseFile

IRP_MJ_CLOSE

关闭设备

DeviceIoControl

IRP_MJ_DEVICE_CONTROL

控制操作

3.4.1查找设备

利用CreateFile函数打开一个串口,通常可用以下程序实现:

HANDLEhCom

HCOM=CreateFile(“COM1”,//设备名

GENERIC_READ|GENERIC_WRITE,//允许读和写

0,//独占方式

NULL,

OPEN_EXISTING,//打开而不是创建

FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,//重叠方式

NULL

(1)获取设备信息

一个应用程序与某个设备的驱动程序通信前,一定要获取此设备的独特标识符(GUID)。

GUID是一个128位的值,它表征了唯一一个设备对象。

在实际开发中,可以在编写设备驱动程序时获得该设备的GUID,也可以通过API函数调用获得。

可以调用Windows设备管理函数SetupDiGetClassDevs来获取的信息集。

该函数的声明如下:

HDEVINFOSetupDiGetClassDevs(

INLPGUIDClassGuid,OPTIONAL

INPCTSTREnumerator,OPTIONAL

INHWNDHwndParent,OPTIONAL

INDWORDFlags

(2)识别接口信息

SetupDiEnumDeviceInterface函数返回设备信息集的一个设备接口元素的环境结构,每次调用该函数返回一个设备接口的信息。

可以重复调用此函数,直至获取了设备信息集中所有的设备的接口信息。

BOOLEANSetupDiEnumDeviceInterface(

INHDEVINFODeviceInfoSet,

INPSP_DEVINFO_DATADeviceInfoData,OPTIONAL

INLPGUIDInterfaceCalssGuid,

INDWORDMemberIndex,

OUTPSSP_DEVICE_INTERFACE_DATADeviceInterfaceData);

(3)获得设备路径名

在调用上一个函数SetupDiEnumDeviceInterface时,获得了一个DeviceInfoData结构。

该结构指向标识一个请求设备的接口。

为了得到该接口的详细信息,可以通过调用函数SetupDiEnumDeviceInterfaceDetail来实现。

此时,返回该接口的详细信息中包含了设备接口的名称。

用户的首要任务就得到解决。

SetupDiEnumDeviceInterfaceDetail函数的声明如下:

BOOLEAN

SetupDiEnumDeviceInterfaceDetail(

INHDDEVINFODeviceInfoSet,

INPSP_DEVICE_INTERFACE_DATADeviceInterfaceData,

OUTPSP_DEVICE_INTERFACE_DETAIL_DATADeviceInterfaceDetailDATA,

INDWORDDeviceInterfaceDetalDatasize,

OUTPDWORDRequirdSize,

OUTPSP_DEVINFO_DATADeviceInfoData);

3.4.2打开设备

有了打开设备的路径名,下一步的任务就是打开该设备,获得这个设备的句柄。

如前所述,打开一个设备是通过调用API函数CreateFile来实现的。

当需要与所打开的USB设备通信时,还必须打开相应的USB端口。

3.4.3读写USB设备

对于应用程序来说,读写USB端口与读写串口并无什么的区别。

在用ReadFile和WriteFile读写USB设备时,既可以同步执行,也可异步执行。

在同步执行时,函数知道操作完成才返回。

这意味着在同步执行时线程会被阻塞,从而导致效率下降。

在异步执行时,即使操作还为完成,调用的函数也会立即返回。

费时的I/O操作在后台进行,这样线程就可以干别的事情。

ReadFile()函数和WriteFile()函数是否执行异步操作有CreateFile()函数决定的。

如果在调用CreateFile()创建句柄是指定了FILE_FLAG_OVERLAPPED标志,调用ReadFile()和WriteFile()对该句柄进行的读写操作可以是异步,如果未指定异步标志,则读写操作是同步。

异步操作结构声明如下:

typedefstruct_OVERLAPPED{

DWORDInternal,

DWORDInteralHigh,

DWORDOffset,

HANDLEhEvent,

}

OVERLAPPED;

3.4.4关闭通信

和关闭串口一样,关闭USB端口也是调用CloseHandle()函数来完成。

函数调用形式如下:

CloseHandle(hComn);

第四章USB接口模块驱动程序设计

本设计不属于Windows的标准设备,故要自己设计驱动程序。

USB的驱动开发是一个技术难点,也是一个技术核心。

Windows的驱动开发需要安装的开发软件有:

1)WinDDK

2)DriverStudio3.2

3)VC++6.0

4.1驱动程序开发

Windows环境下驱动程序共有三类:

一类是Vxd虚拟设备驱动程序,起源于Windows3.1时代,用于Windows95/98操作想系统中。

一类是KMD内核模式驱动程序,用于WindowsNT下。

还有一类是WDM—Win32驱动程序模型,是微软从Windows98开始,推出的一个新的驱动类型,它是一个跨平台的驱动程序模型,WDM驱动程序还可以在不修改源代码的情况下经过重新编译后在非Intel平台下运行。

WDM在NT

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

当前位置:首页 > 外语学习 > 英语学习

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

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