基于USB的数据采集系统_第1页
基于USB的数据采集系统_第2页
基于USB的数据采集系统_第3页
基于USB的数据采集系统_第4页
基于USB的数据采集系统_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

第1章 绪论 1.1 引言数据采集系统就是采集传感器输出的模拟信号并转换为计算机可以识别的数字信号,送入计算机并进行记录或打印。以便对某些物理量进行监视,其中一部分数据还将被生产过程中的计算机用来控制某些物理量。数据采集系统的好坏取决于他的精度和速度。在保证精度的情况下尽可能的提高速度以满足实时采样、实时处理、实时控制的要求。数据采集监测已成为日益重要的检测技术,广泛应用于工农业等需要同时监控温度、湿度和压力等场合。数据采集是工业控制等系统中的重要环节,通常采用一些功能相对独立的单片机系统来实现,作为测控系统不可缺少的部分,数据采集的性能特点直接影响到整个系统。生产过程中,这一系统可对现场的工艺参数进行采集、监视和记录,为提高产品质量,降低生产成本提供信息和手段。在科学研究中应用该系统可以获得大量动态是研究瞬间物理过程的重要手段,也是获取科学奥秘的重要手段之一。总之无论在哪个领域,数据采集系统,应用的越及时,工作效率就越高,获得的经济利益就越大。现代工业生产和科学研究对数据采集的要求日益提高。在许多场合要求数据采集系统向便携化方向发展,要求系统具有体积小、功耗低、传输速率快、使用方便灵活等特点。在数据采集系统中,如何节省电能以使系统工作时间更长,如何通信才能使系统数据传输速度更快,已经成为系统开发过程中考虑的主要内容。1.2课题背景在数据采集系统中,传统的外设与主机的通信口一般采用ISA、PCI、1394等标准,基于这些接口的产品,安装麻烦,价格昂贵,并受计算机插槽数量、地址中断资源限制,且可扩展性差,USB的出现,很好地解决了以上问题。 USB作为一种新型的串口通信标准,具有较高的传输速率,可扩展性好,采用总线供电,使用灵活。它共有4种传输模式:控制传输、同步传输、中断传输、批量传输,以适应不同设备的需要。信息技术与电子技术的迅猛发展,使得计算机和外围设备也得到飞速发展和应用。过去人们单纯追求计算机与外设之间的传输速度,现在纠错能力和操作安装的简易性也成为人们关注的目标。USB通讯技术的出现,使高传输速度、强纠错能力、易扩展性、方便的即插即用,有机的结合在一起。1.3课题的提出尽管RS232是一种十分成熟且应用广泛的通讯方式,但是随着控制系统的日益复杂,所要采集的量也会越来越多。因此寻求一种高速、安全、方便的通讯形式是十分必要的。USB技术虽然出现的时间并不长,但是由于它的种种优点,被越来越多的厂商和用户所接受,出现了USB打印机、摄像头等产品。尽管目前USB接口的应用主要集中在电脑的周边外设,但是USB产品进入工控领域将是必然的趋势。采用CH375芯片和C8051F330单片机设计的基于USB总线的数据采集系统,具有可靠性高、数据不丢失、抗干扰性强、便于数据传输和处理等优点,可在信号测试、信号采集场合广泛使用。所以本课题的研究是具有一定的现实意义和经济意义的。1.4主要工作本论文所设计的数据采集系统是在单片机C8051F330控制下进行数据采集,并通过沁恒公司的USB 总线接口芯片CH375上传给PC机进行分析、显示和存盘。该系统用传统的USB总线取代了RS232串行总线,通过对USB协议和设备构架的充分理解,对以单片机C8051F330和USB接口芯片CH375为主的数据采集系统进行了硬件设计和软件编程,并在此设计的基础上给出相应的原理图。硬件设计主要解决的是CH375与单片机的接口电路的设计。软件设计可分为三部分:一是充分了解CH375的主要功能特点,为满足CH375在USB上的最大传输速率而编写固件程序;二是在充分了解WDM驱动程序的基础上编写USB的设备驱动程序;三是编写出界面友好、具有强大的数据处理和分析能力的应用程序。第2章 USB的简介通用串行总线(Universal Serial Bus,简称USB)是康柏、微软、IBM, DEC等公司为了解传统总线的不足推出的一种新型串行总线接口规范, 自1995年在Comdex上亮相以来至今己广泛地为各PC厂家所支持。现在生产的PC机几乎都配备了,USB接口,Microsoft的windows98,NT以及MacOS, Linux, FreeBSD等流行操作系统都增加了对USB的支持。USB的主要特点如下:1. 速度快。 USB 有全速和低速两种方式,主模式为全速模式,速率为12Mbps,从而使一些要求高速数据的外设,如:高速硬盘、摄像头等,都能统一到同一个总线框架下。另外为了适应一些不需要很大吞吐量但是有很高实时性要求的设备,如鼠标、键盘、游戏杆等,USB还提供低速方式,速率为1.5Mbps。如表2-1所示。新推出的USB2.0协议提供最高达480Mbps的数据传输速率可以适应各种不同类型的外设。 表2-1 USB使用分类表性能应用特性低速 交互设备10-20kb/s键盘、鼠标、游戏棒低价格、热插拔、易用性中速电话、音频、压缩视频500kb/s-10Mb/sISBN、PBX、POTS低价格、易用性、动态插拔、限定带宽和延迟高速音频、磁盘25-500Mb/s音频、磁盘高带宽、限定延迟、易用性2. 支持热插拔和即插即用。 所有的USB 设备可以随时的插入和拔离系统,USB 主机能够动态的识别设备的状态,并自动给接入的设备分配地址和配置参数,添加、删除设备完全不用关闭计算机,也不必像过去那样需要手动跳线和拨码开关来设置新的外设。3. 易于扩展。USB使用的是一种易于扩展的树状结构,通过使用USB Hub扩展可连接多达127个外设。标准USB电缆长度为3米(低速为5米)。通过Hub或中继器可以使外设距离达到30米。4. 使用灵活。 USB共有4种传输模式:控制传输(control),步传输(synchronization)、中断传输(interrupt)、批量传输(bulk),适应不同设备的需要。5. 能够采用总线供电。 普通使用串口、并口的设备都需要单独的供电系统,而USB设备则不需要,因为USB接口提供了内置电源e USB电源能向低压设备提供最大5V, 500mA 的电源,从而降低了这些设备的成本并提高了性价比。6. 实现成本低。 USB对系统与PC的集成进行了优化,适合于开发低成本的外设。2.1USB的互连一个USB系统主要被定义为三个部分: USB的互连; USB的设备; USB的主机。USB的互连是指USB设备与主机之间进行连接和通信的操作,主要要包括以下几方面:总线的拓扑结构:USB设备与主机之间的各种连接方式;内部层次关系:根据性能叠置,USB的任务被分配到系统的每一个层次;数据流模式:描述了数据在系统中通过USB从产生方到使用方的流动方式;USB的调度:USB提供了一个共享的连接。对可以使用的连接进行了调度以支持同步数据传输,并且避免的优先级判别的开销。2.2 USB的主机图2-1展示了USB通信模型之间基本的信息流与互连关系。主机与设备都被划分成不同的层次。由图2-1可见,主机上垂直的箭头是实际的信息流。设备上对应的接口是基于不同实现的。在主机与设备之间的所有通信最终都是通过USB的电缆进行,然而,在上层的水平层之间存在逻辑的主机-设备信息流。主机上的客户软件和设备功能部件之间的通信是基于实际的应用需求及设备所能提供的能力。客户USB系统主机控制器功能部件USB设备USB总线接口逻辑的信息流实际的信息流 图2-1 通信模型层次关系图2.2.1 USB驱动(USBD)USBD提供了供操作系统组件特别是设备驱动程序访问设备的一组接口。这些操作系统组件只能通过USBD来访问USB。USBD的具体实现基于不同的操作系统。一个USBD可以访问一个或多个HCD,而一个HCD可能与一个或多个主机控制器相连。某些操作系统可能允许对USBD的初始化进行一些设置。从客户的观点来看,与客户进行通信的USBD管理着所有连接着的USB设备。2.3 USB设备USB设备可被划分三层:底层是传送和接收数据包的总线接口中间层处理总线接口与不同端点之间的数据路由端节点是数据的终结提供处或使用处,它可被看作数据源或数据接收端(Sink)最上层的功能由串行总线设备提供,比如鼠标,或ISDN接口。2.4 USB的物理层USB的物理接口包括电气特性和机械特性。USB通过一个四线电缆来传输信号与电源如图2-2所示。图2-2 USB电缆定义其中D+和D-是一对差模的信号线而VBus和GND则提供了5V的电源它可以给一些设备(包括Hub)供电当然要有一定的条件限制。USB信号线在高速模式下必须使用带有屏蔽的双绞线,而且最长不能超过5m。而在低速模式时中可以使用不带屏蔽或不是双绞的线,但最长不能超过30m。这主要是由于信号衰减的限制,为了提供信号电压保证以及与终端负载相匹配,在电缆的每一端都使用了不平衡的终端负载,这种终端负载也保证了能够检测外设与端口的连接或分离,并且可以区分高速与低速设备。所有的设备都有上行的接口,上行和下行的接头是不能互换的,这保证了不会有非法的连接出现。插头与插座有两个系列分别为A和B系列,A用于基本固定的外围设备,而系列B用于经常拔插的设备,这两个系列是不能互换的。本文设计的基于USB总线的数据采集系统正是充分地利用了USB 总线的上述优点,从而有效地解决了传统数据采集系统的缺陷。很方便地就能够实现低成本、高可靠性、实时的数据采集,适用于对瞬态信号进行采集和处理。 第3章 整体系统方案的选定 3.1方案构思在目前的市场上,这三种芯片的类别繁多,选者哪些芯片才能使所设计的系统完成可靠,快速的数据采集成为在做这个系统之前要考虑的一个很重要的问题,它直接关系到所设计系统的可实行性和实用性。应该尽量在条件允许的条件下做出性价比最优的系统或产品。那么,设计方案的选者就显的很重要了。设计本课题时考虑了三种方案,下面综合比较三个方案的优缺点以便选者最合适的设计方案。3.2方案论证3.2.1 方案一采用80C51系列的单片机微处器,Philips公司的PDIUSBD12接口芯片和MAXIM公司的MAX122A/D转换芯片来设计本系统。Philips公司的PDIUSBD12接口芯片只支持USB1.1协议,传输速度只有低速(1.5Mbps)和全速(12Mbps),它与USB2.0不兼容,不能满足日益增加的速度要求。目前来看USB2.0协议逐渐普及。如果用PDIUSBD12芯片设计该数据采集系统在速度上没有竞争力,那么市场竞争力也不会太强。这个方案中所用的MAX122A/D转换芯片的采样速率较高,得到的数据不能通过USB总线直接传送给主机,因此需要在A/D转换器和主机之间连接数据缓冲器,A/D转换器产生的数据先存储在缓冲器中,当缓冲器数据存满后,通知主机取走数据。另外,如果用这三个芯片设计,可以很明显的看出A/D转换芯片是需要外扩的。那么,整个系统的稳定度和集成度都不高。不能满足现代工业的发展需要。该方案的框图如图3-1所示。模 拟信 号单片机模 拟信 号A/D转换 器USB接 口PC机图3-1 方案框图3.2.2方案二采用80C51系列的单片机微处器和 National Semiconductor公司的专用USBN9602来设计本系统。USB接口芯片采用National Semiconductor公司的一种专用芯片USBN9602。该芯片内部集成微处理器接口、 FIFO存储器、时钟发生器、串行接口引擎(SIE)、收发器、电压转换器,支持DMA、微波接口。模拟输入信号经过A/D转换器,A/D转换器经光电隔离后串行输出到移位寄存器,移位寄存器将此结果转为8位并行数据,89C51系统通过8位的并行接口传送A/D转换器采集的数据,存储在FIFO存储器中;一旦FIFO存满,SIE立刻对数据进行处理,然后89C51系统将数据从FIFO存储器中读出,由收发器通过数据线(D+、D-)送至主机。此方案的主要缺点是集成度不高,系统的稳定性差。 3.2.3方案三采用C8051F330混合信号 ISP FLASH微控制器和通用的CH375接口芯片来设计本系统。C8051F330把A/D转换器和微处理器集成在一个芯片上,免去了设计A/D转换器和微处理器接口的麻烦,同时增加了系统的稳定性。另外,CH375不仅支持USB1.1协议还兼容USB2.0,在速度上可达到480Mbps,适应日益增加的速度要求。本方案集成度高,稳定性好,在速率上也有很好的扩展性。并且芯片的价格适中可以满足对性价比的需求。所以,在此次设计中采用本方案。本方案的方案框图如图3-2所示。C8051F330微控制器多路模拟信号CH375接 口芯 片PC 图3-2 方案三框图第4章 数据采集系统的硬件设计 4.1 系统硬件的结构基于USB总线的实时数据采集系统硬件组成包括模拟开关、A/D转换器、单片机、USB接口芯片,该系统能够实现数据的自动采集,系统的组成框图如图4-1所示。主要包括4个组成部分:中央处理器选用C8051F330芯片,完成各部分控制功能和USB传输协议;主要完成数据采集,并读入MCU处理;复位电路完成对MCU的上电复位和电源电压监视;电源电路主要为各部分提供要求的电源;外设与主机间的通信电路采用USB接口。多路模拟信号C8051F330微控制器CH375接 口芯 片PC 图4-1 数据采集系统硬件组成框图4.2 接口硬件设计CH375 与C8051F330接口电路该系统的重要部分。C8051F330有17个I/O引脚。每个端口引脚都可以被配置为模拟输入或数字I/O。被选择作为数字I/O的引脚还可以被配置为推挽或漏极开路输出。 数字交叉开关允许将内部数字系统资源映射到端口I/O引脚。可通过设置交叉开关控制寄存器将片内的计数器/定时器、串行总线、硬件中断、比较器输出以及微控制器内部的其它数字信号配置为出现在端口I/O引脚。这一特性允许用户根据自己的特定应用选择通用端口I/O和所需数字资源的组合。CH375并口信号线包括:8 位双向数据总线 D7D0、读选通输入引脚 RD#、写选通输入引脚 WR#、片选输入引脚CS#、中断输出引脚INT#以及地址输入引脚A0。通过被动并行接口,CH375芯片可以很方便地挂接到单片机、DSP、MCU的系统总线上,并且可以与多个外围器件共存。 CH375芯片的RD#和WR#可以分别连接到单片机的读选通输出引脚和写选通输出引脚。CS#由地址译码电路驱动,用于当单片机具有多个外围器件时进行设备选择。INT#输出的中断请求是低电平有效,可以连接到单片机的中断输入引脚或者普通 I/O引脚,单片机可以使用中断方式或者查询方式获知中断请求。地址输入引脚A0可以连接普通的I/O引脚。接口电路的设计如图4-2所示。 图4-2 接口电路4.3 MCU外接电路4.3.1外部时钟电路该系统使用晶体谐振器作为 MCU的外部振荡源,晶体谐振器必须并接到 XTAL1和 XTAL2 引脚,还必须在 XTAL1 和 XTAL2 引脚之间并接一个 10M的电阻。外部晶体和陶瓷谐振常需要较长的起动时间,应待其稳定后方可用作系统时钟。系统时钟可以在内部振荡器和外部振荡器之间自由切换,只要所选择的振荡器被使能并稳定运行。当选择内部振荡器作为系统时钟时,外部振荡器仍然可以给外设提供时钟。外部时钟电路如图4-3所示。图4-3 外部时钟电路4.3.2外部复位电路C8051F330外部/RST 引脚提供了使用外部电路强制 MCU进入复位状态的手段。在/RST 引脚上加一个低电平有效信号将导致 MCU进入复位状态。尽管在内部有弱上拉,但最好能提供一个外部上拉或对/RST 引脚去耦以防止强噪声引起复位。外部复位电路如图4-4所示。图4-4 外部复位电路4.3.3电压基准电路C8051F330的电压基准 MUX可以被配置为连接到外部电压基准。端口引脚 P0.0 用作外部 VREF 输入。电压基准电路如图4-5所示。图4-5 电压基准电路4.3.4保护电路在设计具体的电路时应在C8051F330的前面加分压电阻,以保证C8051F330在工作电压范围内正常工作。考虑到实际中可能出现的情况,如果出现负电压或过载电压,可能会损坏C8051F330,所以应该在C8051F330前面加嵌位保护电路。保护电路如图4-6所示。图4-6 保护电路4.5系统总原理图整个数据采集系统设计方案的电路图如图4-7所示。电容 C4用于 CH375 内部电源节点退耦,C4 是容量为 0.01F 的独石或高频瓷片电容,如果对EMI没有要求那么可以省掉C4。电容C5和 C6用于外部电源退耦,C5是容量为 0.1F的独石或高频瓷片电容。晶体 X1、电容 C1 和 C2 用于 CH375 的时钟振荡电路。USB-HOST 主机方式要求时钟频率比较准确,X1的频率是12MHz0.4,C1和C2 是容量约为 15pF 的独石或高频瓷片电容。 如果电源上电过程较慢并且电源断电后放电时间较长,那么 CH375将不能可靠复位。可以在RSTI引脚与VCC之间跨接一个容量为0.47F 的电容 C3,同时可以减少干扰。图4-7 系统总电路图 第5章 器件介绍5.1 C8051F330芯片C8051F330器件是完全集成的混合信号片上系统型 MCU。下面列出了它的一些主要特性: *高速、流水线结构的 8051 兼容的 CIP-51 内核(可达 25MIPS)*全速、非侵入式的在系统调试接口(片内) *真正 10 位 200 ksps的 16 通道单端/差分 ADC,带模拟多路 *10 位电流输出 DAC *高精度可编程的 25MHz 内部振荡器 *8KB 可在系统编程的 FLASH 存储器 *768 字节片内 RAM *硬件实现的SMBus/ I 增强型UART和增强型SPI串行接口*4 个通用的 16 位定时器 *具有 3 个捕捉/比较模块和可编程计数器/定时器阵列 *片内上电复位、VDD监视器和温度传感器 *片内电压比较器 *17 个端口 I/O(容许 5V输入) 具有片内上电复位、VDD 监视器、看门狗定时器和时钟振荡器的 C8051F330 是真正能独立工作的片上系统。FLASH 存储器还具有在系统重新编程能力,可用于非易失性数据存储,并允许现场更新 8051 固件。用户软件对所有外设具有完全的控制,可以关断任何一个或所有外设以节省功耗。C8051F330芯片管脚图如图5-1所示。 图5-1 C8051F330芯片管脚图5.2 CH375芯片CH375 是一个USB总线的通用接口芯片,支持USB-HOST主机方式和USB-DEVICE/SLAVE 设备方式。在本地端,CH375 具有8 位数据总线和读、写、片选控制线以及中断输出,可以方便地挂接到单片机/DSP/MCU/MPU等控制器的系统总线上。在USB 主机方式下,CH375还提供了串行通讯方式,通过串行输入、串行输出和中断输出与单片机/DSP/MCU/MPU 等相连接。CH375 的USB主机方式支持常用的USB全速设备,外部单片机可以通过CH375按照相应的USB 协议与USB 设备通讯。CH375 还内置了处理Mass-Storage 海量存储设备的专用通讯协议的固件,外部单片机可以直接以扇区为基本单位读写常用的USB 存储设备(包括USB 硬盘/USB 闪存盘/U 盘)。CH375芯片资料如图5-2,表5-1所示。CH375A为5V电源电压CH375V为3.3V电源电压图5-2 CH375芯片表5-1 CH375芯片型号及参数封装行式塑体宽度引脚间距封装说明型号SOP-287.62mm300mil1.27mm50mil标准的28脚贴片CH375ASOP-287.62mm300mil1.27mm50mil标准的28脚贴片CH375V CH375芯片的RD#和WR#可以分别连接到单片机的读选通输出引脚和写选通输出引脚。CS#由地址译码电路驱动,用于当单片机具有多个外围器件时进行设备选择。INT#输出的中断请求是低电平有效,可以连接到单片机的中断输入引脚或者普通 I/O引脚,单片机可以使用中断方式或者查询方式获知中断请求。 当WR#为高电平并且CS#和RD#及A0都为低电平时,CH375 中的数据通过 D7D0输出;当 RD#为高电平并且CS#和WR#及A0都为低电平时,D7D0上的数据被写入 CH375 芯片中;当 RD#为高电平并且CS#和WR#都为低电平而A0为高电平时,D7D0 上的数据被作为命令码写入 CH375 芯片中。CH375芯片具有通用的被动并行接口,可以直接连接多种单片机、DSP、MCU等。CH375 的TXD引脚通过1K左右的下拉电阻接地或者直接接地,从而使CH375工作于并口方式。 第6章 系统软件设计系统软件包括USB设备驱动程序、设备固件、应用程序。其中设备固件是整个系统的核心,它控制着芯片CH375采集数据,接受并处理USB驱动的请求和应用程序的控制指令。6.1数据采集模块的设计模拟输入信号经过A/D转换器变为数字信号,A/D转换器经串行输出到移位寄存器,移位寄存器将此结果转为8位并行数据,微处理系统通过8位的并行接口传送A/D转换器采集的数据,存储在FIFO存储器中;CH375提供的FIFO为64字节,一旦FIFO存满,SIE立刻对数据进行处理,然后微处理系统将数据从FIFO存储器中读出,由收发器通过数据线(D+、D-)送至主机。在整个数据采集过程中重复上述过程。USB数据采集系统的数据采集模块的设计流程图如图6-1所示。模拟信号从ADC读采样 值存储数据 至FIFO设定标志位status重新开启A/D模块并返回图 6-1 数据采集流程图6.2 USB设备驱动程序开发设备驱动程序是一个软件组件,介于硬件与用户应用软件之间,为它们之间的通信提供桥梁。设备驱动程序主要是提供操作系统与硬件设备的接口,支持用户及其应用程序要求的信息流。对于该设备驱动程序的编写,我们采用WDM(Windows32 Driver Mode)驱动程序模型,该模型主要有以下特点:1、支持即插即用(PnP)和电源管理。2、提供系统总线驱动程序。3、支持WMI(Windows Management Instrumentation), WDM驱动程序必须支持WMI,一般这种请求是通过IRP_MJ_SYSTEM_CONTROL请求传给PDO的。4、支持类驱动程序/微驱动程序分层结构。WDM驱动程序采用分层结构,可和其它驱动程序相联系,接收建立在其上的驱动程序提供的服务,也可向其它驱动程序发送IRP请求。USB系统驱动程序采用分层结构模型:较高级的USB设备驱动程序和较低级的USB函数层。其中USB函数层由两部分组成:较高级的通用串行总线驱动程序模块(USBD)和较低级的主控制器驱动程序模块(HCD)。它们的层次关系如图6-2所示。图6-2USB系统驱动程序层次关系USB设备驱动程序在本设计中由四个模块实现:初始化模块、即插即用管理模块、电源管理模块以及I/O功能实现模块。初始化模块提供一个入口函数DriverEntry(),所有对各种IRP(I/O Request Packet,IRP请求包)的处理例程都在此入口函数中做出定义。即插即用管理模块实现USB设备的热拔插及动态配置。当硬件检测到USB设备接入时,Windows2000查找响应的驱动程序,并调用它的DriverEntry例程,PnP管理器调用驱动程序的AddDevice例程,告诉它添加了一个设备;在此处理过程中,驱动程序收到一个设备启动请求(IRP_MN_START_DEVICE)的IRP。同理,当要拔除时,PnP管理器会发出一个设备删除请求(IRP_MN_REMOVE_DEVICE)的IRP,由驱动程序进行处理。通过对这些PnP请求的处理,可支持设备的热插拔和即插即用功能。电源管理模块负责设备的挂起与唤醒。I/O功能实现模块完成I/O请求的大部分工作。若应用程序想对设备进行I/O操作,它便使用Windows API函数,对WIN32子系统进行WIN32调用。此调用由I/O系统服务接收并通知I/O管理器,I/O管理器将此请求构造成一个合适的I/O请求包(IRP)并把它传递给USB设备驱动程序,USB设备驱动程序接收到这个IRP以后,根据IRP中包含的具体操作代码,构造相应的USB请求块并把此URB放到一个新的IRP中,然后把此IRP传递到USB总线驱动程序,USB总线驱动程序根据IRP中所含的URB执行相应的操作(如从USB设备读取数据等),并把操作结果通过IRP返还给USB设备驱动程序。USB设备驱动程序接收到此IRP后,将操作结果通过IRP返还给I/O管理器,最后I/O管理器将此IRP中操作结果返还给应用程序,至此应用程序对USB设备的一次I/O操作完成。6.2.1数据传输控制本数据采集系统有八个数据采集通道,所以需要对数据采集通道进行控制,以便于选取合适通道和进行通道的切换,这些任务就由IOCTL_ChannelControl_Handler(KIrp I)函数完成。采集后的数据通过USB总线传送的计算机的指定缓冲区中,以便于调用和进行处理,所以用IOCTL_GetData_Handler(KIrp I)函数从USB设备获取数据,并将所得数据传递给应用程序。IOCTL_GetData_Handler(KIrp I)和IOCTL_GetData_Handler(KIrp I)函数代码如下:NTSTATUS DataCollectDevice:IOCTL_ChannelControl_Handler(KIrp I)T.Trace(TraceInfo, _FUNCTION_+. IRP %pn, I);NTSTATUS status = STATUS_SUCCESS;ULONG inputSize = I.IoctlInputBufferSize();ULONG outputSize = I.IoctlOutputBufferSize(); PVOID inputBuffer = I.IoctlBuffer(); PVOID outputBuffer = I.IoctlBuffer();/ TODO: Validate the parameters of the IRP. if (FALSE)status = STATUS_INVALID_PARAMETER;I.Information() = 0;else/ TODO: copy dataI.Information() = 0;T.Trace(NT_SUCCESS(status)?TraceInfo:TraceWarning, _FUNCTION_-. IRP %p, STATUS %xn, I, status);return status;NTSTATUS DataCollectDevice:IOCTL_GetData_Handler(KIrp I)T.Trace(TraceInfo, _FUNCTION_+. IRP %pn, I);NTSTATUS status = STATUS_SUCCESS;ULONG inputSize = I.IoctlInputBufferSize();ULONG outputSize = I.IoctlOutputBufferSize(); PVOID inputBuffer = I.IoctlBuffer(); PVOID outputBuffer = I.IoctlBuffer();/ TODO: Validate the parameters of the IRP. if (FALSE)status = STATUS_INVALID_PARAMETER;I.Information() = 0;else/ TODO: copy dataI.Information() = 0;T.Trace(NT_SUCCESS(status)?TraceInfo:TraceWarning, _FUNCTION_-. IRP %p, STATUS %xn, I, status);return status;6.3设备固件设计固件是FIREWARE的对应中文词,它实际上是单片机的程序文件,其编写语言可以采用C语言或是汇编语言.它的操作方式与硬件联系紧密,包括USB设备的连接USB协议、中断处理等,它不是单纯的软件,而是软件和硬件的结合,开发者需要对端口、中断和硬件结构非常熟悉。固件程序一般放入MCU中,当把设备连接到主机上时,上位机可以发现新设备,然后建立连接。因此,编写固件程序的一个最主要的目的就时让Windows可以检测和识别设备。USB固件程序程序由三部分组成:(1)初始化单片机和所有的外围电路;(2)主循环部分,其任务是可以中断的;(3)中断服务程序,其任务是对时间敏感的,必须马上执行。设备固件是设备运行的核心,采用汇编语言设计。其主要功能是控制芯片CH375接受并处理USB驱动程序的请求(如请求设备描述符、请求或设置设备状态、请求设备设置、请求或设置设备接口等U标准请求);控制芯片CH375接受应用程序的控制指令;控制A/D模块的数据采集;通过CH375存储数据并上传PC。设备固件程序设计框图如图6-3所示。USB传输方式分为4种:控制传输,块传输,同步传输和中断传输。在实际开发中使用了控制传输和块传输。控制传输主要用来完成主机对设备的各种控制操作,也就是用来实现位于主机上的USB总线驱动程序(USBD.SYS)以及编写的功能驱动程序对设备的各种控制操作。块传输主要用来完成主机和设备间的大批量数据传输以及对传输数据进行错误检测(若发生错误,它支持“重传”功能)。C8051F330系统控制USB控制器的工作过程可以简单地概括为:当USB控制器从USB总线检测到主机启动的某一传输请求后,通过中断方式将此请求通知C8051F330系统,C8051F330系统通过访问USB控制器的状态寄存器和数据寄存器获得与此次传输有关的各种参数,并根据具体的传输参数,对USB控制器的控制寄存器和数据寄存器进行相应的操作,以完成主机的传输请求。ALT 事 件初 始 化读寄存器MAEV,MAMSK判断中断类型NAK 事 件请求写事 件请求读事 件设定标志位status并返回从 ADC 读 采 样 值存 储 数 据 至 FIFO设 定 标 志 位status重新开启A/D模块并返回检 测CH375上 电 开 始失败成功12A/D模块中断入口CH375中断入口接 受 数 据发送数 据处理上位机 请 求标 志 位status=?图6-3USB设备固件框图6.4 设备应用程序设计USB设备应用程序是实现PC机对USB接口芯片CH375的接口控制和读写操作,提供友好的人机界面。由于应用程序中涉及到与硬件打交道的底层函数,会大量的引用Win32 API函数,在Visual C+环境下开发是比较直观和顺乎逻辑的。要编写USB设备的驱动程序,必须要有能够编译WDM驱动程序的软件环境,建议使用Visual C+来编制该驱动程序。应用程序主要通过对驱动程序中函数的利用来实现对USB设备的操作控制。因此在编写设备应用程序时,可以使用可读性和移植性很好的Visual C+,Visual Basic,Delphi等开发环境来生成控制所需的交互界面,大大方便用户使用。6.4.1 Win32 API 简介Windows API(Application Programming Interface)即基于Windows的应用程序编程接口,由Windows下基本的系统函数调用组成,专门为Windows下的编程提供支持。就高级编程语言来说,Windows API是Windows环境下底层函数的调用,所有在Win32平台上运行的应用程序都可以调用这些函数。Microsoft的所有32位平台都支持统一的API,包括函数、结构、消息、宏和接口。既然位于底层,完全使用API编程便显得十分繁琐,事倍功半。但是利用底层的函数可以使程序员了解Windows的内部,知道Windows程序的来龙去脉。使用Win32 API,应用程序能充分挖掘Windows系统的潜力,不但可以开发出在各种平台上都能运行的应用程序,而且可以充分利用每个平台特有的功能和属性。标准的Win32 API函数可以分为以下几类:窗口管理、图形设备接口、系统服务、窗口通用控件、Shell特性、国际特性和网络服务。1.窗口管理函数:窗口管理函数提供了建立和管理用户界面的方法。用窗口管理函数可以建立窗口、通过窗口来显示输出、提示用户输入以及完成其他一些与用户进行交互所需要的操作。2.图形设备接口:图形设备接口提供了一系列函数的相关结构,可用来在显示器、打印机或其他设备上生成图形化的输出结果。用GDI函数可以绘制直线、曲线、闭合图形、文本以及位图图像。所绘制的图形颜色和风格依赖于所建立的绘图对象,即画笔、刷子和字体。可以用画笔绘制直线和曲线,用刷子来填充闭合图形的内部,用字体来书写文本。3.系统服务:系统服务函数提供了访问计算机资源以及底层操作系统特性的手段,例如访问内存、文件系统、设备、进程和线程。使用系统服务函数,应用程序可以管理和监视所需要的资源。例如,可以用内存管理函数来分配和释放内存,用进程管理和同步函数来启动和调整多个应用程序或在一个应用程序中运行的多个线程的操作。4,其他函数:Win32 API中有一些接口和函数,可用来增强系统Shell的功能。Shell用一个单层结构的名字空间来组织用户关心的所有对象,包括文件、存储设备、打印机及网络资源;通用控件是由通用控件库COMCTL32.DLL支持的一个控件窗口集,作为ActiveX控件直接使用通用控件:国际特性函数有助于编写国际化的应用程序;网络服务函数主要用于网络的操作,包括网络上不同计算机应用程序之间的通信,在网络上各计算机建立和管理共享资源的链接等。6.4.2 MFC的应用程序开发友好的可视化用户界面非常便于用户操作使用,但是却增加了设计人员的负担。几乎所有的开发平台都可以设计可视化的程序,可是如果其操作系统没有提供基本的应用程序开发接口,那么设计可视化程序的工作就很繁琐了,在面向对象兴起后,应用程序框架也应运而生。MFC只是其中之一,他不但是个很大的类库,还将类之间的关系很密切的结合起来。MFC把Windows API包装起来,建立了一些很容易使用和理解的函数,还将其中的一部分隐藏起来,只在链接时加入以降低工程的规模。另外,微软基础类库还介绍了Document和View的机制,让数据处理与显示的部分区分的很清楚。6.4.3 设备应用程序与WDM的通信设备应用程序与WDM是双向通信的,下面分别介绍,以便更好的理解设备应用程序对USB设备的控制操作。6.4.4 Win32 应用程序对WDM的通信Win32应用程序在Windows中调用WDM的Win32函数共有五个:CreateFile(),ReadFile(),WriteFile(),DeviceloControl()和CloseHandle()。这些函数的执行都对应着驱动程序的一些例程。下面就其中的一些编程问题作一些说明:1. 打开一个WDM 设备。应用程序打开一个WDM 设备驱动程序,用的是CreateFile()函数。它的第一个参数是一个符号链接名。一旦应用程序获得设备的有效句柄,它就能够调用Win32函数,这将产生对应于此设备对象的相应IRP。2. 关闭一个WDM设备。WDM允许多个应用程序打开同一个设备,它为每个应用程序创建一个设备对象。当其中的一个应用程序调用CloseHandle()函数,驱动程序首先收到“清除”IRP,驱动程序应当在“清除”例程中清除和此设备对象有关的待处理的IRP。然后收到“关闭”IRP,关闭设备对象。3. ReadFile()和WriteFile()函数的调用。特征标志位DO_BUFFERED_IO决定着WDM驱动程序该如何访问应用程序调用ReadFileo和WriteFile()函数的数据缓冲区。I/0管理器根据设备对象的此特征标志位,决定着ReadFile()和WriteFileo函数的缓冲器参数在一个IRP中的表示法。4. DeviceloControl()函数的调用。对于DeviceIoControl()函数的调用,驱动程序根据I/O控制命令来决定该如何获取应用程序的缓冲器地址。I/O控制命令中的数据访问方式的定义有METHOD BUFFERED, METHOD IN DIRECT,METHOD OUT DIRECT 或METHOD NEIT HER。如果控制命令定义为METHOD BUFFERED,系统分配一个缓冲区用于输入和输出,该缓冲区的字节数为应用程序的输入和输出缓冲区的大者的字节数。驱动程序必须先拷贝输入数据,然后再复制输出数据。驱动程序通过KIrp:IoctIBufer获得缓冲区的地址。对于输出,驱动程序将必须把存储字节数赋给IRP.Information(),完成后,I/O管理器将数据从系统缓冲区复制到应用程序的数据缓冲区。6.4.5 WDM对Win32应用程序的通信应用程序创建一个事件后,可直接将事件句柄传递给WDM,然后等待WDM发送事件消息。WDM驱动程序获取这个事件的一个对象指针后,只能在DISPATCH LEVEL级别的例程中设置事件信号状态。此外,WDM还提供了其他两种对Win32应用程序通信的方式。一种方式是创建一个命名的事件;另一种方式是当应用程序调用DeviceloControl()函数时,WDM返回STATUS_ENDING。当一个事件发生后,WDM完成这个IRP调用DeviceloControl()函数的线程接着往下执行,处理发生的事件。6.4.6 USB设备应用程序的实现用户应用程序是系统与用户的接口,它通过通用驱动程序完成对外设的控制和通信。在编程时,首先要建立与外设的连接,然后才能实施数据的传输。用户程序首先必须查找设备,打开设备的句柄,然后进行读写和控制操作,最后是关闭设备句柄。用户应用程序的流程如图6-4所示。NNYY成功失败检测USB设备设置设备参数启动A/D模块请求上传数据包报告数据丢失获得有效数据包下组数据就绪显示错误信息返回存储、显示数据延至下组数据包准备就绪启动USB设备图6-4 应用程序流程图用户应用程序的主要功能为:开启或关闭USB设备、检测USB设备、设置USB数据传输管道、设置A/D状态和数据采集端口、实时从USB接口采集数据、显示并分析数据。另外,当系统启动A/D模块后,便会创建两个线程:采样线程和显示存盘线程。采样线程负责将采集数据写到应用程序提交的内存;而显示存盘线程负责给应用程序发送显示和存盘消息。当应用程序接收到此消息后,便从它提交的内存中读取数据并显示和存盘。此处需要注意的是采样线程和显示存盘线程在读写应用程序提交的内存时要保持同步。数据的显示及数据采集的控制都需要由应用程序的人机交互界面来完成,本设计的应用程序界面如图6-5所示,包括对USB设备的打开与关闭、数据采集的开始与停止及采集端口的控制,具体功能由程序内部代码实现。数据采集应用设计中用于数据采集端口选择以及采集数据获图6-5 应用程序的界面取的部分函数片段如下:VOID DataCollectIO

温馨提示

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

评论

0/150

提交评论