USB2.0接口和DSP构成的高速数据采集系统的分析和设计_第1页
USB2.0接口和DSP构成的高速数据采集系统的分析和设计_第2页
USB2.0接口和DSP构成的高速数据采集系统的分析和设计_第3页
USB2.0接口和DSP构成的高速数据采集系统的分析和设计_第4页
USB2.0接口和DSP构成的高速数据采集系统的分析和设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1USB2.0 接口和 DSP 构成的高速数据采集系统的分析和设计【摘 要】 本文主要阐述了 USB2.0 接口和 DSP 构成的高速数据采集系统的工作原理、结构组成及其设计与实现。 为达到设计的要求,详细地对其系统组成器件的选择及其特性和硬件的连接作了说明。重点介绍了 USB 技术及其软件设计。在这部分中,介绍了讲述了相关的主机接口,这类接口简化了主机内部客户软件与设备应用之间的通信。本章所涉及的具体实例部分只是作为例子,以阐述主机系统响应 USB 设备请求的行为。 USB 主机可以提供不同的 软件系统实现方法,完成相应的主机操作。系统软件设计过程中常见故障的分析。【关键词】USB2.0 接口 DSP 高速数据采集系统2The Analysis and Design That USB2.0 Connects the High-speed Data That and DSP Donstitute to Collect the SystemAbstract This text mainly elaborated that the USB2.0 connects the high-speed data that and DSP constitute to collect the work principle, structure of the system to constitute and it designs with the realization. In order to attain the request of design, detailed as to its the system constituted the choice of the machine piece and the conjunction of the hardwares to make the elucidation. The point introduced technique of USB and its software designs. In this section describes the host interfaces necessary to facilitate USB communication between a software client, resident on the host, and a function implemented on a device. The implementation described in this chapter is not required. This implementation is provided as an example to illustrate the host system behavior expected by a USB device. A host system may provide a different host software implementation as long as a USB device experiences the same host behavior . In the system software design process the analysis of the familiar breakdown.Key words USB2.0 interfaces DSP The high-speed data collects the system3一 绪言随着数字信号处理理论和计算机的不断发展,现代工业生产和科学技术研究都需要借助于数字处理方法。进行数字处理的先决条件是将所研究的对象进行数字化,因此数据采集与处理技术日益得到重视。在图像处理、瞬态信号检测、软件无线电等一些领域,更是要求高速度、高精度、高实时性的数据采集与处理技术。现在的高速数据采集处理卡一般采用高性能数字信号处理器(DSP)和高速总线技术的框架结构。DSP用于完成计算量巨大的实时处理算法,高速总线技术则完成处理结果或者采样数据的快速传输。DSP主要采用TI或者ADI公司的产品,高速总线可以采用 ISA、PCI、USB等总线技术。目前,使用比较广泛的是PCI 总线,虽然其有很多优点,但是存在如下严重缺陷:易受机箱内环境的影响,受计算机插槽数量的地址、中断资源的限制而不可能挂接很多设备等。USB总线由于具有安装方便、传输速率高、易扩展等优点,其中USB2.0标准有着高达4800bps的传输速率,已经逐渐成为计算机接口的主流。本设计是一个采用USB2.0接口和高性能DSP的高速数据采集处理系统,主要是为光纤通信中密集波分复用系统的波长检测与调整所设计的,也可以应用于像图像处理、雷达信号处理等相关领域。二 系统原理及器件选用(一)系统原理及简介整个高速数据采集处理系统的硬件构成为:高速 ADC、高速大容量数据缓冲存储器、高性能 DSP 和 USB2.0 接口。系统组成的原理框图如图 2-1 所示。图 2-1 系统组成的原理框图外界输入信号经 A/D 采样后,采集到的数据先保存在高速数据缓存中,数据采集结束后 DSP 从缓存中读取数据开始信号处理。信号处理的算法已编成程序保存在外部的 Flash芯片上,供 DSP 上电读程序到其内部 RAM 单元,全速运行程序。信号处理后的数据通过USB2.0 接口依次传送到主机方,把数据数值存储在 PC 机内。(二)系统组成器件的选择高性能 DSP 采用 TI 公司的 TMS320C6000 系列定点 DSP 中的 TMS320C6203B;高速ADC 采用 TI 公司的 ADS5422,12 位采样,最高采样频率为 105MHz;PC 机接口采用USB2.0,理论最大数据传输速率为 480Mbps,器件选用 Cypress 公司 EZ-USB FX2 系列中PCUSB 接口 DSP 缓存FLASH 高速ADC4的 CY7C68013;数据缓冲采用 IDT 公司的高速大容量 FIFO 器件 IDT72V2113;程序存储在 Flash 存储器中,器件选用 SST291E010。下面逐一介绍各个器件的主要特性。1高速 A/D 转换器 高速 A/D 转换器选用美国 TI 公司生产的高速并行 14 位模数转换器 ADS5422,其最高采样频率达到 62MHz,采样频率为 100MHz 时,SNR(信躁比)为 72dB,SFDR(寄生动态范围)为 85dB。模拟信号输入可以是单端输入方式或者差分输入方式,最高输入信号峰峰值为 4V,单一 5V 电源供电。输出数字信号完全兼容 3.3V 器件,并且提供输入信号满量程标志以及输出数字信号有效标志,从而方便和其它器件的连接。2高速缓存 FIFO高速缓存是系统中的一个关键环节。IDT72V2113 是由美国 IDT 公司生产的高速大容量先进先出存储器件(FIFO)。其最高工作频率为 133MHz;容量为 512KB,可以通过引脚方便的将容量设置成 512K9bit 或者 256K18bit 两种方式; IDT72V2113 可以设置标准工作模式或者 FWFT(Fist Word Fall Through)工作模式,并提供全满、半满、全空、将满以及将空等五种标志信号,非常方便进行容量扩展。大容量数据存储是高速数据采集系统迫切需要解决的问题,例如,一个 20M 采样速率、8 位的 ADC,在一秒钟的时间内所采集到的数据量是 20M 字节,虽然 IDT72V2113 的单片容量是 512K9bit,可以很好的满足一般的数据采集系统的需要,但是,对于高速、无间隔的数据采集系统来说,一片的容量是不够的。IDT72V2113 便于扩展的特性可以很容易地解决这个问题,而且不需要外部控制电路,连接简单、可靠,很方便电路设计及软件开发。其容量扩展可以分为字长扩展和深度扩展。IDT72V2113 的字长扩展比较简单,只要把各个芯片的控制信号连在一起就可以实现。这里需要注意的是 EF/IR 和 FF/OR 两个引脚,在标准模式下这两个管脚的功能为 EF 和FF,把各个芯片这两个管脚分别相与;在 FWFT 模式下,这两个管脚功能为 IR 和 OR,把各个芯片的这两个管脚分别相或,这样就可以确保同步读写每一个 IDT72V213。IDT72V2113 的深度扩展方式仅适用于 FWFT 工作模式。其中,传输时钟可以选择写时钟和读时钟中频率较高的那个时钟信号。工作原理为:当有数据写入第一片 FIFO 中后,其输出允许信号(OR)低有效,从而使第二片 FIFO 的写使能信号有效;同时,只要第二片 FIFO 中仍有空间,它的输入允许信号(IR)低有效,从而使第一片 FIFO 的读使能信号(REN)有效,这样,在传输时钟的驱动下,数据由第一片 FIFO 向第二片 FIFO 传送,直到第二片 FIFO 写满为止,以后的数据将储存在第一片 FIFO 中。通过深度扩展,两片IDT72V2113 可形成容量为 1M9 bit 的数据缓冲。IDT72V2113 不仅可以通过字长扩展和深度扩展来实现容量扩展,而且可以将两者结合起来,进行更大容量的扩展,如用四片 IDT72V2113 扩展成容量为 1M 18 bit 的数据缓冲。3高性能 DSP 处理器DSP 是整个采集系统的核心。TMS320C6203B 是 TI 公司高性能数字信号处理器TMS320C6000 系列的一种,采用修正的哈佛总线结构,共有一套 256 位的程序总线、两套32 位的程序总线和一套 32 位的 DMA 专用总线;内部有 8 个功能单元可以并行操作,工5作频率最大为 300M,最大处理能力为 2400MIPS;内部集成了丰富的外围设备接口,如外部存储器接口(EMIF)、外部扩展总线(XB)、多通道缓冲串口(McBSPS )和主机接口(HPI),与外部存储器、协处理器、主机以及串行设备的连接非常方便。TMS320C6203B 的 DMA 控制器有以下特点:共有 4 个通道, 32 位寻址能力,可以对存储器映射空间的任何一个区域进行访问;传送数据支持 8 位、16 位和 32 位字长;灵活的地址产生方式,支持多帧传输方式;每次传输完毕后,可以进行 DMA 通道的自动初始化;传输操作可以由选择的同步事件触发。DMA 寄存器的设置包括以下几个寄存器:通道的主、副控制寄存器,通道的源地址、目的地址寄存器,通道传输计数寄存器,DMA全局地址寄存器,DMA 全局索引寄存器,DMA 全局计数重载寄存器。TMS320C6203B 的外部扩展总线( XB)宽度为 32 位,可以连接外部异步设备、异步或同步 FIFO、 PCI 控制器和其他一些外部控制器。外部扩展总线由 I/O 总线和主机口接口组成。I/O 总线有异步 I/O 工作模式和同步 FIFO 工作模式,其中同步 FIFO 模式与标准同步 FIFO 可以实现无缝连接,可以同时无缝实现四个 FIFO 写借口或者实现三个 FIFO 写接口及一个 FIFO 读接口。通过无缝连接实现 FIFO 读接口,FIFO 必须连接到 XCE3 空间。4USB2.0 接口USB(Universal Serial Bus)总线是 Intel、NEC、Microsoft、IBM 等公司联合提出的一种新的串行总线接口规范。为了适应高速传输的需要,2000 年 4 月,这些公司在原 1.1 协议的基础上制订了 USB2.0 传输协议,已超过了目前 IEEE1394 接口 400Mbps 的传输速度,达到了 480Mbps。USB 总线使用简单,支持即插即用 PnP(Plug And Play),一台主机可串连 127 个 USB 设备。设备与主机之间通过轻便、柔性好的 USB 线缆连接,最长可达5,使设备具有移动性,可自由挂接在具有 USB 接口的运行在 Windows98/2000/XP 平台的 PC 机上。 USB 总线已被越来越多的标准外设和用户自定义外设所使用,如鼠标、键盘、扫描仪、音箱等。CY7C68013 是美国 Cypress 公司推出的 EZ-USB FX2 系列中的 USB2.0 芯片,是目前市面上比较少的符合 USB2.0 标准的 USB 控制器之一,是一个全面集成的解决方案,它占用更少的电路板空间,并缩短了开发时间。CY7C68013 结构图如图 2-2 所示。6图 2-2 CY7C68013 结构图CY7C68013 集成了以下特性:包括 1 个智能串行的接口引擎(SIE),它执行所有基本的 USB 功能,将嵌入的MCU 解放出来以用于实现其它丰富的功能,以保证持续高速有效的数据传输;提供了 4KB 的大容量 FIFO 用于数据缓冲,保证数据高速传输的需要。当作为从设备时,可采用 Synchronous/Asynchronous FIFO 接口与主设备(如 ASIC,DSP 等)连接;当作为主设备时,可通过通用可编程接口(GPIF)形式任意地控制波形来实现与其它从设备连接,能够轻易地兼容绝大多数总线标准,包括 ATA、 UTOPIA、EPP 和 PCMCIA 等;CY7C68013 内部集成了一个增强型的 51 内核,其指令集与标准的 8051 兼容,并且在多方面有所改进。例如:最高工作频率可达 48MHz,一个指令周期为 4 个时钟周期,两个 UART 接口,三个定时/计数器,扩展的中断系统,两个数据指针,一个 I2C 接口引擎等;固件软配置,可将需要在 CY7C68013 上运行的固件,存放在主机上,当 USB 设备连上主机后,下载到设备上,这样就实现了在不改动硬件的情况下很方便地修改固件; 3.3V 电源系统;能够充分实现 USB2.0(2000 版)协议,并向下兼容 USB1.1CY7C6801324MHzXTALUSB2.0收发器 USB1.1/2.0SIE8.5KBRAMDataBus(8)Address(16)GPIF4KFIFOX20PLL/0.5/1.0/2.08051 Core12/24/48MHzI2C BUS7三 高速数据采集处理系统的硬件连接(一)模拟信号输入电路ADS5422 的模拟信号输入可以采取单端输入方式或者差分输入方式。单端输入方式连接比较简单,但抗噪性能差,所以我们采取差分输入方式,以尽量减少信号噪声以及电磁的干扰,尤其是采用差分输入方式可以将所有偶次谐波通过正反两个输入信号基本上互相抵消。ADS5422 的模拟信号差分输入方式需要同时使用 IN 和 IN 引脚,其硬件连接方法如图2-1 所示。图中,首先使用放大器 OPA847 以及 RF 变压器将单端信号转换成差分信号,然后输入到 ADS5422,其中 ADS5422 的公共端 CM 和 RF 变压器的公共端连接,RF 变压器的匝数比应该根据信号确定。为了增强信号的稳定性,在 ADS5422 每个信号的输入前加上RC 低通滤波电路,图 3-1 中推荐 Rt 为 50,Rin 为 22,Cin 为 10pF,这些元件也可以根据具体的信号进行调整,一般情况下电阻值在 10100 之间,电容值在 10200pF 之间。图 3-1 ADS5422 的差分输入(二)ADS5422 与 IDT72V2113 的连接虽然 ADS5422 的供电电压为 5V,但其输出的数字信号电平兼容 3.3V 电平,因此不需要电平转换芯片,只要将 ADS5422 的数据线与 IDT72V2113 的数据线相连即可。但是,ADS5422 采样和把采样数据存储到 IDT72V3113 中,这两个操作对时序配置要求非常严格,如果两者时序关系配合得不是很好,就会发生数据存储出错或者掉数等现象。如何简单、可靠地实现采样和存储是设计这部分电路的难点。一般的方法是,通过可编程逻辑器件(CPLD 或 FPGA)来实现 ADC 与 FIFO 存储器之间的时序,即由 CPLD 或 FPGA 来控制ADC 采样和 FIFO 存储器的写操作。但是,通过仔细查看 ADS5422 和 IDT72V2113 的工作时序图,找到了一种简单可靠的实现方法,此方法不需要 CPLD 或 FPGA 就可以实现两者的时序配合。8图 3-2 ADS5422 工作时序首先分析 ADS5422 的工作时序图,如图 3-2 所示,其中 t1 为采样时钟上跳沿到输出数据无效之间的时间间隔,即数据保持时间,其大小为 3ns。查看 IDT72V2113 的相关文档可知,对其进行写操作时,数据线的保持时间大于 1ns 即可满足要求。因此,ADS5422 与IDT72V2113 之间的时序配合可以采用以下简单的实现方法:ADS5422 的采样时钟和IDT72V2113 的写时钟采用同一个时钟源,这样,每一个时钟的上跳沿,ADS5422 进行模数转换,同时将上个时钟周期内输出的采样数据存储到 DT72V2113 内部。(三)TMS320C6203B 与 IDT72V2113 的连接TMS320C6203B 与 IDT72V2113 的连接是通过 C6203B 外部扩展总线( XB)实现的。C6203B 的外部扩展总线(XB)宽度为 32 位,可以实现与同步 FIFO 无缝连接,可以同时无缝实现四个 FIFO 写接口或者实现 3 个 FIFO 写接口及 1 个 FIFO 读接口。通过无缝连接实现 FIFO 读接口,FIFO 必须连接到 XCE3 上,数据通过 DMA 方式从 IDT72V2113 传送到 C6203B 的片内 RAM 中,具体连接如图 3-3 所示。图中,4 片 IDT72V2113 经过字长和字深扩展形成 2MB 的数据输入缓冲,输入数据总线(D0D15)、输出数据总线(Q0Q15)、读使能(REN)、读时钟(RCLK)、写使能(WEN )、写时钟(WCLK)和将空标志信号(PAE)是由 4 片 IDT72V2113 的相应信号组合形成的;XCE3 为外部扩展总线(XB)的空间选择信号,XFCLK 为外部扩展总线(XB)的输出时钟,EXT_INT4 是 C6203B 的外部中断信号 4,DX0 用作通用输出口,控制 IDT72V2113 的写使能信号。9图 3-3 TMS320C6203B 与 IDT72V2113 的连接(四)CY7C68013 与 C6203B 的连接CY7C68013 是一个非常方便的 USB2.0 实现方案,它提供与 DSP 或者 MCU 连接的接口,连接方法有两种:Slave FIFOs 和 Master 可编程接口 GPIF。在本方案中,选用了 Slave FIFOs 方式,异步读写。Slave FIFOs 方式是从机方式, DSP 可以像读写普通 FIFO 一样对CY7C68013 内部的多层缓冲 FIFO 进行读写。具体的电路连接如图 3-4 所示。图 3-4 USB 与 DSP 的连接FLAGA、FLAGB 和 FLAGC 是 CY7C68013 内部 FIFO 的状态标志,C6203B 通过通用I/O 口来获得 FIFO 的空、半满(由用户设定半满的阈值)和满等状态信息。 C6203B 对CY7C68013 内部 FIFO 的选择,以及数据包的提交也是通过通用 I/O 口来实现。C6203B 通过 EMIF 接口的 CE2 空间对 CY7C68013 进行读写操作。工作过程为: DSP 通过 USB 向10PC 发送数据时,首先查看空、半满和满这三个状态信号,然后向 USB 写入适当大小的数据,以保证数据不会溢出;PC 机通过 USB 向 DSP 发送命令字时,USB 通过中断方式通知 DSP 读取命令字。11四 USB 软件设计USB 接口的开发和设计中有相当大的工作量是关于 USB 软件的设计。USB 软件设计包括三方面的工作:固件(firmware)设计,驱动程序设计和主机端应用程序的设计。(一)固件设计固件设计的目的就是使 CY7C68013 在 USB 上达到最大的传输速率。外围设备,例如打印机、扫描仪、外部的海量存储器和数码相机等都可以使用 CY7C68013。在 USB 上传输数据,这些设备的 MCU 要忙于处理许多设备数据和图像处理等任务。CY7C68013 的固件可设计为完全的中断驱动。图 4-1 固件程序结构如图 4-1 所示后台中断服务程序( ISR)和前台主程序循环之间的数据交换通过事件标志和数据缓冲区来实现。CY7C68013 的批量输出端点可以使用循环的数据缓冲区,当CY7C68013 从 USB 收到一个数据包,那么就对 MCU 产生一个中断请求,MCU 立即响应中断。在 ISR 中固件将数据包从 CY7C68013 内部缓冲区移到循环数据缓冲区,并随即清零 CY7C68013 的内部缓冲区,以使其能够接受新的数据包。MCU 可以继续完成当前的前台任务,然后返回到主循环,检查循环缓冲区内是否有新的数据并开始其他的前台任务。这种结构中主循环不关心数据是来自 USB 串口还是并口,它只检查循环缓冲区内需要处理的新数据。这使得主循环程序专注于数据的处理,而 ISR 能够以最大可能的速度进行数据的传输。当 MCU 处理前台任务时,USB 的传输可在后台进行。这就确保了最佳传输速率和更好的软件结构,同时简化了编程和调试。为了不影响程序的执行效率,同时也为了保证程序的模块化及良好的可移植性,在设计中采用分层结构进行固件的编写,其固件编程结构如图 4-2 所示。12图 4-2 固件编程结构最下层是硬件接口层,完成硬件上 CY7C68013 与 DSP(TMS320C6203B)的对接。主要是 DSP 向 CY7C68013 中写入数据或者命令,以及从中读取数据。中间层主要有两个模块,用来完成 CY7C68013 的命令接口和中断处理子程序。命令接口是指按照 CY7C68013 的命令格式,完成 DSP 对它的控制。它的基本命令格式是:DSP先向其中的命令地址写入某一条命令,接着从它的数据地址写入或者读出一系列的数据。中断处理子程序是判断中断的产生源,然后跳转到相应的处理子程序。这些子程序不做过多的处理,而仅仅是将命令数据读出然后置标志位,或者是将某些数据送出。最上层是主循环程序,以及对于 USB2.0 标准协议请求和用户自定义请求的处理程序。主循环的主要工作是检查标志位。如果标志位被置位,则调用处理子程序,判断是标准请求还是用户自定义请求,然后调用相应的处理程序加以处理,完成请求。这样分层的好处是:主循环程序在检查标志位以外的时间可以进行其它工作,提高固件的运行效率。设备固件 firmware 主要完成两个方面的工作:控制 A/D 的采样和通过 CY7C68013 与主机通信。微处理器控制 A/D 采样的工作比较简单,主要包括读采样值,存储数据至FIFO 等。基于 USB 的数据采集系统可采用两种传输方式:控制传输和批量传输。控制传输实现位于主机上的 USB 总线驱动程序(USBD.SYS )以及编写的设备驱动程序对设备的各种控制,而批量传输将采集数据从设备传送到主机。CY7C68013 的工作原理可以简单地描述为:当 CY7C68013 检测到主机启动的某一传输请求时,就通过中断方式将此请求通知微处理器。微处理器通过访问 CY7C68013 的状态寄存器和数据寄存器获得与此次传输有关的各种参数,并根据具体的传输参数,对其控制寄存器和数据寄存器进行相应的操作,以满足主机的传输要求。固件程序流程图如图 4-5 所示。13图 4-3 主程序 图 4-4 控制 A/D 转换的中断服务程序图 4-5 固件程序Cypress 公司为 CY7C68013 提供了一个开发框架,可以在 KEIL C51 环境下开发。由于开发框架的引入,从而大大缩短了用户的研发周期。该框架由以下几部分组成:(1)FWC 中包含了程序框架的 MAIN 函数,管理整个 51 内核的运行,因为Cypress 对这个部分的功能进行了精心划分,一般是不用改动的。14(2)用户必须将 PERIPHC 实例化,它负责系统周边器件的互联。固件的设计主要针对这个文件,用户必须根据自己系统的需要,实例化这个文件,以实现自己的功能。在这个文件中有几个函数是比较关键的,在这里做一下特别说明:TD_ Init 函数,负责对 USB 端点进行初始化设置。本设计中将端点 6 设置为 1024 个字节,缓存深度为 4 级,模式设为自动输入方式;TD_ Poll 函数,负责系统中循环任务的处理。它主要是对各个端点的状态进行查询,处理各种 OUT 或 IN 端点的交互。值得说明的一点是,这种处理只是辅助性质的,大部分工作由硬件自动完成。DR_ VendorCmnd 函数,主要负责用户自定义命令的译码工作,用户请求通过端点 0传输给内核。由于 CY7C68013 上 SIE 硬件的支持,用户只需查询固定地址单元即可获得当前的命令代码。GPIFINITC,其中只有一个 Gpiflnit 函数;它是 GPIF 模块的初始化函数,一般在TD_ Init 函数中调用。这个函数是由 Cypress 公司提供的一个 GPIF Designer 开发工具根据用户设计的波形生成的,用户不需要自己设计波形查询表,减轻了设计者的工作强度。DSCR A51 是描述表文件,负责 USB 设备的描述工作,CY7C68013 在上电后自动利用其中的 VID 和 PID 取代默认的 VID 和 PID。两个包含文件 EZUSBLIB 和 USBJMPTBOBJ,前者是 EZUSB 函数库的二进制文件,后者是 USB 的中断向量表。利用 EZ-USB FX2 提供的一些框架函数来简化用户代码,使用相应端口(端口 2 输入,端口 6 输出),加快了 USB 接口的开发过程,基本的固件程序框架函数如下:void TD_ Init(void) /该函数用来完成 EZ-USB FX2 的初始化/CPUCS=0x10; /工作频率 48MHz/IFCONFIG=0xC3; /决定 FX2 的工作模式(slave FIFO)及相关设置/IN07VAL=bmEP2;OUT07VAL=bmEP6; /使能端点 2 输入和端点 6 输出/EP2FIFOCFG=0x6D;SYNCODELAY;EP6FIFOCFG=0x75;SYNCDELAY; /对端点 2 和端点 6 的配置,WORDWIDE=1 配置的是使用 16位数据线/EP2CFG=0xEA; /端点 2:输入、批量传输、最大包字节为 1024,双缓冲/SYNCDELAY;EP6CFG=0xAA; /端点 6:输出、批量传输、最大包字节为 1024、双缓冲/SYNCDELAY;15void TD_ Poll(void) /此函数在设备运行时反复被调用,它包括完成用户任务的函数/BOOL TD_ Suspend(void) /该函数在设备进行挂起状态前调用/return (TRUE);BOOL TD_ Resume(void) /设备重启后调用/return (TRUE);在整个固件程序中,EZ-USB FX2 设备上电或复位后,首先对所有的内部状态变量初始化,随后调用 TD_ Init()函数,并开中断,此时固件程序不断检测控制端口 0 是否收到 SETUP 包。一旦收到,固件程序就开始调用用户函数 TD_ Poll(),其中用户需要完成的功能代码就在 TD_ Poll()函数里。调用完成后,重复检测端口 0 是否收到 SETUP 包,若有,继续执行设备请求,调用 TD_ Poll()函数;否则,检测 USB 核是否有 USB 挂起事件,若有,调用 TD_ Suspend()函数,其返回为真时,检测 USB 核是否有重新开始事件,没有时,设备进入挂起状态,反之,调用 TD_ Resume(),进行下一次循环;当TD_Suspend()函数返回为假时,直接转入下次循环。(二)驱动程序设计主机与外设通过 USB 接口的通信是通过驱动程序来实现的。在 Windows 环境中,定义了 Windows 设备驱动程序模型,其中设立了两种模式,即用户模式和内核模式。应用程序只能工作在用户模式下,而驱动程序大多运行在内核模式下。驱动程序采用了分层结构,设备驱动知道如何与系统的 USB 驱动和访问设备的应用程序通信。设备驱动通过在应用层和硬件专用代码之间的转换来完成它的任务。应用层代码一般使用一套操作系统支持的函数。硬件代码则处理那些访问外设电路的必要协议,包括监视状态信号和在合适的时间切换控制信号。1Windows 操作系统对 USB 的支持Windows 的 USB 设备驱动须遵照微软公司在 Windows98 和更新的版本中为用户定义的 Win32 的驱动模式。这些驱动以 WDM(Windows 设备驱动程序模型)驱动为主,扩展名为.sys。与其他的底层驱动程序一样,WDM 驱动程序不能驱动应用程序,因为它负责在一个特权层实现和操作系统的通信。WDM 驱动可以允许或拒绝一个应用程序对一个设备提出的访问。例如,WDM 驱动程序可以允许任一应用程序来使用一个游戏杆,或者允许一个应用程序保留游戏杆独自使用。Windows 为其他底层设备驱动程序和 WDM 驱动程序所保留的能力还包括 DMA 传输和对硬件中断的响应。WDM 定义了一个基本模型,处理所有类型的数据。例如,USB 类驱动程序为所有 USB 设备提供了一个抽象的模型,提供16了所有客户驱动程序使用的接口。这样就使得同一类型的设备具有相同类型的驱动程序模型,从而大大降低了开发的工作量。在 Windows 早期的版本中,使用不同的设备驱动模型。例如,VxDs(虚拟设备驱动)。而现在的 Win32 设备驱动程序模型是设计用来为运行在Windows98/2000 和其他更高的版本下的任一设备,提供一个通用的驱动程序模型。Win32 驱动程序有两种工作模式:用户模式和内核模式。应用程序只能工作在用户模式下,而驱动程序大多运行在内核模式下。在用户模式下,操作系统限制访问内存和其他系统资源,不允许访问设定为被保护的内存区域。因此 PC 机可同时运行多个程序,而能互不干扰。在该模式下,运行的代码如果不通过操作系统的某种机制,就不能进入内核模式。从理论上讲,即使一个应用程序崩溃了,其他应用程序也不会受到影响(当然,事实上不会那样工作)。在奔腾和其他 x86 处理器中,用户模式对应于 3 级环。在内核模式下,代码自由访问系统资源,包括执行内存管理指令和控制访问 I/O 端口。在奔腾和其他 x86处理器中,内核模对应于 0 级环。图 4-6 表明了用户和内核模式在 USB 通信中的主要组成。图 4-6 Windows98 的 USB 分层驱动模型2驱动程序的分层结构USB 通信使用分层驱动模型,每层处理一部分通信任务。把通信分成层是有效的,因为这样可以使不同的设备在一些任务上使用相同的驱动。当所有设备都连到 USB 上,有一套可以被所有设备访问、包括在操作系统中的、用来处理 USB 专用通信的驱动是明智的。当然也可以选择,让每个设备驱动直接与 USB 硬件通信,这样就会出现很多重复劳动。如图 4-7 所示,Windows 对构成一个 USB 主机的不同软件部分进行了清楚的划分。17图 4-7 USB 驱动程序体系结构应用程序通过访问一系列 API 函数,与设备驱动程序交互。设备驱动程序把应用程序的请求转换成 IRP(I/O 请求包)的标准形式。设备驱动程序通过 Windows 所定义的一个软件接口来同根集线器驱动程序进行通信。而 USB 根基线器驱动程序则要通过 USB 驱动接口 USBDI 来实现同通用串行总线驱动程序(USBD)的通信。然后,USBD 会选择两种主控制器驱动程序之一来同其下方的主控制器进行通信。最后,主控制器驱动程序会直接实现对 USB 物理总线的访问(通过 PCI 枚举器软件)。 USB 驱动程序软件堆栈内的层间通信使用了一个称之为 IRP 的机制。首先,客户以 IRP 的标准形式向 USBD 请求数据传输。IRP 在不同层的驱动程序之间传递,从而在不同的分层结构之间实现了通信。处于图中的各层驱动程序,分别承担一定的通信任务,并一起保证了 USB 外设到主机的通信。设备驱动程序 USB 设备驱动程序,它位于根集线器驱动程序之上。Windows 操作系统给出了 Windows USB 接口,设备驱动程序通过该接口访问其下层的 USB 软件。当一个应用程序启动一个 API 调用后, Windows 把调用传给合适的设备驱动,驱动把要求转换为USB 总线类驱动能理解的格式。IRP 包含被称为 USB 请求块( URB)的结构,这个结构为配置设备和传输数据任务指定协议。URB 记录在 Windows 的 DDK 文档中。Cypress 公司为了方便用户开发 USB 接口,在 CY7C68013 的开发包中提供了一个通用驱动程序,该程序可不加修改,经 DDK 编译后直接使用。根集线器驱动器 如图 4-7 所示,主控制器驱动程序处于 USBD 的下方,而根集线器驱动程序却位于 USBD 之上。根集线器驱动程序处理根集线器端口和这个端口的任何下行18设备的初始化。Windows 包含了集线器驱动 usbhub.sys,因此该驱动不需要由设备开发者编程。每一个支持 USB 系统的主机中,都会有一个根集线器提供两个 USB 端口,即位于主机箱上的两个 USB 端口。一个 USB 系统中的所有 USB 设备,包括 USB 功能设备和USB 集线器都必须以一定的方式直接进入,或通过 USB 集线器以菊花链式的星型接入一个 USB 根集线器。在 Windows 环境中,所有的设备驱动程序都可以通过指向根集线器驱动程序的接口,来和所有接入的 USB 设备进行通信。另外还有一种方法就是通过 USBDI而直接同 USBD 进行交互。USBD 通用串行总线驱动程序( USBD)是 USB 系统中负责管理通用串行总线的工作,位于主机上的一个软件。它在集线器驱动的主机控制器驱动之间翻译通信请求、处理总线列举、电源管理,以及 USB 事务的其他方面。这些通信不要求设备开发者编程。Windows 系统包含了总线类驱动 usbd.sys。在 Windows 系统中。USBD 属于 WDM 驱动。主机控制器驱动 主机控制器驱动与主机控制器硬件通信,而后者连接到总线上。Microsoft 提供了对两种接口的支持,即在图中所指出的通用主控制器驱动程序(Universal Host Controller Driver,或简称为 UHCD)和开放主控制器接口(Open Host Controller Interface,或简称为 OpenUCI)。这是不同的 USB 供应商所提出的用于管理一个系统中的USB 主控制器的两个软件接口。主机控制器驱动不需要设备开发者编程。符合开放主机控制器接口标准的控制器使用 openhci.sys 驱动,符合通用主机控制器接口标准的控制器使用uhci.sys 驱动。两种驱动都为 USB 硬件与 USB 总线类驱动通信提供一条途径。两种驱动采用不同的方式来完成主机控制器的功能。UHCD 把更多的通信负荷放在软件上,使用更简单、更便宜的硬件。OHCI 把更多的通信负荷放在硬件上,使用更简单的软件控制。尽管这两种驱动具有不同的实现,但任何区别对驱动开发者和应用程序的程序员都是透明的。(三)应用程序的设计PC 机上的应用程序是 USB 数据采集系统的重要组成部分,因为用户关心的是操作是否高效,以及如何处理和分析采集到的大量数据。这就要求应用程序有友好的界面和强大的数据处理能力。主机端应用程序的设计主要是实现从高速数据采集处理板读取处理后的数据、存储、显示处理结构以及向数据采集处理板发送控制命令,其作用在于与操作系统相互作用,加之该软件需要一个图形用户界面来控制所用的函数,在 Windows 系统(98/2000)下,采用 VC+来编制应用程序。利用 CreateFile 得到 USB 句柄,用 DeviceIoControl 来向设备驱动程序发送请求,完成在 EZ-USB FX2 中的数据批传输的读取与写入。程序实例如下:HANDLE DeviceHandle;DeviceHandle=CreateFile(zusb0,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL); / 得到设备 ezusb0 的句柄/DeviceIoControl(DeviceHandle, IOCTL_EZUSB_BULK_WRITE,LPVOID lpInBuffer, /输入数据存储地址指针/Sizeof(BULK_TRANSFER_CONTROL),19LPVOID lpOutBuffer, /输出数据存储地址指针/DWORD nOutBufferSize, /输出缓存大小/LPDWORD lpBytesReturned, /接收输出数据字节计数器变量的指针/NULL); /写数据到 EZ-USB FX2 设备/DeviceIoControl(DeviceHandle,IOCTL_EZUSB_BULK_READ,LPVOID lpInBuffer, /输入数据存储地址地/Sizeof(BULK_TRANSFER_CONTROL),LPVOID lpOutBuffer, /输出数据存储地址指针/DWORD nOutBufferSize, /输出缓存大小/LPDWORD lpBytesReturned, /接收输出数据字节计数器变量的指针/NULL); /从 EZ-USBFX2 设备中读数据/ColseHandle(DeviceHandle); /关闭 USB 句柄/实际的应用程序框图如图 4-8 所示。图 4-8 应用程序流程图(四)常见故障分析1硬件设计完成后,连接电缆,然后运行固件程序,但主机并未发现新设备。20这种现象一般是硬件电路的问题,需要检查 D+、D信号线是否接反、输入时钟信号是否正确以及复位电路是否正确等。2运行固件程序后,主机显示“发现新硬件”,但没有出现加载驱动的窗口。这种现象说明枚举没有成功。枚举分两个阶段,第一个阶段包括 5 个标准请求:获得设备描述符(80 06 00 01 00 00 00 40),设置地址(00 05 00 xx 00 00 00 00),获得全部设备描述符(80 06 00 01 00 00 00 12),获得配置描述符( 80 06 00 02 00 00 00 09),获得包括接口和端点信息的配置描述符(80 06 00 02 00 00 00 xx),括号内为 8 字节 Setup 包内容的 16 进制表示,其中设置地址中的 xx 表示设备的地址,它是一个 1127 内的数值,由主机确定。最后一个 xx 是全部配置描述符的长度或者为 FF。这 5 个标准请求正确完成后,主机上会弹出发现新硬件,加载驱动的对话框。枚举不成功最可能的原因是描述符错误或者发送给主机的数据长度与主机要求的不符,也有可能因为硬件电路设计不好而造成干扰过大,使得传输的数据出现错误,因此要着重检查描述符及请求处理程序。3主机弹出加载驱动窗口,但出现了“指定位置不包含硬件信息”错误。这种现象最可能的原因:固件程序里设备描述符中的 PID 和 VID 与 INF 文件中的不一致,将二者统一后即可解决。4主机弹出加载驱动窗口,但加载驱动后设备不可用。出现这种现象可能是枚举的第二阶段没有成功,或者加载的驱动程序与设备不匹配。枚举第二阶段一般只要设置接口(00 09 00 xx 00 00 00 00,其中 xx 是接口号,如果设备只有一个接口,那么该值为 01)成功,设备即可正常工作。对于这种情况需要调试驱动,可用调试驱动的软件如 Softice 来跟踪驱动的加载过程,其中着重检查建立管道列表的程序部分,通常问题就能解决。5设备驱动加载成功,无法读写数据或者读写数据出现错误。导致这种现象的原因有可能是固件程序、驱动程序、应用程序的问题,因此需进行联合调试。通常的方法是在固件程序的相应代码段设置断点,运行应用程序,然后用 Softice等工具跟踪到驱动程序,这样就可以找到问题出现在数据传输通道的哪一部分,然后进行相应的修改。五 系统工作过程上电后,ADS5422 一直工作,采样产生的数据是否存储到 IDT72V2113 中,由TMS320C6203B 的 DX0 引脚状态来决定。TMS320C6203B 进行初始化,外部扩展总线的XCE3 设置为同步 FIFO 读操作模式。DMA 通道 0 配置为每次传输 1 帧,每帧 1024 个半字,同步事件设置为外部中断 4,触发极性为高电平,初始化定时器 0,定时间隔为22ms。当外部同步信号到来时,启动定时器 0,手动启动 DMA 通道 0,同时设置 DX0 为低电平。ADS5422 采样产生的数据开始写入 IDT72V2113,当定时器 0 中断到来时,设置DX0 为高电平,关闭 IDT72V2113 的写使能,采样数据不再存储到 IDT72V2113 内。随着数据不断写入 IDT72V2113,当其内部的数据量大于 1023 个半字时,IDT72V2113 的将空标志信号(PAE)由低电平变为高电平,使得 TMS320C6203B 的外部中断信号有效,从而触发 DMA 传输,TMS320C6203B 的 DMA 通道 0 通过外部扩展总线(XB)读取 1024 个半字的数据,存储于内部 RAM 中,传输结束后向 TMS320C6203B 发送中断,通知21TMS320C6203B 处理数据。待其处理完数据后,通过 USB2.0 接口发送处理结果,然后重新启动 DMA 通道 0,进行下一次 DMA 传输。如此循环,直到处理完所有数据。当下一个外部同步信号到来时,进行下一轮数据采集处理过程。22六 结束语通过对 USB2.0

温馨提示

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

评论

0/150

提交评论