基于FPGA技术实现USB通信-软件(毕业设计).doc_第1页
基于FPGA技术实现USB通信-软件(毕业设计).doc_第2页
基于FPGA技术实现USB通信-软件(毕业设计).doc_第3页
基于FPGA技术实现USB通信-软件(毕业设计).doc_第4页
基于FPGA技术实现USB通信-软件(毕业设计).doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档基于FPGA技术实现USB通信软件【摘要】本设计能实现的功能:PC主机应用程序通过USB接口模块,对FPGA系统进行控制,以实现语音信号的采集、存储、回放,并且FPGA系统亦可通过USB接口模块将相关的状态信息回传给PC主机应用程序。本设计软件结构由四部分组成:PC主机应用程序,USB接口模块驱动程序,USB接口模块固件程序,FPGA系统控制程序。【关键词】应用程序,USB,FPGA,语音 USB Communication Based on FPGA SoftwareAbstract: This Design can implement the following functions: PC Application Program can control the FPGA-System through the USB-Interface module, in order to sample, store and replay the sound signal , and also FPGA-System can send back the status signal to the PC Application Program. The software structure of this design consist of 4 parts: PC Application Program, USB-Interface module Driver program, USB-interface module Firm program, FPGA-System control program.Key Words: Application Program, USB,FPGA, Sound 目 录第一章 绪论11.1 课题背景及意义11.2 国内外相关研究状况21.3 USB的特点31.4 系统软件设计要求41.5 系统基本方案41.6 软件设计主要内容4第二章 软件实现方案选择论证52.1 PC主机应用程序设计实现方案52.2 WINDOWS下USB设备驱动程序的设计实现方案52.3 USB设备固件设计实现方案52.4 FPGA程序设计实现方案6第三章 PC主机应用程序设计73.1 开发环境VC+ 6.0简介73.2 API函数 简介73.3 应用程序控制界面设计73.4 应用程序设计83.4.1 查找设备103.4.2 打开设备123.4.3 读写USB设备123.4.4 关闭通信13第四章 USB接口模块驱动程序设计144.1 驱动程序开发144.1.1 WDM驱动程序的分层结构144.1.2 USB驱动程序的WDM结构16第五章 USB接口模块固件设计185.1 PDIUSBD12与AT89S52 特性概述185.1.1 PDIUSBD12特性概要185.1.2 AT89S52 特性概要185.2 USB通信协议重要概念概述195.2.1 端点195.2.2 帧195.2.3 上行与下行195.2.4 USB的传输线结构195.2.5 USB的编码方案205.2.6 USB的数据格式205.2.6.1 域205.2.6.2 包215.2.6.3 事务215.2.6.4 传输235.3 USB固件程序设计23第六章 FPGA语音采集与回放程序设计266.1 FPGA语音采集、存储、回放控制程序设计266.1.1 ADC0809语音采集控制程序设计266.1.2 语音数据存储器设计266.1.3 DAC0832语音回放控制程序设计276.1.4 地址与控制总线选择器设计286.1.5 FPGA系统设计总体框图29第七章 系统调试307.1 主机应用程序与USB接口模块程序联调307.2 FPGA系统调试307.3 整机系统调试30总结31致谢32参考文献33附录343欢迎下载。第一章 绪论 1.1 课题背景及意义 USB总线(Universal Serial Bus)翻译为中文就是通用串行总线,由Compaq,DEC,IBM,Inter,Microsoft,NEC和Northen Telecom等公司为简化PC与外设之间的互连而共同研究开发的一种免费的标准化连接协议,它支持各种PC与外设之间的连接,还可实现数字多媒体集成。作为一种新兴的通用接口,USB已经可以在所有类型的计算机上代替现有接口来连接低、中、高速标准的外设。一直以来,作为电脑连接外围设备通道接口,一直就没有一个统一的标准。1994年,由上述几家世界著名的计算机和通讯公司成立了USB论坛;1995年11月正式制定了USB 0.9通用串行总线规范,自从通用串行总线(USB)推出以来,USB很快就成为了PC机事实上的外部通讯标准。USB当初的设计构想是,将这些接口统一起来,使用一个4针插头作为标准插头。更重要的是它还整合了电源线和数据线,其中两根芯线用于提供最低最高达500mA的电力,另外两根芯线用于数据通讯。这样,很多外设就不再需要另外提供电源,只需要通过计算机的USB接口就能实现向外设供电,用户也就不再需要为每一个外设都预留下一个电源插口,大大方便了用户的使用;而且它还支持最多127个外设的同时串联。 随着USB设备种类的增多,1997年,真正符合USB1.1技术规范的技术标准的外设出现了,USB逐步走进了实用阶段。尽管USB有许多优秀的特质,但它同时也被许多问题困扰着。所面临的主要问题是,速度仍然不够快,USB1.1版的最高速度为12Mbps,因此当连接设备多了时,带宽共享导致每个设备得到的有效带宽太小。所以USB所应用的范围仍然很窄,针对于这些缺点,经过改进的USB2.0规范诞生了。 1999年初在Intel的开发者论坛大会上,与会者介绍了USB 2.0规范,该规范的支持者除了原有的Intel、Microsoft和NEC等成员外,还有惠普、朗讯和飞利浦三个新成员。1999年10月,正式制定了USB2.0通用串行总线规范,2001年11月Comdex展览上,基于USB 2.0的外设产品系统如USB 2.0界面扩充卡、外接式硬盘、外接式刻录机等产品开始出现。随着时间的推移,USB已成为PC的标准配置。基于USB的外设越来越多,现在可以直接使用Windows ME默认驱动的外设就有:调制解调器,键盘,鼠标,光驱,数码相机,活动硬盘,手柄,软驱,扫描仪等,而非独立性I/O连接的外设将日渐减少。即主机控制式外设减少,智能软件控制的外设增多。1.2 国内外相关研究状况 2008年11月18日,由Intel、微软、惠普、德州仪器、NEC、ST-NXP等业界巨头组成的USB 3.0 Promoter Group宣布,该组织负责制定的新一代USB 3.0标准已经正式完成并公开发布。新规范提供了十倍于USB 2.0的传输速度和更高的节能效率,可广泛用于PC外围设备和消费电子产品。制定完成的USB 3.0标准已经移交给该规范的管理组织USB Implementers Forum(简称USB-IF)。该组织将与硬件厂商合作,共同开发支持USB 3.0标准的新硬件,不过实际产品上市还要等一段时间。第一版USB 1.0是在1996年出现的,速度只有1.5Mb/s;两年后升级为USB 1.1,速度也大大提升到12Mb/s,至今在部分旧设备上还能看到这种标准的接口;2000年4月,目前广泛使用的USB 2.0推出,速度达到了480Mb/s,是USB 1.1的四十倍;如今八个半年头过去了,USB 2.0的速度早已经无法满足应用需要,USB 3.0也就应运而生,最大传输带宽高达5.0Gb/s,也就是625MB/s,同时在使用A型的接口时向下兼容。 IEEE组织最近也批准了新规范IEEE1394-2008,不过新版FireWire的传输速度只有3.2Gb/s,相当于USB 3.0的60多一点。难怪苹果等业界厂商普遍对该技术失去了兴趣。USB 2.0基于半双工二线制总线,只能提供单向数据流传输,而USB 3.0采用了对偶单纯形四线制差分信号线,故而支持双向并发数据流传输,这也是新规范速度猛增的关键原因。除此之外,USB 3.0还引入了新的电源管理机制,支持待机、休眠和暂停等状态。测量仪器大厂泰克(Tektronix)在上个月第一家宣布了用于USB 3.0的测试工具,可以帮助开发人员验证新规范与硬件设计之间的兼容性。USB 3.0在实际设备应用中将被称为“USB SuperSpeed”,顺应此前的USB 1.1 FullSpeed和USB 2.0 HighSpeed。预计支持新规范的商用控制器将在2009年下半年面世,消费级产品则有望在2010年上市。1.3 USB的特点USB总线与传统的外围总线接口相比,主要有以下一些特点:(1)传输速度快:USB有低速(Low-Speed)、全速(Full-Speed)和高速(High-Speed)三种传输模式,传输速率分别为1.5Mbps、12Mbps和480Mbps,可以灵活选择以适应各种不同类型外设的需求。(2)安装配置简单快捷:USB设备支持即插即用(Plug and Play)和热插拔(Hot Plug)功能。USB连接器将各种各样的外设I/O端口合而为一,使之可热插拔,并具有自动配置能力。在电脑正常工作时,用户只要简单地将外设插入到PC的USB总线上, PC就能自动识别所连接的是什么设备, 并动态的加载驱动程序,而无须关机断电或重新启动,打开机箱等操作,实现真正的即插即用。(3)供电方式灵活,总线结构简单USB总线自身能够提供5V电压,最大500mA电流。同时,也可以由外部供电,或使用两种供电方式的组合,并且支持挂起和唤醒模式。总线结构简单,信号定义仅由2条电源线,2条信号线组成。(4)良好的兼容性:USB接口标准有良好的向下兼容性,例如USB2.0就能很好的兼容USB1.1的外设。系统会自动侦测外设接口的版本,并自动选择传输速度。(5)使用和扩展灵活:为了适应各种不同类型外设的要求,USB提供了四种不同的数据传输模式。增加外设时无需在PC内添加接口卡,多个USB集线器可相互传送数据,使PC可以用全新的方式控制外设。使用USB Hub可以同时连接多达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.1 PC主机应用程序设计实现方案方案一:采用Visual Basic编程VB是Visual Basic,是微软的比尔盖茨发明的,专为编程初学者设计,界面友好。但VB是不够完全的面向对象编程工具,属本地编译语言,其效率相对VC低了很多。方案二:采用Visual C+编程VC+是在Windows平台下构建32位应用程序的强大而有复杂的开发工具,是目前世界上使用最多的开发工具之一。VC+的应用非常广泛,从桌面应用程序到服务器端软件,从系统软件到应用软件,从单机程序到分布式应用程序,VC+无所不在。 VC+是完全面向对象的编程工具,VC+效率高,封装性好,继承性高。掌握VC+编程,对于电子专业人员而言也是非常必要的。综上,选择方案二。2.2 WINDOWS下USB设备驱动程序的设计实现方案方案一: 采用DDK进行驱动程序开发DDK是Device Development Kit设备开发包,是由微软提供的专业的设备驱动程序开发包,里面有很多驱动程序开发的例子。但对于刚接触USB设备驱动程序开发的人员而言,有点博大精深。方案二:采用DriverStudio进行驱动程序开发DriverStudio是Numega公司提供的驱动程序开发工具,它提供对USB总线的封装,大大简化了对USB总线的操作接口。DriverStudio中的DriverWorks软件为开发WDM程序提供了一个完整的框架,相比于DDK驱动程序的开发会比较简单。综上,采用方案二。2.3 USB设备固件设计实现方案方案一:采用汇编语言进行固件程序开发汇编语言有执行效率高的优点,但其可移植性和可读性差,以及它本身就是一种编程,效率低下的低级语言,这些都使它的编程和维护极不方便,从而导致整个系统的可靠性也较差。方案二:采用C语言进行固件程序开发使用C语言进行嵌入式系统的开发,有着汇编语言编程不可比拟的优势。其优势主要是:编程调试灵活方便,生成的代码编译效率高,完全模块化,可移植性好,便于项目维护管理等。综上,采用方案二。2.4 FPGA程序设计实现方案方案一:采用Verilog 语言进行开发产业界Verilog比较流行,其语法比较自由。Verilog HDL 推出已经有 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+应用程序的开发主要有两种模式,一种是WIN API方式,另一种则是MFC方式,传统的WIN API开发方式比较繁琐,而MFC则是对WIN API再次封装。 3.2 API函数 简介APIApplication Programming Interface(应用程序接口)函数,这些函数是Windows提供给应用程序编程的接口,也就是系统提供的函数,主要的函数都在Windows.h头文件中进行了声明。Windows操作系统提供了1000多种的API函数,API函数名大都是有意义的单词的组合,每个单词的首字母大写,这些函数的准确拼写与调用语法都可以再MSDN中查找到。3.3 应用程序控制界面设计 本系统控制界面 设计如图3_3-1所示:图3_3-1 语音采集与回放系统控制界面3.4 应用程序设计 在Win32系统中,把每一个设备都抽象为文件,此时的应用程序只需通过几条简单的文件操作API函数,就可以实现与驱动程序中某个设备通信。一个驱动程序可以驱动多个设备,并且此驱动程序可能为Windows系统中已有的,也可能为用户安装的。通常,这些Win32 API函数有以下几种:CreateFile函数. 打开一个设备,返回一个与设备相关的句柄。该函数的声明形势如下:HANDLE CreateFile( LPCTSTR lpFileName, /要打开的设备名 DWORD dwDesiredAccess, /访问模式 DWORD dwShareMode, /共享模式 LPSECURITY_ATTRIBUTES lpSecurityAttributes, /通常为NULL DOWRD dwCreationDistribution, / 创建方式 DOWRD dwFlagsAndAttributes, /文件属性和标志 HANDLE hTemplateFile /临时文件的句柄,通常为NULL );如果调用成功,该函数返回打开设备的句柄。ReadFile函数。 从设备中读取数据,该函数的声明形式如下:BOOL ReadFile( HANDLE hCom, /设备句柄 LPVOID lpBuffer, /指向接收缓冲区的指针 DWORD nNumberOfByteToRead, /指向所要读的字节数 LPWORD lpNumberOfBytesRead, /指向调用该函数读出的字节数 LPOVERLAPPED lpOverlapped /异步结构 );WriteFile 函数,向设备写数据,该函数声明形式如下:BOOL WriteFile( HANDLE hCom, /设备句柄 LPCVOID lpBuffer, /指向读数据缓冲区 DWORD nNUMBEROfBytesToWrite, /所读的字节数 LPDWORD lpNumberOfBytesWritten , /指向已读入的字节数 LPOVERLAPPED lpOverlapped /异步结构 );其中,参数hCom为CreateFile函数所打开的串口句柄。(4)DeviceControl函数。对设备进行一些自定义的操作,比如更改设备等。该函数的声明形式如下: BOOL DeviceControl( HANDLE hDevie, /设备句柄 DWORD dwIoControlCode, /所要执行的操作命令码 LPVOID lpInBuffer, /输入缓冲区 DWORD nInBufferSize, /输入缓冲区空间大小 LPVOID lpOutBuffer, /接收缓冲区 DWORD nOutBufferSize, /接收缓冲区空间 LPDWORD lpBytesReturned, /实际所需接收数据个数 LPOVERLAPPED lpOverlapped /异步结构 );其中,参数hDevice为CreateFile函数所打开的串口句柄。(5)CloseFile函数,关闭一个由CreateFile打开的设备。该函数声明形式如下:BOOL CloseHandle(HANDLE hCom);其中,参数hCom为CreateFile函数多所打开的串口句柄。这些函数的执行,都对应着驱动程序的一些分发例程。表3_4-1是常用API函数和驱动程序的IRP对应关系表。表3_4-1 常用API函数和驱动程序的IRP对应关系API函数IRP说明CreateFileIRP_MJ_CREATE打开设备ReadFileIRP_MJ_READ从设备获取数据WriteFileIRP_MJ_WRITE向设备发送数据CloseFileIRP_MJ_CLOSE关闭设备DeviceIoControlIRP_MJ_DEVICE_CONTROL控制操作3.4.1 查找设备 利用CreateFile函数打开一个串口,通常可用以下程序实现:HANDLE hComHCOM=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来获取的信息集。该函数的声明如下:HDEVINFO SetupDiGetClassDevs( IN LPGUID ClassGuid, OPTIONAL IN PCTSTR Enumerator, OPTIONAL IN HWND HwndParent, OPTIONAL IN DWORD Flags );(2) 识别接口信息SetupDiEnumDeviceInterface函数返回设备信息集的一个设备接口元素的环境结构,每次调用该函数返回一个设备接口的信息。可以重复调用此函数,直至获取了设备信息集中所有的设备的接口信息。该函数的声明如下:BOOLEAN SetupDiEnumDeviceInterface( IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData,OPTIONAL IN LPGUID InterfaceCalssGuid, IN DWORD MemberIndex, OUT PSSP_DEVICE_INTERFACE_DATA DeviceInterfaceData);(3) 获得设备路径名在调用上一个函数SetupDiEnumDeviceInterface时,获得了一个DeviceInfoData结构。该结构指向标识一个请求设备的接口。为了得到该接口的详细信息,可以通过调用函数SetupDiEnumDeviceInterfaceDetail来实现。此时,返回该接口的详细信息中包含了设备接口的名称。用户的首要任务就得到解决。SetupDiEnumDeviceInterfaceDetail函数的声明如下:BOOLEAN SetupDiEnumDeviceInterfaceDetail(IN HDDEVINFO DeviceInfoSet,IN PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData,OUT PSP_DEVICE_INTERFACE_DETAIL_DATA DeviceInterfaceDetailDATA,IN DWORD DeviceInterfaceDetalDatasize,OUT PDWORD RequirdSize,OUT PSP_DEVINFO_DATA DeviceInfoData);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()对该句柄进行的读写操作可以是异步,如果未指定异步标志,则读写操作是同步。 异步操作结构声明如下: typedef struct _OVERLAPPED DWORD Internal, DWORD InteralHigh, DWORD Offset, HANDLE hEvent, OVERLAPPED;3.4.4 关闭通信 和关闭串口一样,关闭USB端口也是调用CloseHandle()函数来完成。函数调用形式如下: CloseHandle(hComn);第四章 USB接口模块驱动程序设计本设计不属于Windows的标准设备,故要自己设计驱动程序。USB的驱动开发是一个技术难点,也是一个技术核心。Windows的驱动开发需要安装的开发软件有:1)Win DDK2)DriverStudio3.23)VC+ 6.04.1 驱动程序开发Windows环境下驱动程序共有三类:一类是Vxd虚拟设备驱动程序,起源于 Windows 3.1时代,用于Windows95/98操作想系统中。一类是KMD内核模式驱动程序,用于WindowsNT下。还有一类是WDMWin32驱动程序模型,是微软从Windows98开始,推出的一个新的驱动类型,它是一个跨平台的驱动程序模型,WDM驱动程序还可以在不修改源代码的情况下经过重新编译后在非Intel平台下运行。WDM在NT4.0驱动程序结构上发展起来,所以它与NT4.0的驱动程序极为相似,但是它却有了本质上的提高,增加了对即插即用、高级电源管理、Windows管理接口的支持。更重要的是,WDM是一种通用的驱动模式,提供了包括USB、IEEE1394和HID等在内的一系列驱动程序类。4.1.1 WDM驱动程序的分层结构WDM体系结构实行分层处理,典型的分层:高层驱动程序、中间层驱动程序、底层驱动程序。每层驱动再把IO请求划分成更简单的请求,以传给更下层的驱动执行。最底层的驱动程序在收到IO请求后,通过硬件抽象层,与硬件发生作用,从而完成IO请求工作。在这样的结构下,上面的驱动层就不需要对每个操作系统都开发一遍。如图4_1_1-1所示:图4_1_1-1 WDM驱动程序的体系结构WDM还引入了功能设备对象FDO与物理设备对象PDO两个新类来描述硬件,一个PDO对应一个真实硬件。一个硬件只允许有一个PDO,但却可以拥有多个FDO,而在驱动程序中我们不是直接操作硬件而是操作相应的PDO与FDO。驱动程序和设备对象的分层情况如图4_1_1-2 所示。图4_1_1-2 WDM中驱动程序和设备对象的分层情况其中总线驱动程序(Bus Driver)位于最底层控制总线上所有设备的访问,创建PDO代表发现的设备。功能驱动程序(Function Driver)控制设备的主要功能,分层在总线驱动的上面,负责创建FDO。在USB情况下,功能驱动程序必须使用USB类驱动程序访问设备。4.1.2 USB驱动程序的WDM结构USB驱动程序的构成层次如图4_1_2-1所示。其中USB客户驱动程序通过Windows系统提供的USB类驱动程序接口与下层驱动程序通信。4_1_2-1 USB驱动程序的构成层次在USB设备可用之前,必须对其进行配置和接口选择,然后所选择的接口的各个管道才可用。在USBDI的基础上进行编程将大大简化,设计者不用关心IRP的类型,而只需在相应的分发例程中通过构造USB块并将其通过USBDI发送下去就可以实现对USB设备的控制。设备的访问WDM不是通过驱动程序名称,而是通过一个128位的全局唯一的标识符(GUID)实现驱动程序的识别。在应用程序与WDM驱动程序通信方面系统为每一个用户请求打包成一个IO请求包(IRP)结构,将其发送至驱动程序,并通过识别IRP中PDO来区别是发送给哪一个设备的。内核通常通过发送IRP来运行驱动程序中的代码。WDM驱动程序有一个主要的初始化入口点,即一个必须成为DriverEntry的例程。它有一个标准的函数原型。当WDM驱动程序被载入时,内核调用DriverEntry例程。驱动程序的DriverEntry例程必须设置一系列的回调例程来处理IRP。每个回调例程有一个标准的函数原型。内核会在合适的环境下调用这个例程。大多数的WDM设备对象都是在即插即用管理器调用ADDDevice例程入口点时被创建的。插入新设备后,当系统找到由安装信息文件所批示的驱动程序时,这个例程被调用。在此之后,一系列即插即用IRP被发送到驱动程序,设备驱动程序可进行相应的功能处理。第五章 USB接口模块固件设计USB接口模块由PDIUSBD12接口芯片与AT89S52单片机构成。AT89S52作为主控核心进行相关事务的处理,PDIUSBD12作为接口芯片完成USB协议层的功能。5.1 PDIUSBD12与AT89S52 特性概述5.1.1 PDIUSBD12特性概要功能描述:PDIUSBD12是一款性价比很高的USB器件。它通常用作微控制器系统中实现与微控制器进行通信的高速通用并行接口。它还支持本地的DMA传输。 这种实现USB接口的标准组件使得设计者可以在各种不同类型微控制器中选择出最合适的微控制器。这种灵活性减小了开发的时间、风险以及费用(通过使用已有的结构和减少固件上的投资),从而用最快捷的方法实现最经济的USB外设的解决方案。 PDIUSBD12完全符合USB1.1版的规范。它还符合大多数器件的分类规格:成像类、海量存储器件、通信器件、打印设备以及人机接口设备。同样地,PDIUSBD12理想地适用于许多外设,例如:打印机、扫描仪、外部的存储设备(Zip驱动器)和数码相机等等。它使得当前使用SCSI的系统可以立即降低成本。 PDIUSBD12所具有的低挂起功耗连同LazyClock输出可以满足使用ACPI、OnNOW和USB电源管理的要求。低的操作功耗可以应用于使用总线供电的外设。 此外它还集成了许多特性,包括SoftConnetTM、GoodLinkTM、可编程时钟输出、低频晶振和终止寄存器集合。所有这些特性都为系统显著节约了成本,同时使USB功能在外设上的应用变得容易。 5.1.2 AT89S52 特性概要功能描述:AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。5.2 USB通信协议重要概念概述5.2.1 端点位于USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据,每一个端点都有惟一的确定地址,有不同的传输特性(如输入端点、输出端点、配置端点、批量传输端点)5.2.2 帧时间概念,在USB中,一帧就是1ms,它是一个独立的单元,包含了一系列总线动作,USB将1帧分为好几份,每一份中是一个USB的传输动作。5.2.3 上行与下行设备到主机为上行,主机到设备为下行5.2.4 USB的传输线结构一条USB的传输线分别由地线、电源线、D+、D-四条线构成,D+和D-是差分输入线,它使用的是3.3V的电压(与CMOS的5V电平不同),而电源线和地线可向设备提供5V电压,最大电流为500mA(可以在编程中设置)。5.2.5 USB的编码方案USB采用不归零取反来传输数据,当传输线上的差分数据输入0时就取反,输入1时就保持原值,为了确保信号发送的准确性,当在USB总线上发送一个包时,传输设备就要进行位插入操作(即在数据流中每连续6个1后插入一个0),从而强迫NRZI码发生变化。5.2.6 USB的数据格式USB数据是由二进制数字串构成的,首先数字串构成域(有七种),域再构成包,包再构成事务(IN、OUT、SETUP),事务最后构成传输(中断传输、并行传输、批量传输和控制传输)。下面简单介绍一下域、包、事务、传输,以及它们间的关系。5.2.6.1 域USB数据最小的单位,由若干位组成(至于是多少位由具体域决定),域可分为七个类型:1、同步域(SYNC),八位,值固定为0000 0001,用于本地时钟与输入同步。2、标识域(PID),由四位标识符+四位标识符反码构成,表明包的类型和格式,这是一个很重要的部分,这里可以计算出,USB的标识码有16种。3、地址域(ADDR):七位地址,代表了设备在主机上的地址,地址000 0000被命名为零地址,是任何一个设备第一次连接到主机时,在被主机配置、枚举前的默认地址,由此可以知道为什么一个USB主机只能接127个设备的原因。4、端点域(ENDP),四位,由此可知一个USB设备有的端点数量最大为16个。5、帧号域(FRAM),11位,每一个帧都有一个特定的帧号,帧号域最大容量0x800,对于同步传输有重要意义(同步传输为四种传输类型之一,请看下面)。6、数据域(DATA):长度为01023字节,在不同的传输类型中,数据域的长度各不相同,但必须为整数个字节的长度7、校验域(CRC):对令牌包和数据包(对于包的分类请看下面)中非PID域进行校验的一种方法,CRC校验在通讯中应用很泛,是一种很好的校验方法,至于具体的校验方法这里就不多说,请查阅相关资料,只须注意CRC码的除法是模2运算,不同于10进制中的除法。5.2.6.2 包由域构成的包有四种类型,分别是令牌包、数据包、握手包和特殊包,前面三种是重要的包,不同的包的域结构不同,介绍如下:1、令牌包:可分为输入包、输出包、设置包和帧起始包(注意这里的输入包是用于设置输入命令的,输出包是用来设置输出命令的,而不是放据数的)其中输入包、输出包和设置包的格式都是一样的:SYNC+PID+ADDR+ENDP+CRC5(五位校验码) 帧起始包的格式:SYNC+PID+11位FRAM+CRC5(五位校验码)2、数据包:分为DATA0包和DATA1包,当USB发送数据的时候,当一次发送的数据长度大于相应端点的容量时,就需要把数据包分为好几个包,分批发送,DATA0包和DATA1包交替发送,即如果第一个数据包是DATA0,那第二个数据包就是DATA1。但也有例外情况,在同步传输中(四类传输类型中之一),所有的数据包都是为DATA0,格式如下:SYNC+PID+01023字节+CRC163、握手包:结构最为简单的包,格式如下SYNC+PID注:上面每种包都有不同类型的,USB1.1共定义了十种包。5.2.6.3 事务分别有IN事务、OUT事务和SETUP事务三大事务,每一种事务都由令牌包、数据包、握手包三个阶段构成,这里用阶段的意思是因为这些包的发送是有一定的时间先后顺序的,事务的三个阶段如下:1、令牌包阶段:启动一个输入、输出或设置的事务2、数据包阶段:按输入、输出发送相应的数据3、握手包阶段:返回数据接收情况,在同步传输的IN和OUT事务中没有这个阶段,这是比较特殊的。事务的三种类型如下(以下按三个阶段来说明一个事务):1、 IN事务:令牌包阶段主机发送一个PID为IN的输入包给设备,通知设备要往主机发送数据;数据包阶段设备根据情况会作出三种反应(要注意:数据包阶段也不总是传送数据的,根据传输情况还会提前进入握手包阶段)1) 设备端点正常,设备往入主机里面发出数据包(DATA0与DATA1交替);2) 设备正在忙,无法往主机发出数据包就发送NAK无效包,IN事务提前结束,到了下一个IN事务才继续;3) 相应设备端点被禁止,发送错误包STALL包,事务也就提前结束了,总线进入空闲状态。握手包阶段主机正确接收到数据之后就会向设备发送ACK包。2、 OUT事务:令牌包阶段主机发送一个PID为OUT的输出包给设备,通知设备要接收数据;数据包阶段比较简单,就是主机会设备送数据,DATA0与DATA1交替握手包阶段设备根据情况会作出三种反应:1)设备端点接收正确,设备往入主机返回ACK,通知主机可以发送新的数据,如果数据包发生了CRC校验错误,将不返回任何握手信息;2) 设备正在忙,无法往主机发出数据包就发送NAK无效包,通知主机再次发送数据;3) 相应设备端点被禁止,发送错误包STALL包,事务提前结束,总线直接进入空闲状态。3、SETUP事务:令牌包阶段主机发送一个PID为SETUP的输出包给设备,通知设备要接收数据;数据包阶段比较简单,就是主机会设备送数据,注意,这里只有一个固定为8个字节的DATA0包,这8个字节的内容就是标准的USB设备请求命令(共有11条) 握手包阶段设备接收到主机的命令信息后,返回ACK,此后总线进入空闲状态,并准备下一个传输(在SETUP事务后通常是一个IN或OUT事务构成的传输)5.2.6.4 传输传输由OUT、IN、SETUP事务其中的事务构成,传输有四种类型,中断传输、批量传输、同步传输、控制传输,其中中断传输和批量转输的结构一样,同步传输有最简单的结构,而控制传输是最重要的也是最复杂的传输。1、中断传输:由OUT事务和IN事务构成,用于键盘、鼠标等HID设备的数据传输中。2、批量传输:由OUT事务和IN事务构成,用于大容量数据传输,没有固定的传输速率,也不占用带宽,当总线忙时,USB会优先进行其他类型的数据传输,而暂时停止批量转输。3、同步传输:由OUT事务和IN事务构成,有两个特殊地方,第一,在同步传输的IN和OUT事务中是没有返回包阶段的;第二,在数据包阶段所有的数据包都为DATA0。4、控制传输:最重要的也是最复杂的传输,控制传输由三个阶段构成(初始设置阶段、可选数据阶段、状态信息步骤),每一个阶段可以看成一个的传输,也就是说控制传输其实是由三个传输构成的,用来于USB设备初次加接到主机之后,主机通过控制传输来交换信息,设备地址和读取设备的描述符,使得主机识别设备,并安装相应的驱动程序,这是每一个USB开发者都要关心的问题。1)初始设置步骤:就是一个由SET事务构成的传输2)可选数据步骤:就是一个由IN或OUT事务构成的传输,这个步骤是可选的,要看初始设置步骤有没有要求读/写数据(由SET事务的数据包阶段发送的标准请求命令决定)3) 状态信息步骤:这个步骤就是要获取状态信息,由IN或OUT事务构成的传输,但是要注意这里的IN和OUT事务和之前的INT和OUT事务有两点不同:i) 传输方向相反,通常IN表示设备往主机送数据,OUT表示主机往设备送数据;在这里,IN表示主

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论