




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
USB接口技术的高速数据采集系统的设计文 摘 通过实际系统的设计、开发和调试,我们觉得对于现在各种以串行口、并行口为接口的产品,都可以设计成带USB接口的产品。在硬件设计时,只需把串口控制芯片或并口控制芯片换成USB接口芯片即可。目前USB芯片的价格也不是很高,一般的只需十几元或几十元人民币即可,这样不仅没有增加成本,而且极大提高了数据传输速度,同时也使得系统具有USB所具有的支持即插即用、热插拔、灵活、方便等技术优势,极大地改善了系统的性能,给用户带来了极大的方便,尤其是适用于产品改造型设计。USB接口完全可以代替串行口和并行口实现数据传输。关键字 数据采集系统;USB接口;单片机1 方案提出的背景1.1 研究课题的提出 信息技术与电子技术的迅猛发展,使得计算机和外围设备也得到飞速发展和应用。过去人们单纯追求计算机与外设之间的传输速度,现在纠错能力和操作安装的简易性也成为人们关注的目标。USB通讯技术的出现,使高传输速度、强纠错能力、易扩展性、方便的即插即用,有机的结合在一起。USB设备需要依据USB协议进行数据的解包与打包,底层硬件设备与操作系统之间需要以驱动程序为桥梁。驱动程序以WDM为模型,以DDK为开发工具,以IRP为消息传播载体,来实现与Windows系统底层核心机制向交互的功能。随着控制系统的日益复杂,所要采集的量也会越来越多。因此寻求一种高速、安全、方便的通讯形式是十分必要的。USB技术虽然出现的时间并不长,但是由于它的种种优点,被越来越多的厂商和用户所接受,出现了USB打印机、摄像头等产品。随着机日益广泛的应用,其外设也逐日增多,但机接口的数量是一定的,这就限制了机挂接外设的数量。在很多应用场合,如工业数据采集,常使用采集板卡来完成工作,采用板卡不仅安装麻烦、易受机箱内环境的干扰,而且受计算机插槽数量和地址、中断资源的限制,不可能挂接很多设备,而通用串行总线可以很容易的实现高可靠性、多点的数据采集。1.2 USB接口的主要优点接口主要优点为:(1)速度快。USB接口有高速和低速两种方式,主模式为高速模式,速率为12/, USB2.0版规范允许480/的速率传输数据,另外为了适应一些不需要很大吞吐量和很高实时性的设备(如鼠标等),还提供低速方式,速率为1.5/。(2)设备安装和配置容易。安装USB设备不必打开机箱,加减已安装过的设备不用关闭计算机。所有USB设备支持热插拔,系统对其进行自动配置。(3)易于扩展。通过使用户HUB扩展可接多达127个外设。标准电缆长度为3(5低速),通过USB或中继器可以使外设距离达到30。(4)使用灵活。有控制传输(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校验等,但该收发器不负责解释这些数据的意义;微处理器负责处理数据、响应主机请求、以及控制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外设接口芯片,就是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总线技术即插即用、热插拔特性来完成高速数据采集系统。这样可以降低开发成本,缩短开发周期、降低风险。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-线上的。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校验、PID确认、地址识别以及握手鉴定。6MHZD+ 3.3V 1.5K电压调整器ANALOGTX/AXsoftconnectD-上行端口PLL位时钟恢复PHILIPSSIE内存管理单元集成RAM并行和DAM接口D+ 图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设备都需要实现一个缺省的控制方法。这种方法将端点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控制输出 默认 输出 16 1控制输出 默认 输入 161 2普通输出 普通 输出 16 3普通输出 普通 输入 162 4普通输出 普通 输出 64 5普通输出 普通 输入 643.4 PDIUSBD12的指令集 PDIUSBD12有自己的专用指令集,用于设置USB芯片、读取USB芯片的状态和控制USB总线传输。D12芯片内有一系列的寄存器对应着这些指令,微处理器把要设置的值按字节写入D12的这些寄存器,或者从D12的这些寄存器中读出USB总线的状态。D12有三种基本的类型的命令:初始化、数据流和通用命令。(1)初始化命令初始化命令在USB总线进行枚举处理时使用,这些命令用于使能端点的功能,还可用来设置USB分配的地址,包括:设置地址/使能、设置端点使能、设置模式(设置分频系数、软连接、端点模式以及中断模式等)、DMA设置等命令。表2初始化命令指令集 命令名 接收者 编码 数据 初始化命令设置地址使能器件 D0h 写1字节设置端点使能器件D8h写1字节设置模式器件F3h写2字节设置DMA器件FBh写/读1字节(2)数据流命令数据流命令用于管理USB端点和外部微控制器之间的数据传输,D12通过微控制器中断初始化大量的数据流。微控制器利用这些命令访问和决定端点的FIFO是否含有有效的数据。包括:读中断寄存器、选择端点、读最后处理状态寄存器、读缓冲区、写缓冲区、使缓冲区有效、清除缓冲区、设置端点状态、应答建立等命令。表3数据流命令指令集 数据流命令 读中断寄存器 器件 F4h 读2字节选择端点 控制输出 00h 读1字节(可选)控制输入 01h 读1字节(可选)端点1输出 02h 读1字节(可选)端点1输入 03H 读1字节(可选)端点2输出 04h 读1字节(可选)端点2输入 05h 读1字节(可选)读最后处理状态 控制输出 40h 读1字节控制输入 41h 读1字节端点1输出 42h 读1字节端点1输入 43h 读1字节端点2输出 44h 读1字节端点2输入 45h 读1字节 读缓冲区 选择的端点 F0h 写n字节 写缓冲区 选择的端点 F0h 写n字节 设置端点状态控制输出 40h 写1字节控制输入 41h 写1字节端点1输出 42h 写1字节端点1输入 43h 写1字节端点2输出 44h 写1字节端点2输入 45h 写1字节 应答设置 选择的端点F1h 无 缓冲区清零 选择的端点F2h 无 使缓冲区有效 选择的端点 FAh 无(3)普通命令:包括发送恢复、读当前帧数目两个命令。表4普通命令指令集 普通指令 发送恢复F6h无读当前桢树木F5h读1或2字节3.5 PDIUSBD12的管脚配置 PD12共有28个管脚,具有S028和TSSOP28两种封装形式,管脚图如图4具体的管脚功能如表5:图 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在一定时间才能变成低电平。表5 PD12的管脚功能 图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接口器件,固件设计的目标就是使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串口还是并口,它只检查循环缓冲区内需要处理的新数据。这个概念很重要,这样主循环程序专注于数据的处理而ISR能够以最大可能的速度进行数据的传输。相似的,控制端点在数据包处理时采用了同样的概念。ISR接收和保存数据缓冲区中的控制传输并设置相应的标志寄存器。主循环向协议处理程序发出请求。由于所有的标准器件,级别和厂商请求都是在协议处理程序中进行处理,ISR得以保持它的效率,而且一旦增加新的请求只需要在协议层进行修改。4.1.2 PDIUSBD12固件编程的结构固件的积木式结构如图8所示,图中箭头表示数据传输方向。主循环:采集数据,发出USB请求,和处理USB总线事件和用户功能等等 MAINLOOP.C中断服务程序 ISR. C标准请求处理 CHAP 9. C厂商请求处理PROTODMA.CPDIUSBD12命令接口 D12CI. C硬件提取层EPPHAL. C 图8 固件结构和数据流向 下面是事件标志“EPPFLAGS”和Setup包数据缓冲区“CONROL_ XFER”的结构体: /事件标志 typedef union_ epp_ flagsstruct_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 valueEPPFLAGS;/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 DEVICE_ REQUSET DeviceRequest; unsigned short wLength unsigned short wCount; unsigned char*pData; unsigned char dataBufferMAX_ 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数据都存入CONTROL_ XFER”缓冲区中,然后将“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的最后处理状态寄存器进一步确定数据是否是一个建立包,第一个包必须是建立包。yesyesNo No No No No No No No yesyesyesyesyesyesyesyes中断服务中断服务读取D12中断寄存器总线复位挂起改变?DMA传输结束?控制输入? 控制输出?端点1输出?端点1输入?端点2输入?端点2输出?中断服务结束设置总线复位标志设置挂起改变标志DMA传输结束处理控制端点发送数据处理控制端点接收数据处理端点1发送数据处理端点1接收数据处理端点2发送数据处理端点2接收数据处理No No No No No yesyesyesyesyesyesyesyes读取D12中断寄存器总线复位挂起改变?DMA传输结束?控制输入? 控制输出?端点1输出?端点1输入?端点2输入?端点2输出?中断服务结束设置总线复位标志设置挂起改变标志DMA传输结束处理控制端点发送数据处理控制端点接收数据处理端点1发送数据处理端点1接收数据处理端点2发送数据处理端点2接收数据处理YyyyyesNo No No 图9 中断服务程序流程无数据控制返回状态空闲接收发送输入输出 图10 控制端的安处理程序转换从下面的流程图10中可以看出,MCU需要通过选择控制输出端点提取建立包的内容来决定端点是为满还是空。如果控制端点为满,MCU将从缓冲区读出内容并将其存入存储区。之后,它将从存储区使主设备请求生效。如果是一个有效的请求,MCU必须向控制输出端点发送应答建立命令以重新使能下一个建立阶段接下来MCU需要证实控制传输是控制读还是写,这可以通过读建立包中bmRequestType的第8位来实现。如果控制传输是一个控制读类型,那就是说器件需要在下一个数据阶段向主机发回数据包。MCU需要设置一个标志以指示USB设备现在正处于传输模式,即准备在主机发送请求时发送数据。建立阶段结束之后,主机会执行数据阶段。D12等待接收Control_ In包,过程如下面的流程图12“控制输入处理程序”所示。MCU首先需要通过读D12的最后处理状态寄存器清零Control_ In中断标志位,接着MCU再确认D12处于传输模式后进行数据包的发送。 由于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通过检查选择控制输出端点确认缓冲区是否己满并将数据从缓冲区读出。NONONOYesYesYes读端点处理状态 清中断标志控制输入入口发送状态剩下数据16字节子程序结束剩下0 字节发送16个字节数据设置为发送状态发送剩下数据设置为等待状态发送一个空包设置为等待状态 图11 控制输入处理流程4.1.5 普通端点处理程序 端点1和端点2这里定义为普通输入输出。普通输出端点配置为从主机接收数据包。当MCU从主机接收Generic_ Out标志(通过读中断寄存器识别)时,D12中断位必须清零。选择端点将清零Generic_ Out缓冲区,接下来MCU需要确认NONONONONONOYesYesYesYesYesYesYes控制输出入口读端点处理状态 清中断标志建立包?接收数据出错读取断电数据并保对控制输入端点和控制输出断电进行建立数据对应包设置等待状态停止控制端点设置为等待状态数据长度出错子程序结束处于接收状态设置等待状态,设置建立包标志标志设置发送状态,设置建立包标志标志设置等待状态带数据的要求:读取要求?读取端点数据并保存接收完毕 ?设置为等待状态设置建立包标志NO 图12 控制输出处理流程数据的长度并把数据读出,然后设置收到数据标志位bEPPflag。对于普通输入端点的中断,只要读取端点号的最后处理状态寄存器来消除中断寄存器的相应位,把状态清零就可以了。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是否工作。该命令要读两个字节数据。NoNoNoNoYesYesYesYes初始化I/O口、定时器和中断,重新连接到USB总线定时器事件标志?总线复位?挂起改变?循环Main Loop总线复位处理挂起改变处理调用协议处理程序建立包? 更新LED状态采集按键状态图13 主循环流程图(2)USB初始化过程为: 1 Set Address Enable; 2 Set Endpoint Enable(此时LED亮); 3 Disconnect; 4delay(1-2 s); 5 Connect(即用43h参数调用Set Mode,此时LED灭); 6Read Interrupt Register; 完成初始化工作后就可作其它的前台工作了,并在前台判断是否有Setup包(通过一个变量,当中断服务程序检测到有Setup包时,设置该变量),然后执行响应的控制传输。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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 设备拆除合同范本合集
- 果园招标合同范本
- 超市策划设计合同范本
- 规培医生合同范本
- 冷冻章鱼采购合同范本
- 橱柜销售标准合同范本
- 学校维修栏杆合同范本
- 做校园广告合同范本
- 社区安全知识培训课件信息
- 中介租房正规合同范本
- 2025年建筑师考试备考策略与实战经验
- 新员工社保讲解
- DB1508T 152-2024 玉米品字型播种北斗导航机械化作业技术规程
- 2025-2030中国复合外套金属氧化物避雷器行业产销需求与投资前景展望报告
- 商用厨房设备维护保养规范
- 完形填空20篇(15空)-牛津译林版七年级英语下学期期末高频易错点专练(带详解)
- 《新媒体营销与运营实战(微课版)》-教学大纲
- 2025年固定矫治器粘接护理常规流程试题(含答案)
- 耳鼻喉科规培汇报
- 2025年云南省康旅控股集团有限公司招聘考试笔试试题(含答案)
- 2025年蔬菜专业面试题库及答案
评论
0/150
提交评论