单片机和USB接口技术
更新时间:2024-05-02 11:00:01 阅读量: 综合文库 文档下载
基于单片机和USB接口技术的高速数据采集系统的设计
文 摘 数据采集系统是结合基于计算机的测量软硬件产品实现灵活的、用户自定义的测量系统。数据采集包括从信号源采集信号,将其数字化,存储分析并传递到个人PC上。通用串行总线(USB)作为一种新的微机总线接口规范.具有便捷、易扩展、低成本、低干扰等特点,非常适合作为主机和外设之间的通信接口。USB为数据采集设备/仪器与PC机之间的连接提供了一个费用低廉且简单易用的方案。本次毕业设计(论文)设计了一种基于USB的高速数据采集系统的硬件及固件PDIUSBD12程序设计方案。 关键字 数据采集系统;USB接口;单片机
1 方案提出的背景
1.1 研究课题的提出
信息技术与电子技术的迅猛发展,使得计算机和外围设备也得到飞速发展和应用。过去人们单纯追求计算机与外设之间的传输速度,现在纠错能力和操作安装的简易性也成为人们关注的目标。USB通讯技术的出现,使高传输速度、强纠错能力、易扩展性、方便的即插即用,有机的结合在一起。USB设备需要依据USB协议进行数据的解包与打包,底层硬件设备与操作系统之间需要以驱动程序为桥梁。驱动程序以WDM为模型,以DDK为开发工具,以IRP为消息传播载体,来实现与Windows系统底层核心机制向交互的功能。
随着控制系统的日益复杂,所要采集的量也会越来越多。因此寻求一种高速、安全、方便的通讯形式是十分必要的。USB技术虽然出现的时间并不长,但是由于它的种种优点,被越来越多的厂商和用户所接受,出现了USB打印机、摄像头等产品。随着PC机日益广泛的应用,其外设也逐日增多,但PC机接口的数量是一定的,这就限制了PC机挂接外设的数量。在很多应用场合,如工业数据采集,常使用采集板卡来完成工作,采用板卡不仅安装麻烦、易受机箱内环境的干扰,而且受计算机插槽数量和地址、中断资源的限制,不可能挂接很多设备,而通用串行总线可以很容易的实现高可靠性、多点的数据采集。
1.2 USB接口的主要优点
USB接口主要优点为:
1
(1)速度快。USB接口有高速和低速两种方式,主模式为高速模式,速率为12Mb/s, USB2.0版规范允许480Mb/s的速率传输数据,另外为了适应一些不需要很大吞吐量和很高实时性的设备(如鼠标等),USB还提供低速方式,速率为1.5Mb/s。
(2)设备安装和配置容易。安装USB设备不必打开机箱,加减已安装过的设备不用关闭计算机。所有USB设备支持热插拔,系统对其进行自动配置。
(3)易于扩展。通过使用户HUB扩展可接多达127个外设。标准USB电缆长度为3m(5m低速),通过USB或中继器可以使外设距离达到30m。
(4)使用灵活。USB有控制传输(contronl)、同步传输(synchronization)、中断传输(interrupt)、批量传输(bulk)4种传输模式和2种传输速率,可以适应不同设备的需要。
2 系统的原理及其组成
基于USB的数据采集和控制系统的硬件模块主要是由A/D转换器、D/A转换器、微处理器、USB接口控制芯片、串行口控制芯片、放大器等组成。本数据采集和控制系统是以飞利浦 公司的 PDIUSBD12 作为系统的微控制器,管理和控制整个系统。该芯片集成度高,与51单片机兼容,不同的是片内是8KB的flash内存。 整个数据采集和控制系统的总体结构框图如图1所示:
从结构图中可知,模拟输入信号通过信号处理(放大和滤波)后,输出到A/D转换器,微控制器把经过A/D转换器转换后的数字信号通过USB控制芯片输出给计算机,同时可以在计算机上实现数据的显示和键盘控制;另一方面,经过A/D转换器采集到的数字信号可以通过算法实现控制后,经过D/A转换器输出,进而可以对其它设备进行控制;同时,该系统还可以作为一种USB和串行口的转接卡,通过串行口与USB接口实现数据之间的交互,充分利用了USB的快速性和RS-232远距离的优势,实现了资源优势互补,可以通过该板卡实现数据的远程控制和数据传输,既提高了传输速率,又增加了传输距离。
而USB主机及显示部分则通过输出接口在PC机上显示,采用软件来模拟显示输入信号的波形。同时可以控制A/D转换器的启停、数据存取器的存取、USB外设芯片的工作、显示图形的放大和缩小等。
USB数据传输的硬件结构由以下三部分组成:通用USB控制芯片,微处理器,USB接口。它们构成了一个USB数据传输的最小系统。其功能为:USB收发器负责处理所有与USB总线事务有关的任务,如总线唤醒、数据接受/发送、打包、CRC校验等,但该收发器不负责解释这些数据的意义;微处理
2
器负责处理数据、响应主机请求、以及控制USB收发器的工作;内存负责存储和提供数据。
图1 设计数据采集和控制系统原理图
其中,状态监视器是一个高速的单稳态多频振荡器,用来实现掉电和恢复操作的,当系统连续3ms检测不到主机的请求时,系统就会进入挂起状态;当系统从挂起状态退出以后,状态监控器就产生一个正脉冲以复位/唤醒整个系统。
3 数据采集系统的硬件设计
基于USB的数据采集和控制系统主要利用了A/D转换技术、D/A转换技术和USB技术,是伴随着USB技术的迅速发展与新的数据采集技术的发展而发展起来的。采集到的数据通过主机接口(USB口)发送到上位机并实时显示出来,其波形保真性能与A/D转换器的转换速率、分辨率与精度密切相关。A/D转换速率越高,复现的波形的分辨率也就越高;A/D转换器位数越多,精度越高,波形保真性越高。
在选择一个芯片时,用户一般考虑的是芯片含有的功能、价位、是否容易取得以及是否容易开发等因素。一个芯片是否容易开发与开发工具是否容易取得及其品质,设备的驱动程序,有无示例程序代码,以及对设备结构等的了解而定。下面对本系统中芯片的选择作一个简单的介绍。
3.1 芯片的选择
基于USB的外置式硬件电路的设计核心是USB控制器的选择,在进行一个具体的USB设备开发之前,首先要根据具体要求选择合适的USB控制器,整个USB外围设备的设计将围绕该控制器展开。在选定USB控制器以后,如果是带USB接口的单片机,则是一般单片机应用系统的开发;若是USB外
3
设接口芯片,就是USB外设接口芯片与单片机应用系统的接口问题。一般USB接口芯片都支持多种并行总线结构(复用/非复用),可以方便地与多种单片机连接。
目前,市场上可供选择的USB接口芯片很多,按照功能基本上分为两类:一类是纯粹的USB接口芯片或通用USB外设接口芯片(也称USB设备器件);另一类是带有USB接口芯片的单片机(也称USB主控制器)。
(1)带USB接口的单片机(USB主控制器)
这类芯片主要有Cypress公司的CY7C63xxx/CY7C64xxx系列和EZ-USB, Intel公司的8X930/8x931, Philips公司的ISP 1161 (USB 1.1) / ISP I 561 (USB2.0 ), Scanlogic的SL11R以及Motorola的MC68HC908JB8系列等。这种方案的最大好处在于开发难度较小,因为大多数这样的单片机芯片都是基于8051结构或者其它常见的结构,有自己的精简指令集,与单片机类似,熟悉单片机开发的开发者对系统结构和指令集非常熟悉,但其开发一般需要专用的仿真器,对于简单或低成本系统,价格高将会是最大的障碍。
(2)纯粹的USB外设接口芯片(USB设备器件)
这类芯片主要有NS公司的USBN9602/9603/9604, Scan logic的SUIT以及Philips公司的PDIUSBD11/PDIUSBD12 (USB1.1) /ISP1581 (USB2.0)等。纯粹的USB外设接口芯片仅处理USB总线相关事务,必须有一个外部微处理器来进行协议处理和数据交换。这种方案的主要特点是价格便宜、接口形式多样、可靠性高、灵活性大,尤其适合于产品的改型设计,缺点是开发者需要非常熟悉USB协议,还必须用微处理器来控制USB外设接口芯片的工作。
综合比较,PDIUSBD 12是一款性价比很高的USB器件,可使设计者选择最合适的微控制器,减少开发时间、风险及费用,是最实用最快捷的方法实现最经济的USB外设的方案。该芯片支持一个控制端点以及4个额外的端点地址。一个端点的缓冲区可以储存到128个字节,而双缓冲区可以到256个字节。PDIUSBD 12通常用作微控制器系统中实现与微控制器进行通信的高速通用并千示接口,并支持本地DMA传输。PDIUSBD 12完全符合USB1.1规范,并符合大多数器件的分类规格:成像类、海量存储器件、通信器件、打印设备以及人机接口设备。同样地,PDIUSBD 12还适用于打印机、扫描仪、外部存储设备和数码相机等等。另外,该芯片还集成了许多特性,包括SoftConnect, GoodLink、可编程时钟输出、低频晶振和终止寄存器集合,简化USB功能在外设上的应用。
由于51系列的单片机是应用非常广泛的一种微处理器,在其基础上开发了大量的软件包,对其内部结构和工作原理我们都非常了解,故本系统中我们采用8902进行核心程序的设计来实现其所需的功能。A/D选用我们熟悉而且能满足要求的AD0809。而PDIUSBDI2能够完成将数据信号到符合USB规范的信号的转换。为此,我们利用89C52中丰富的软件资源和USB总线技术即插即用、热插
4
拔特性来完成高速数据采集系统。这样可以降低开发成本,缩短开发周期、降低风险。
3.2 PDIUSBD12的性能特点和内部结构
PDIUSBD12是一款性价比很高的USB器件,通常用作微控制器系统中实现与微控制器进行通信的高速通用并行接口,它还支持本地的DAM传输。PDI USBD12(以下简称D12)完全符合USB1. 1规范,它具有的低挂起功好耗连同LazyClock输出可以满足使用ACPI, OnNOW和USB电源管理的要求。D12集成了许多新的特性,包括可编程时钟输出、SoftConnet, GoodLink、低频晶振。 (1)可编程时钟输出:不必考虑电路设计时使用高频晶振产生的EMI问题D12的CLKOUT引脚输出时钟信号,可用作MCU时钟,最低4MHZ,最高达48MHZ. D12内部有倍频电路,外部只需6M晶振即可提供D12自身工作时钟(48MHZ)及输出时钟。
(2)软连接(SoftConnet)技术:芯片内集成有1.5 KΩ的USB上拉电阻,连接此电阻将D+置为高设置为高速USB设备。连接的建立通过外部MCU发送命令来实现,这就允许设备在决定与USB总线建立连接之前完成初始化时序。USB总线连接的连接可以重新初始化而不需要拔插USB电缆。 (3)GoodLink技术:可提供良好的USB连接指示。在枚举中,LED指示根据通信情况间歇闪烁。当成功枚举和配置后,LED指示将一直点亮。USB支持两种信号速率。USB的最高速率是12Mb/s,但它可以工作在1. 5Mb/s的较低速率,同一个USB系统可同时支持这两种模式,但1. 15Mb/s低速率方式主要为了降低对速度要求不高的设备的成本,只支持少数像鼠标这样的低带宽要求的设备。 (4)可编程的时钟频率输出:集成320字节多结构FIFO存储器,具体组成如字节数端点0端点1端点320=16(IN)+16(OUT)+16(IN)+16(OUT)+[64(IN)+64(OUT)] * 2(双缓冲)主端点的双缓冲配置增加了数据吞吐量,并轻松实现实时数据传输;
(5)多中断模式实现批量和同步传输。端点可通过Set Mode命令配置为4种不同的模式,分别为: 模式0 Non-ISO模式(非同步传输) 模式1 ISO-OUT模式(同步输出传输) 模式2 ISO-IN模式(同步输入传输) 模式3 ISO-IO模式(同步输入输出传输)
USB电缆可以允许使用不同长度的电缆,最长可达几米。为了提供可靠的输入电压和适当的终端阻抗,在电缆的每一端带偏压的终端。该终端可以发现任一端口上USB设备的“插入”和“拔除”操作,并能区分全速和低速设备。图2指示了高速USB设备在集线器的终端位置及其所连的功能设备,从中可以看出在电缆的下行端的电阻Rpu是接在D+线上的,在低速设备中,Rpu电阻是接在 D-
5
线上的。PD工USBD12的软连接(SoftConnet)技术使得在电路设计中可以省去此电阻,并可以通过软件设置。
图2 PDIUSBD12的原理图
(1)模拟收发器:集成的收发器接口可通过终端电阻直接与USB电缆相连。
(2)电压调整器:片内集成了一个3. 3V的调整器用于模拟收发器的供电,该电压还作为输出连接到外部上拉电阻。可选择D12提供的带有上拉电阻的软件连接技术。
(3)倍频电路(PLL)片内集成了6M到48M时钟乘法PLL,就可使用低成本的6M晶振。 (4)位时钟恢复:位时钟恢复电路使用4X过采样规则,从进入的USB数据流中恢复时钟。它能跟踪USB规定范围内的抖动和频漂。
(5)串行接口引擎(SIE):串行接口引擎实现了全部的USB协议层,完全由硬件实现而不需要固件的参与。该模块的功能包括同步模式的识别、并行/串行转换、位填充/解除填充、CRC校验/产生、PID校验/产生、地址识别和握手评估等。
(6)存储器管理单元(ME)和集成RAM:在进行数据传输并与微处理器的并口相连时,MMU和集成RAM作为USB间传输的缓冲区,允许MCU以它自己速率对USB信息包读写。 PDIUSBD12内部结构框图如图3所示:
(1)模拟收发器(ANALOG TX/RX ):集成的收发器直接通过终端电阻与USB电缆接口。 (2)电压调整器:片上集成的1个3.3V电压调整器为模拟收发器供电,也提供连接到外部1.5k Q上拉电阻的输出电压。PDIUSBDI2提供集成1.5k 0上拉电阻的SoftConnect技术。
(3)PLL(锁相环):片上集成I个6^-48MHz的倍频PLL,允许使用6MHz的晶振,EMI也由于使用低频晶振而减小。PLL的工作不需要外部器件。
(4)位时钟恢复:位时钟恢复电路用4倍过采样原理,从输入的USB数据流中恢复时钟,能跟踪USB规范中指出的信号抖动和频率漂移。
(5)串行接口引擎(S I E): PHILIPS的SIE完全实现USB协议层。考虑到速度,它是全硬件的,不需要固件(微程序)介入。这个模块的功能包括:同步模式识别、并/串转换、位填充/不填充、CRC
6
校验、PID确认、地址识别以及握手鉴定。
6MHZ 集成上行端口 3.3V 1.5K? D+ D+ RAM D- PLL 位时钟恢复 ANALOG TX/AX PHILIPS SIE 并行内存管理单元 softconnect 电压调整器 和DAM接口
图3 PDIUSBD12的内部框图
(6)Soft Connect:高速设备与USB的连接是靠把D+通过1个1.5k。的上拉电阻接到高电平来建立的。在PDIUSBD 12中,这个上拉电阻集成在芯片内,缺省情况下没有连接到VDD,这个连接是靠外部MCU发一个命令来建立。这使得系统微处理器可以在决定建立USB连接之前完成初始化。重新初始化USB总线连接也可以不用拔掉电缆来完成。
(7)Good Link: GoodLink是靠一个引脚接发光二极管实现的。在USB设备枚举时LED指示灯将立即闪亮:当PDIUSBD 12被成功枚举并配置时,LED指示灯将会一直亮;在PDIUSBD 12的USB数据传输过程中,LED将闪烁;在挂起期间,LED熄灭。这种特性可以使我们了解芯片状态和方便电路调试。
3.3 PDIUSBD12的端点描述
端点(Endpoint)是一个USB设备唯一可以确认的部分,它是主机与设备之间的通信流终点。一系列相互独立的端点在一起构成了USB逻辑设备。每个逻辑设备有一个唯一的地址,这个地址是在设备连上主机时,由主机分配的,而设备中的每个端点在设备内部有唯一的端点号。这个端点号是在设备设计时被给定的。每个端点都是一个简单的连接点,或者支持数据流进设备,或者支持其流出设备,两者不可得兼。端点具有确定端点与客户软件之间通信所需要的传输服务类型的功能,一个端点可通过下列几个方面的特性来描述自己:总线访问频率要求、总线延迟要求、带宽要求、端点号、错误处理的方法、接收或发送包的最大长度、传送类型、数据传输方向。 (1)端点0要求:所有USB设备都需要实现一个缺省的控制方法。这种方法将端
7
点0作为输入端点,同时也将端点0作为输出端点。USB系统用这个缺省方法初始化及一般地使用逻辑设备(即设置此设备)。缺省控制通道支持了对控制的传送,一旦设备接上,并加电,且又收到一个总线复位命令,端点0就是可访问的了。
(2)非0端点要求:设备可以有除0以外的其它端点,这取决于这些设备的实现。
低速设备在0号输入及输出端点外,只能有2个额外的可选端点。而高速设备可具有的额外端点数仅受限于协议的定义,协议中规定,最多15个额外的输入端点和最多15个额外的输出端点。非0端点在被配置前处于未知状态,在设备配置以后才能使用。
D12的端点适用于不同类型的设备,并可通过“Set Mode”命令配置为4种不同的模式:模式0(非同步模式),模式1(同步输出模式),模式2(同步输入模式),模式3(同步输入输出模式)。本设计中只用到了模式0配置,同步模式配置未使用。端点可用来存放从主机接受到或者设备发送来的数据,每个端点都有属于自己的缓冲区。模式0配置下的端点缓冲区如表1所示。
端点2(主端点)是进行吞吐大数据量的主要端点,具有64字节双缓冲区结构,可以减轻传输大量数据的任务:
[1]双缓冲。允许USB与本地CPU之间的并行读写操作这样就增加了数据的吞吐量缓冲区切换是自动处理的这导致了透明的缓冲区操作。
[2]支持DMA直接存储器访问操作。可以和对其它端点的正常I/0操作交叉进行。 [3] DMA操作中的自动指针处理。在跨过缓冲区边界时不需要本地CPU的干预。 [4]可配置为同步传输或非同步批量和中断传输。
表1 端点缓冲区配置(模式0)
端点号 端点索引 传输类型 端点类型 方向 缓冲区长度(字节) 0 0 1 1 2 3 2 4 5 控制输出 控制输出 普通输出 普通输出 普通输出 普通输出 默认 默认 普通 普通 普通 普通 输出 输入 输出 输入 输出 输入 16 16 16 16 64 64
8
3.4 PDIUSBD12的指令集
PDIUSBD12有自己的专用指令集,用于设置USB芯片、读取USB芯片的状态和控制USB总线传输。D12芯片内有一系列的寄存器对应着这些指令,微处理器把要设置的值按字节写入D12的这些寄存器,或者从D12的这些寄存器中读出USB总线的状态。D12有三种基本的类型的命令:初始化、数据流和通用命令。
(1)初始化命令
初始化命令在USB总线进行枚举处理时使用,这些命令用于使能端点的功能,还可用来设置USB分配的地址,包括:设置地址/使能、设置端点使能、设置模式(设置分频系数、软连接、端点模式以及中断模式等)、DMA设置等命令。
表2初始化命令指令集
命令名 接收者 编码 数据 初始化命令 设置地址使能 设置端点使能 设置模式 设置DMA (2)数据流命令
数据流命令用于管理USB端点和外部微控制器之间的数据传输,D12通过微控制器中断初始化大量的数据流。微控制器利用这些命令访问和决定端点的FIFO是否含有有效的数据。包括:读中断寄存器、选择端点、读最后处理状态寄存器、读缓冲区、写缓冲区、使缓冲区有效、清除缓冲区、设置端点状态、应答建立等命令。
表3数据流命令指令集
数据流命令 读中断寄存器 选择端点 器件 控制输出 控制输入 端点1输出 端点1输入 F4h 00h 01h 02h 03H 读2字节 读1字节(可选) 读1字节(可选) 读1字节(可选) 读1字节(可选) 器件 器件 器件 器件 D0h D8h F3h FBh 写1字节 写1字节 写2字节 写/读1字节
9
读最后处理状态 读缓冲区 写缓冲区 设置端点状态 应答设置 缓冲区清零 使缓冲区有效 端点2输出 端点2输入 控制输出 控制输入 端点1输出 端点1输入 端点2输出 端点2输入 选择的端点 选择的端点 控制输出 控制输入 端点1输出 端点1输入 端点2输出 端点2输入 选择的端点 选择的端点 选择的端点 04h 05h 40h 41h 42h 43h 44h 45h F0h F0h 40h 41h 42h 43h 44h 45h F1h F2h FAh 读1字节(可选) 读1字节(可选) 读1字节 读1字节 读1字节 读1字节 读1字节 读1字节 写n字节 写n字节 写1字节 写1字节 写1字节 写1字节 写1字节 写1字节 无 无 无 (3)普通命令:包括发送恢复、读当前帧数目两个命令。
表4普通命令指令集
普通指令 发送恢复 读当前桢树木 F6h F5h 无 读1或2字节 3.5 PDIUSBD12的管脚配置
PD12共有28个管脚,具有S028和TSSOP28两种封装形式,管脚图如图4具体的管脚功能如表5:
10
图 4 PBIUSBBI2的管脚配置
3.5 A/D与单片机接口电路
ADC0809允许的最大时钟频率为1280kHz,主要管脚功能如下:
INO-IN7: 8路模拟量输入端,可从这8个脚输入0V-5V待转换的模拟电压ADDA,ADDB,ADDC:管道地址输入端。通过编码的方式来实现管道地址的选择。
CLOCK:时钟输入端。ADC0809只有在时钟脉冲信号的同步下才能进行A/D转换时钟频率越高转换得越快。典型时钟频率是640kHz。
ALE:地址锁存允许端。
START:启动脉冲输入端。在时钟脉冲频率为640kHz时,START脉宽应大于100ns-200ns。 EOC:转换结束信号端。在A/D转换期间,EOC=0表示转换正在进行,输出数据不可信,转换完毕后立即使EOC=1表示转换已经完成,输出数据可信。
D7-DO:转换所得八位输出数据,D7是最高位,而DO是最低位。
OE:允许输出端。OE端控制输出锁存器的三态门。当OE=1时,转换所得数据出现在D7-D0脚,当OE-0时D7-DO脚对外是高阻抗。
89C52通过P1.4和读、写控制线来控制转换器的模拟输入通道地址锁存、启动和允许输出。编程时注意启动AD0809后,EOC在一定时间才能变成低电平。
11
表5 PD12的管脚功能
12
图5 ADC0809与89C52的接口电路
3.6 PDIUSBD12与单片机接口电路
PDIUSBD12与89C52的连接电路如图6所示。89C52的ALE和PD12的ALE相接,表示采用单独地址和数据总线配置。其AO脚接高电平用于控制命令或数据输入到PDIUSBD I2,也就是编程中outportcmd()和outportdata()函数。此外89C52的多位地址/数据复用总线PO可直接与PDIUSBD12的数据总线相连,CLKOUT时钟输出为89C52提供时钟输入。在该数据采集系统中,用ADC0809采集0-5V的电压信号,经A/D转换后将数字量存入预先设定的缓冲区里,利用接口芯片D12将数据送至USB总线上。设备应用程序从缓冲区里取数据显示,通过数值来说明USB接口的采集速率比一般的串行总线速度高。当前端的电压信号不断变化的同时,在PC上可以观察到数据的变化,这就表明利用USB接口在数字采集系统中进行数据传输是能够实现的,而且能够很好的实现,硬件电路原理图祥见附图。
4 系统软件
4.1 PDIUSBD12的固件编程
4.1.1 PDIUSBD12的固件编程思想
PDIUSBD 12是一款带有并行总线和局部DMA传输能力的高速USB接口器件,固件设计的目标
13
就是使PDIUSBD 12在USB上达到最大的传输速率。外围设备例如打印机、扫描仪、外部的海量存储器和数码相机都可使用PDIUSBD 12在USB上传输数据。这些设备的CPU要忙于处理许多设备控制和数据以及图像处理等任务。PDIUSBD 12的固件设计成完全的中断驱动。当CPU处理前台任务时,USB的传输可在后台进行。这就确保了最佳的传输速率和更好的软件结构,同时简化了编程和调试。
图6 PDIUSBD12与89C52的连接电路
图7 前后台工作原理
后台ISR(中断服务程序)和前台主程序循环之间的数据交换通过事件标志和数据缓冲区来实现。其原理图如图7所示。例如,PDIUSBD12的批量输出端点可使用循环的数据缓冲区,当PDIUSBD12从USB收到一个数据包,那么就对CPU产生一个中断请求,CPU立即响应中断。ISR中固件将数据包从PDIUSBD12内部缓冲区移到循环数据缓冲区,并在随后清零PDIUSBD12的内部缓冲区以使能接收新的数据包。CPU可以继续它当前的前台任务直到完成,例如打印当前页。然后返回到主循环检查循环缓冲区内是否有新的数据并开始其它的前台任务。
由于这种结构,主循环不关心数据是来自USB串口还是并口,它只检查循环缓冲区内需要处理
14
的新数据。这个概念很重要,这样主循环程序专注于数据的处理而ISR能够以最大可能的速度进行数据的传输。
相似的,控制端点在数据包处理时采用了同样的概念。ISR接收和保存数据缓冲区中的控制传输并设置相应的标志寄存器。主循环向协议处理程序发出请求。由于所有的标准器件,级别和厂商请求都是在协议处理程序中进行处理,ISR得以保持它的效率,而且一旦增加新的请求只需要在协议层进行修改。
4.1.2 PDIUSBD12固件编程的结构
固件的积木式结构如图8所示,图中箭头表示数据传输方向。
主循环:采集数据,发出USB请求,和处理USB总线事件和用户功能等等 MAINLOOP.C 中断服务程序 标准请求处理 厂商请求处理 ISR. C CHAP 9. C PROTODMA.C PDIUSBD12命令接口 D12CI. C 硬件提取层 EPPHAL. C
图8 固件结构和数据流向
下面是事件标志“EPPFLAGS”和Setup包数据缓冲区“CONROL_ XFER”的结构 体:
//事件标志
typedef union_ epp_ flags
15
{
struct_flags {
unsigned char timer:1; unsigned char bus-reset:1; unsigned char suspend:1; unsigned char setup_packet:1; unsigned char remote_wakeup:1; unsigned char in_isr:1; unsigned char control_state:2; unsigned char configuration:1; unsigned char verbose:1; unsigned char epl_rxdone:1; unsigned char setup_dma:1; unsigned char dma_state:2; }bits;
unsigned short value }EPPFLAGS;
//USB设备请求寄存器 typedef struct_ device_request {
unsigned char bmRequesetType; unsigned char bRequest; unsigned short wValue; unsigned short windex; unsigned short wLength; }DEVICE_ REQUEST; //Setup包数据缓冲区 typedef struct_control_ xfer {
16
DEVICE_ REQUSET DeviceRequest; unsigned short wLength unsigned short wCount; unsigned char*pData;
unsigned char dataBuffer[MAX_ CONTROLDATA_ SIZE]: }CONTROL_ XFER;
4.1.3 PDIUSBD12固件编程的实现
1 中断服务程序-ISR.C
这部分代码处理由PDIUSBD12产生的中断,它将数据从PD工USBD12的内部FIFO取回到CPU 存储器并建立正确的事件标志-通知主循环进行处理。在ISR的入口固件使用D12_ Read Interrupt Register( )来决定中断源,然后将进入相应的子程序进行处理。PDIUSBD12的固件完全由中断驱动ISR的流程图8如下所示:例如,在OUT数据阶段的建立包时,工SR将建立包和OUT数据都存入\”缓冲区中,然后将“setup_packer”标志就到主循环这将减少主循环不必要的服务时间,并且简化了主循环的编程。总线复位和挂起并不要求在ISR中进行特殊的处理。ISR只需在EPPFLAGS中设置“bus_ reset”或“suspends”标志位,然后退出即可。
ISR与前台主循环通过事件标志EPPFLAGS和数据缓冲区CONROL_ XFER进行通信。
主循环和ISR之间的任务分配是这样的:ISR从D12收集数据而主循环对数据进行处理。当工SR收集了足够的数据时,它只通知主循环己经准备好等待处理。
4.1.4 控制端点处理程序
控制传输总是在SETUP阶段开始,之后为可选的DATA阶。然后在STATUS阶段结束。如图10所示为控制端点不同状态的转变。固件使用这3种状态来正确地处理控制传输。
如图11所示为控制输出处理程序。为了说明它,举一个主机请求的例子叫做“Get Descriptor()”的标准设备请求。
当USB器件D12接收到建立包,将产生一个中断通知MCU,微控制器响应中断,通过读D12中断寄存器决定包是发到控制端点还是普通端点。如果包是送往控制端点,MCU要通过读D12的最后处理状态寄存器进一步确定数据是否是一个建立包,第一个包必须是建立包。
17
中断服务 中断服务 读取D12中断寄存器 yes 设置总线复位标志 总线复位 挂起改变? yes 设置挂起改变标志 No DMA传输结束? yes DMA传输结束处理 No 控制输入? yes 控制端点发送数据处No 控制输出? yes 控制端点接收数据处No 端点1输入? yes 端点1发送数据处理 No 端点1输出? yes 端点1接收数据处理 No 端点2输入? yes 端点2发送数据处理 No 端点2输出? yes 端点2接收数据处理 No yes 中断服务结束 图9 中断服务程序流程
18
输入 发送 无数据控制返回状态 空闲 接收 输出
图10 控制端的安处理程序转换
从下面的流程图10中可以看出,MCU需要通过选择控制输出端点提取建立包的内容来决定端点是为满还是空。如果控制端点为满,MCU将从缓冲区读出内容并将其存入存储区。之后,它将从存储区使主设备请求生效。如果是一个有效的请求,MCU必须向控制输出端点发送应答建立命令以重新使能下一个建立阶段接下来MCU需要证实控制传输是控制读还是写,这可以通过读建立包中bmRequestType的第8位来实现。如果控制传输是一个控制读类型,那就是说器件需要在下一个数据阶段向主机发回数据包。MCU需要设置一个标志以指示USB设备现在正处于传输模式,即准备在主机发送请求时发送数据。
建立阶段结束之后,主机会执行数据阶段。D12等待接收Control_ In包,过程如下面的流程图12“控制输入处理程序”所示。MCU首先需要通过读D12的最后处理状态寄存器清零Control_ In中断标志位,接着MCU再确认D12处于传输模式后进行数据包的发送。
19
由于D12的控制端点只有16字节FIFO,如果传输的长度大于16字节,MCU在传输阶段就必须控制数据的数量。如流程图11所示,MCU必须检查要发送到主机的当前和剩余的数据大小。如果剩下的字节数大于16, MCU将先发送16字节并用减去参考长度(要求的长度)16。
当下一个Corntol_ In标志来到时,MCU将确定剩余的字节是否为零。如果己经没有数据要发送,MCU需要发送一个空的包以指示主机数据已经发送完毕。如果建立包为Set-Descriptor( )请求,那么建立包中的控制传输将指示此包为控制写类型。在执行完Set_ Descriptor请求过程后,MCU等待数据阶段。主机发送一个Control_ Out标志,MCU从D12缓冲区中减去数据。流程现在处于Control_ Out处理程序的右端。MCU首先确认D12是否处于USB_ Receive模式。然后MCU通过检查选择控制输出端点确认缓冲区是否己满并将数据从缓冲区读出。
控制输入入口 读端点处理状态 清中断标NO 发送状态 Yes 剩下数据〉16字节NO 剩下0 字节 NO Yes 发送一个空包 设置为等待状态 Yes 发送16个字节数据 发送剩下数据 设置为等待状子程序结束
图11 控制输入处理流程
4.1.5 普通端点处理程序
端点1和端点2这里定义为普通输入输出。
普通输出端点配置为从主机接收数据包。当MCU从主机接收Generic_ Out标志(通过读中断寄存器识别)时,D12中断位必须清零。选择端点将清零Generic_ Out缓冲区,接下来MCU需要确认
20
控制输出入口 读端点处理状态 清中断标志 NO NO 建立包? 处于接收状态 Yes Yes 读取断电数据并保 读取端点数据并保存 NO NO 接收完接收数据出错 Yes 毕 ? Yes 设置为等待状态 对控制输入端点和控制输设置建立包标志 出断电进行建立数据对应设置发送NO 状态,设置读取要求? 建立包标志标志 Yes NO 设置等待带数据的要求: 状态,设置建立包标Yes 停止控制端点 NO 志标志 数据长度出错 设置为等待状态 Yes 设置等待状态 设置等待状态 子程序结束 图12 控制输出处理流程
数据的长度并把数据读出,然后设置收到数据标志位bEPPflag。
21
对于普通输入端点的中断,只要读取端点号的最后处理状态寄存器来消除中断寄存器的相应位,把状态清零就可以了。Generic_ In标志是在发送完数据后才产生的,当还有数据要发送时可以在中断程序里接着继续发。注意:这里的数据发送完成标志是指在主机的一个有效的IN事务后才发生的。当主机发出IN事务而设备没有送出数据时,是不会产生中断的。
4.1.6 主循环--MAINLOOP.C
MCU一旦上电就需要初始化其所有端口、存储区、定时器和中断服务程序。之后MCU将重新连接USB,包括将Soft_ Connect寄存器设置为ON。这些过程是很重要的,因为它确保了在MCU准备好服务D12之前D12不会进行操作。
在主循环程序中MCU对键盘进行轮询。如果任何一个特定的按键被按下,键处理命令将执行子程序并返回主循环。增加该子程序的目的仅仅是为了调试。1ms定时器用于激活该子程序以检测在评估板上的任何按键。当轮询到了检测建立包时,它确认建立标志在之前是否被中断服务程序所置位。如果建立标志置位,它将向协议层发送一个器件请求进行处理。下面所示的流程图13是主程序在前台执行的流程。
4.1.7 PDISBD12固件编程的关键注意事项
(1)在编写PDIUSBDI2固件程序时需要注意:
[1]单片机的中断应设置为电平触发:中断后一定要读上次传输状态寄存器(命令40-45H),以清除中断寄存器中的中断标志。这样,PDIUSBD12的中断输出才能变回高电平。这一点非常重要。 [2]在接收到Setup包后,一定要调用ACK setup命令重新使能端口0。 [3]在向IN端点写完数据后,一定要调用Vali date Buffer(命令FAH ), 指明缓冲区中的数据有效,可以发送到主机。
[4]读完数据后,一定要调用Clear Buffer(命令F2H),以保证可以接收新 的包。
[5]可以通过调用Read Chip ID(命令FDH)检查PDIUSBDI2是否工作。该 命令要读两个字节数据。
22
Main Loop 初始化I/O口、定时器和中断,重新连接到USB总线 循环 No 定时器事件标志? Yes 更新LED状态采集按键状态 No 总线复位? No 挂起改变? No 建立包? Yes 总线复位处理 Yes 挂起改变处理 Yes 调用协议处理程序
图13 主循环流程图
(2)USB初始化过程为: [1] Set Address Enable;
[2] Set Endpoint Enable(此时LED亮); [3] Disconnect; [4]delay(1-2 s);
[5] Connect(即用43h参数调用Set Mode,此时LED灭); [6]Read Interrupt Register;
完成初始化工作后就可作其它的前台工作了,并在前台判断是否有Setup包(通过一个变量,当中断服务程序检测到有Setup包时,设置该变量),然后执 行响应的控制传输。
23
4.2 USB设备驱动程序的开发
USB总线设备驱动程序必须遵循由Microsoft为Windows 98及其以后版本所定义的Win32驱动程序模型。这些驱动程序就是WDM(Windows Driver Model),
其扩展名一般为.sys(当然其他文件类型也可以使用.sys扩展名)。它与VXD和NT式的驱动程序不同,它是内核态程序,采用了分层处理的方式,不需要直接和硬件打交道。
与其它的低层驱动程序一样,WDM驱动程序负责在一个特权层实现应用程序与操作系统的通信。一个WDM驱动程序可以允许或者否定一个应用程序对一个设备提出的访问。例如,一个游戏杆的驱动程序可以允许任一个应用程序来使用个游戏杆,或者它可以为某个应用程序保留以供独立使用。Windows为其他低层设备驱动程序和WDM驱动程序所保留的能力还包括对硬件中断的响应和DMA传输。
设计WDM设备驱动程序模型是为了给运行在Win 98及其以后版本(包括
Windows 2000系统)下的任一设备提供一个通用的驱动程序模型。WDM定义了一个基本模型处理所有类型的数据。例如,USB总线类驱动程序为所有USB总线设备提供了一个抽象的模型,并具有由所有客户驱动程序预先定义的接口。有了对所有设备类型都相同的核心驱动程序模型,驱动程序开发就可以更容易地从一种类型的设备转移到另一种类型的设备上去,这也意味着驱动程序模型的内核实现可以是固定的。如果每一种类型的设备都具有不同类型的驱动程序模 型,那么开发工作无疑会变的很繁琐。
WDM驱动程序由两种工作模式,即内核模式和用户模式。
(1)内核模式:当CPU运行于内核模式时,一切程序的指令都可以运行,即所
运行的程序没有任何操作系统的限制。任务可以运行特权级指令,对任何I/O设备有全部的访问权,还能够访问任何虚地址和控制虚拟内存硬盘。这种模式对应于Intel 80x86处理器上0级环。
(2)用户模式:在这个模式中,硬件可以防止特权级指令的执行,并进行内存和I/空间引用的检查,这就需要操作系统限制执行的任务对各种I/O操作进行访问,并捕捉违反系统完整的行为。在用户模式中,如果运行的代码不通过操作系统中的某种机制,就不能进入内核模式。在Intel 80x86处理器上,该模式对应于3级环。
USB驱动程序的设计实现了类设备驱动程序,它把一类有相似属性和提供相似
功能服务的设备都定义到一个给定的设备类中,这些常用的设备类拥有一个通用的类设备驱动程序,该驱动程序为所有这个类别的设备提供驱动,这个类定义为主机和客户软件提供了使用的信息,以确定一个设备如何被访问和控制。常见的设备类有:HID设备类、通信设备类、监视设备类、物理反
24
馈设备类、打印机类、集线器类、海量存储设备类和音频设备类等。
USB总线设备驱动程序使用标准Windows系统USB类驱动程序访问USBDI(USB驱动程序接口)。USBD.sys文件就是Windows系统中的USB类驱动程序,它使用UHCD.sys来访问通用的主控制器接口设备,或使用OHCI.sys访问开放式主控制器接口设备。USBHUB.sys是根集线器和外部集线器的USB总线驱动程序。
4.2.1 驱动程序开发工具的介绍
Windows DDK Windows DDK是Microsoft公司提供的一个开发Windows驱动程序的工具,是Microsoft出品的设备驱动程序开发工具包DDK(Device Developer Kit),它有Windows98 DDK和Windows2000 DDK两个版本。前者能够开发Windows95/98/Me/NT下的VxD, KMD和WDM驱动程序,后者可以开发Windows98/Me/NT/2000下的KMD和WDM驱动程序。利用DDK开发Windows驱动程序是一种比较传统的方法。
它要求设计者必须对Windows的体系结构、设备驱动程序的结构、虚拟机管理器(VMM)以及Intel CPU体系结构有深入的了解,而且需要保护模式的汇编语言编程经验。因此,在实际的开发过程中,DDK一般不常被人们所使用,取而代之的是另外两种工具:DriverStudio和WinDriver
DriverStudio是由Compuware公司提供的驱动程序开发工具,简化了Windows驱动程序的开发、调试和测试,完整的版本是由SoftICE , DriverWorks ,
DriverNetWorks、VtoolsD, BoundsChecker, TrueTime Driver, TrueCoverage Driver等工具组成。 WinDriver是美国KRFTech公司出品的用于编写驱动程序的另一种工具包。它包括代码生成器WinDriver Wizard, WinDriver Debugging Monitor, WinDriver发行包和一些公用程序和实例。WinDriver支持ISA, EISA, PCI, Plug&Play和DMA,它能自动地发现硬件并产生驱动程序,不需要牵涉到很低层的东西即可在很短的时间里编出驱动程序。使用WinDriver的优点是:开发者并不需要熟悉任何内部操作系统或kernel programming或DDK及任何驱动程式。WinDriver同时允许开发者能在自己所熟悉的开发环境下,利用使用者模式(User Mode)来开发出所需的驱动程序,如使用MSDEV Visual C/C++, Borland C++Builder, Delphi或任何Win32编译器。使用WinDriver所开发的驱动程式均可用于Windows XP, Windows 9x, NT/2000, CE, Linux and Solaris等平台。
4.2.2 驱动程序中的基本概念
驱动程序的五层模型
25
(1)用户应用程序:用户编写的,通过驱动程序与硬件打交道的可执行文件:
(2)I/0管理层:负责用户应用程序和驱动程序之间的数据交换,并通过IRP(IO请求包)来完成; (3)驱动程序:在装了DDK后,可以自行编写驱动程序。在驱动程序中,不同
的部分、级别都是通过IRP来交换数据的。当一个例程处理完一个IRP后,它也设置好状态信息,然后将此IRP返回;
(4)硬件抽象层(HAL ): Windows管理,这样用户在写驱动程序的时候会灵活的多,而且HAL还提供了把同一个驱动程序解释到不同平台的功能; (5)硬件:完成某种功能的外围设备。
4.2.3 USB驱动程序体系结构
为了便于对驱动程序的开发、了解,Windows对USB驱动程序体系结构进行了
详细的说明,对不同软件部分进行了十分清楚的划分,如图14所示。其中USB总线客户软件仅仅包含了用来控制不同USB总线外设的设备驱动程序。USB总线客户软件会通过一个Windows所定义的软件接口与根集线器驱动程序进行通信,而USB总线根集线器驱动程序则要通过包含在USBD中的USBD1(通用串行总线驱动程序接口)实现与通用串行总线驱动程序((USBD)的通信。然后,USBD会选择三种主控制器驱动程序之一同其下方的主控制器进行通信。最后,主控制器驱动程序会直接实现对USB物理总线的访问。
像Windows NT环境下的设备驱动程序一样,USB总线驱动程序软件堆栈内的层间通信也使用了一个称为IRP(1/O请求包)的机制。一个设备驱动程序要与另一个设备驱动程序进行通信时,它会用IRP结构来组装一个请求,并把该请求传递到下一层。下一层接受了该请求之后,会向发送方发送一个应答(ACK)握手信号。重复该过程,就可以在不同分层结构之间实现通信了。
虽然不同的软件分层通信时要使用IRP,而实际的 USB总线请求却存放在一个被Microsoft称为通用串行总线请求URP结构内。在URP内包含了不同的域,在不同的软件分层结构中,每一个分层会使用不同的域进行处理操作。
客户软件
USB客户软件也是一种设备驱动程序,位于根集线器驱动程序之上,通过定义的USB总线接口访问其下方的USB总线软件,Windows USB接口提供了一系列供访问的USB总线接口函数。具体的使用情况可参考相应版本的Windows操作系统的设备驱动程序开发包(DDK)中的文档。
26
图14 USB驱动体系 (1)根集线器驱动程序
从图14可以看出,根集线器驱动程序位于USBD之上。在一个支持USB系统主机中,都会有一个根集线器,用来提供USB总线接口。所有的USB设备,包括USB功能设备和USB集线器都必须以一定方式接入一个USB根集线器。在Windows环境中,所有的客户驱动程序都可以通过指向这一根集线器驱动程序的接口来和所有接入的USB设备进行通信。另外,还有一种方法就是客户驱动程序通过USBDI而直接与USBD进行交互。
(2) USB驱动程序(USBD)
通用串行总线驱动程序(USBD)是USB总线系统中负责管理通用串行总线的工作且位于主机上的一个软件,提供了对USB设备的抽象和USBD上的客户同USB设备上的功能模块之间所存在的数据传输的抽象。USBD负责控制所有的USB协议操作和高层中断处理控制。
USBD为客户软件(设备驱动程序)提供了访问设备的一组接口,客户软件只能通过它来访问USB总线,并构建URB通过USBDI发送下去。对客户软件而言,它就是USB总线的底层。
(3)UHCD、OHCI、EHCI
Windows为不同的USB设备供应商提供了三种管理系统中的USB主控制器的软件接口,即通用主控制器(Universal Host Controller Driver, UHCD)和开放式主控制器接口(Open Host Controller
27
Interface, OHCI)和增强式主控制器接口EHCI(Enhanced Host Controller Interface)。其中EHCI是专为针对USB2.0提出的。
HCD(Host Controller Driver)通过主控制器来实现和物理总线的通信,负责所有USB物理层的总线操作。Windows在USB总线和主控制器之间又放置了一个PCI总线枚举器,在系统中,由PCI总线枚举负责在其检测到系统中存在一个通用串行总线时装载适当的USB总线驱动程序。
4.2.4 USB设备驱动程序设计
USB设备驱动程序是支持即插即用功能的标准WDM(Windows DriverModel)驱动程序,它与VXD和NT式的驱动程序不同,它是内核态程序,采用了分层处理的方式,不需要直接和硬件打交道。当USB设备插入USB集线器时,USB集线器驱动程序会检测到一个新设备的插入。PnP管理器使用厂商ID或设备类信息选择要运行的驱动程序。一般情况下,调用驱动程序的AddDevice例程,并发出其他的PnP IRP 。USB设备驱动程序决不会收到任何硬件资源(如端口或中断),因为USB类驱动程序处理所有的低层I/O。
在编写驱动程序时,需要包含以下几个头文件:
USBl00.h:包含有USB设备驱动程序中所用到的各种常量和结构; USBioctl.h: IOCTL的定义,包括各种驱动程序通用的数据结构; USBdlib.h: URB构造和各种例程,定义了USBD所输出的服务;
USBdi.h: USBDI例程,包括URB结构、各种驱动程序通用的数据结构。 在编译驱动程序时,build将会在欲编译的驱动程序所在的目录中寻找一个叫
sources的文件,这个文件将告诉编译程序,应该怎么做。在该文件中,以下五个内容是必须包含的: (1) TARGETNAME:表示编译出的结果名称;
(2) TARGETTYPE:表示编译出的结果类型(例如驱动程序);
(3) TARGETPATH:表示在当前目录(sources文件所在的目录)中建立一个什么名称的子目录来保存中间结果;
(4)TARGETLIBS:表示编译过程中需要那些库; (5) SOURCE:表示需要编译那些文件。 在本系统的驱动程序开发中,主要的分发例程有:
DriverEntry():是驱动程序的入口,主要完成各种初始化操作,同时把注册表复制到一个全局变量中,并告诉系统那些IRP由哪个例程处理,这部分被I/O系统直接调用。
28
USB_ D 12_Create():主要是用来在USB设备和驱动程序之间建立连接,当以打开文件的名义打开设备准备读写时,调用它。
USB_ D 12_pnp():处理即插即用的操作。 USB_ D 12_power():处理和电源相关的操作。
USB_ D 12_ Read()/USB_ D12_ Write():用来读写数据,把数据读到数据缓存区或把数据从缓存区写到端点专用寄存器,由此发往USB主机。
USB_ D 12_DeviceloControl():设备操作,一般是用来对硬件发出一些控制命令。 USB_ D 12_closeHandle():当用户关闭文件时,调用它清扫系统,卸载驱动程序。。 USB_ D 12_ AddDevice()第一次安装硬件(插上板子)时使用
USB_ D 12_ DriverUnload():卸载硬件时使用,当硬件完全卸载后,调用它清理此硬件在系统中留下的痕迹,释放全局变量中注册表路径字符串所占的内存。
以上是驱动程序中的几个重要的分发历程,只有上述这些例程正确执行,编译生成的*.SYS文件才是有效的,驱动程序才可以使用,设备才能和上位机通信。设备插上主机后,主机发现新硬件并提示安装驱动程序。
4.2.5 USB设备驱动程序的调用
USB设备通过客户驱动程序与设备打交道并响应内核或用户应用程序请求。在内核级,命令由客户驱动程序使用内部的IOCTL发送给USB系统,而不能用于用户态应用程序。最有用的IOCTL是IOCT_ INTERNAL USB_ SUBMIT_ URB,它发出USB请求块(URB)给系统USB驱动程序。URB允许发出多个功能调用给USB系统,通过URB进行与USB设备的大多数交互。用户只需在相应的分发例程中构造URB块(读取USB的描述表、选择配置和接口),并根据设备所支持的传输类型和设备自有的命令字将其通过USBDI发送下去,由USB类驱动程序处理所有的低层I/O,从而实现对USB设备的控制。
USB总线驱动程序由操作系统提供,它位于USB功能驱动程序的下面,负责与实际的硬件打交道,实现烦琐的低层通信。USB功能驱动程序由设备开发者编写,位于USB总线驱动程序的上面,不与实际的硬件打交道,而是通过向USB总线驱动程序发送包含URB (Request Block, USB请求块)的IRP (I/O Request Packet,IRP请求包),来实现对USB设备信息的发送或接收。采用这种分层驱动程序的方法有两个优点:
(1)多个USB设备可以通过USB总线驱动程序来协调它们的工作;
29
(2)编写分层驱动程序较之编写单一驱动程序相对简单,且可以节省内存和资源,不易出错。 整个驱动程序模型如图15所示。
图15 USB设备驱动程序的调用
USB设备驱动程序的工作原理可以通过图15单描述。若应用程序想对设备进行I/O操作,它便使用Windows API函数对WIN32子系统进行WIN32调用。此调用由I/O系统服务接收并通知I/O管理器,I/O管理器将此请求构造成一个合适的I/O请求包(I/O Request Packet IRP)并把它传送给USB功能驱动程序。USB功能驱动程序接收到这个IRP以后,根据IRP中包含的具体操作代码,构造相应的USB请求块 把该URP放到一个新的IRP中,并通过USBDI传送给USB驱动程序(USBD), USBD驱动程序根据IRP包含的不同传输类型将IRPs分解开来,并调用主控制器驱动程序来处理IRPs,同时将处理结果返还给I/O管理器,并最终返还给应用程序,从而实现了应用程序对设备的读写操作。
在此过程中,应用程序通过文件名(即设备名)和文件描述符找到设备驱动程序,驱动程序通过设备描述符和设备标识使用设备,三者为一链式调用方式。
功能驱动程序除负责处理应用程序的I/O请求外,还要处理PnP管理器发送给它的PnP请求(如设备启动请求IRP_ MN_ START_ DEVICE,设备删除请IRP MN REMOVE DEVICE等)。通过对这些请求的处理,USB功能驱动程序可支持设备的热插拔和即插即用功能。
30
结束语
通过实际系统的设计、开发和调试,我们觉得对于现在各种以串行口、并行口为接口的产品,都可以设计成带USB接口的产品。在硬件设计时,只需把串口控制芯片或并口控制芯片换成USB接口芯片即可。目前USB芯片的价格也不是很高,一般的只需十几元或几十元人民币即可,这样不仅没有增加成本,而且极大提高了数据传输速度,同时也使得系统具有USB所具有的支持即插即用、热插拔、灵活、方便等技术优势,极大地改善了系统的性能,给用户带来了极大的方便,尤其是适用于产品改造型设计。USB接口完全可以代替串行口和并行口实现数据传输。
限于我的水平和开发条件,该USB数据采集系统还有待改进和完善的地方。从实用性的角度来说,本系统的数据库管理软件还需进一步完善,操作界面可以采用更直观的图形化按钮;将AD转换的内核做到FPGA当中,将采集设备中的数字器件集成到FPGA中,会大大的简化电路,并且有利于将来系统的升级。也可以把 USB控制的核一并做到FPGA中,则电路将会更加简单,不过对于FPGA的工作量就会比较繁重一些。
USB2.0的出现极大地提高了USB的通信速度,但是,随着USB应用领域的逐渐扩大,人们对USB的期望也越来越高,希望USB能应用在没有PC的领域,这也正是USB的一个致命的弱点。为了解决USB的这一缺陷,USB组织在2001年12月正式发布了OTG 1.0协议,OTG全称为USB On-The-Go,是USB主机嵌入式化的一种实现。USB OTG技术己成为业界的热点并有着非常好的发展前景。OTG 1.0是USB2.0的补充协议,基本上符合USB2.0规范。符合OTG 1.0规范的设备完全抛开了PC,既可以作为主机,也可以作为外设,它可以与其他OTG设备直接实现点对点(Pear to Pear)通信。
另外,无线USB(WUSB)技术的提出是USB技术的又一革命性创新。2004年春季Intel技术峰会(美国)上,无线USB促进联盟(Wireless USB Promoter Group)宣布成立。这个联盟包括7家有相当实力的业界巨擎:Agere Systems惠普,英特尔,微软,NEC,飞利浦半导体和韩国三星。这个联盟的每个成员都被授权可以制订WUSB的详细规格。在详细规格上,已经达成共识的是每秒480Mb的传输速率,这一规格和有线的USB 2.0设备间高速传输规格维持一致。
WUSB将会提供适当的带宽,来满足一般的有线USB设备的连接要求。WUSB的带宽为480Mb/s,和现在的有线USB2.0标准是相同的。WUSB的目标是象无线电的发展一样,通过各种新的技术改进,逐步由开始的480Mb/s,达到l Gb/s的极限。当在设备之间或者设备与主机之间连接时,最大的距离不能超过10米,才能够保证高质、高速互相传输。
未来,WUSB将会向整合的方向发展,变成一个标准芯片组的一部分。如同有线的USB技术一
31
样,无线的WUSB将会提供一些USB所不能提供的功能。无线WUSB联盟正在努力的制订一个标准的规格书,同时,工业上也在开发WUSB产品,为消费者提供更好的方便性和移动性。无线USB的实现将把人们的生活全面带进无线环境当中。
参考文献
1 2 3 4 5 6 7 8 9 10 11 12
田良,王尧,黄正瑾,陈建元,束海泉·综合电子设计与实践·南京:东南大学出版社,2002 谢自美·电子线路设计、实验与测试·武汉:华中科技大学出版社,2000 康华光,邹寿彬·电子技术基础(数字部分) ·北京:高等教育出版社,2000
孙涵芳,徐爱卿·MCS-51/96系列单片机原理及应用·北京:北京航空航天大学出版社,1996 吴产乐·微机系统与接口技术·武汉:华中科技大学出版社,2002 吴延海·微型计算机接口技术·重庆:重庆大学出版社,1997
吕杨,刘瑞敏,邹金慧,蔡光程·微型计算机原理、接口及应用·重庆:重庆大学出版社,2000 沈美明,温冬婵·IBM-PC汇编语言程序设计·北京:清华大学出版社,1991 周明德·微型计算机系统原理及应用·北京:清华大学出版社
姚胜,徐淑华,崔刚·IBM-PC宏汇编语言程序设计·哈尔滨:哈尔滨工业大学出版社,1992 幸云辉·16位微型计算机原理及应用·北京:北京邮电大学出版社,1992
何立民·单片机应用系统设计、系统配置与接口技术·北京:北京航空航天大学出版社
Design on the basis of the high-speed data collecting system of the
one-chip computer and USB interface technology
Wang Rui The electric information engneering institute,Pan Zhihua College
Abstract Data acquisition uses a combination of PC-based measurement hardware and software to provide a flexible, user-defined measurement system. Data acquisition involves gathering signals from measurement sources and digitizing the signal for storage, analysis, and presentation on a personal computer (PC).As a new interface Specification.the Universal Serial Bus (USB) has the advantages of convenient、expansibility、low cost and anti—disturbance. So it is more fit for the communication interface between the host and available peripherals USB delivers an inexpensive, easy-to-use connection between data acquisition devices/instruments and PCs. This thesis mainly introduce the hardware and software design for the high speed data acquisition system based on USB.
Key words data acquisition;universal serial bus (USB);Single-chip processor
32
致谢
本文是在郑会军老师的指导下完成的,感谢老师这么久以来对我在学业上的悉心指导和生活上无微不至的关怀,我所取得的每一点成绩和进步都凝聚了老师对我的教诲和心血。导师严谨求实的治学态度、脚踏实地的工作作风、敏锐的思想给我留下了深刻的印象,成为我一生中一笔宝贵的财富,使我终生受益。
在整个设计的过程中,也得到了图书管理员和攀枝花学院2001级同学的帮忙和鼓励,他们提出了一些有益的建议,在此对他们表示诚挚的谢意,感谢所有关心过和支持过我的人们!
33
正在阅读:
单片机和USB接口技术05-02
南理工EDA()实验报告 - 多功能数字钟设计课件10-09
【完整版】2022-2025年中国速溶咖啡行业基于产业趋势研究与战略04-13
幼儿综合素质难点:教师职业行为规范05-10
催缴物业费的公告函(1)08-25
Vendor_0001_Product_0001.kl 文件的键值功能定义详解04-29
携程网的移动电子商务运营平台分析05-06
秋天的图画作文400字07-16
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 单片机
- 接口
- 技术
- USB
- 2017-2022年中国河运市场投资战略研究报告(目录) - 图文
- 2018cpa税法计算题
- 红旗Linux桌面4.1正式版文本方式安装过程详细图解
- 毕业论文:基于Flexsim的车间布局优化设计
- 样板层装饰标准
- 高炉工长考试题库
- 工程项目管理机构及职责
- 关于农村可持续发展的报告
- 化妆品卫生生产相关基础知识试卷
- 平房西路施工组织设计
- MCS-51单片机智能温度控制系统设计(林晋斌)
- 一二三章部分题库(含答案)
- 179.等腰三角形的判定(1)
- 南师期末分析化学试卷1(含答案)
- 2016年人教版一年级语文下册全册教案
- 新人教版四年级下册数学全册教案(含反思 集体备课)
- C语言练习册
- DEFORM-3D笔记
- 高鸿业第五版宏观经济学试题库
- 2018年4月自考审计试题及答案WORD