| 基于EZ-USB FX2LP的USB2.0高速数据流传输系统设计 |
| 类别:网文精粹 |
| 基于EZ-USB FX2LP的USB2.0高速数据流传输系统设计
Design for Streaming High-speed Data Based on EZ-USB FX2LP 摘要:设计了一种基于EZ-USB FX2LP的USB2.0高速数据流传输系统。给出了完整的软硬件设计方案,包括硬件电路设计调试、编写固件程序、驱动程序、应用程序。对其中的关键性问题做了分析归纳。最后,给出了高速模式下块传输和同步传输的测试数据。实践证明,此设计稳定可靠,具有良好的移植性,在高速数据传输系统中具有广泛的应用价值。 关键词:高速数据传输;EZ-USB FX2LP;通用串行总线;CY7C68013A芯片;API Abstract: A high-speed streaming data system based on EZ-USB FX2LP was designed. Design proposal including hardware and software is presented, including hardware circuit, firmware of MCU, driver and application programs of host. The solution to some crucial questions is analyzed. At last, A test report about bulk transfer and isochronous transfer in high-speed mode is given. The practice shows that this design works stably and reliably. With good portability, it will have a wide application in high-speed data transmission system. Key Words:high-speed data transmission;EZ-USB FX2LP;USB2.0;CY7C68013A;API 1 系统设计 USB(Universal Serial Bus 通用串行总线)接口具有连接结构简单、支持热插拔、功耗小的优势。其实用性使得USB接口得到了广泛应用。USB协议复杂性使得USB接口的设计具有相当的难度。本文给出的基于EZ-USB FX2LP的高速数据流传输系统的软硬件设计,符合USB2.0标准,具有灵活高效的优势和特点。各部分关系如图1所示。 图1 通过固件程序的调度, EZ-USB FX2LP把应用设备传入的数据打包为具有USB协议的信息,或是把主机传入的数据进行解包去掉USB协议信息后送给应用设备。应用程序通过对驱动程序的调用,完成与USB设备即EZ-USB FX2LP的数据传输。 2 硬件设计 选用CY7C68013A芯片,其采用的构架是EZ-USB FX2LP,是新一代符合USB2.0高速控制器的构架。与EZ-USB FX2相比,其功能上的增强概述如下: 较低功耗,FX2LP采用的是内部1.8V稳压器。可以满足未配置电流(100mA)和挂起电流(500μA)的所有USB总线供电要求;启动pull-up on D+,复位计时不存在任何限制; 用于异步写入的FIFO地址保持时间(tFAH)为10ns,FX2的地址保持时间(tFAH)为70ns; GPIF数据中加入ECC(Error Checking and Correcting,错误检查和纠正)。同时FX2LP解决了在高带宽同步传输中的FX2数据PID(Packet ID,包标识)失配的问题。 2.1 硬件设计 CY7C68013A的关键管脚除了电源、地、差分数据线D+和D-外,IFCLK,WAKEUP#,RESERVED,EA,SDA,SCL分别必须要接上拉或者下拉电阻。只有正确的连接,主机才可以正确的找到并识别出USB设备。如果使用总线供电模式。建议使用专门的复位芯片,免去了反复插拔设备,并且可靠使系统能上电复位。 2.2 硬件调试 当USB设备,即CY7C68013A连接上主机时,如果D+和D-上存在一个压差值,主机会发现USB设备,并向CY7C68013A请求VID(Vendor ID,厂商ID)和PID(Product ID,产品ID),并根据PID和VID加载对应的驱动程序。 设备上电后,如CY7C68013A没有连接EEPROM,固件提交默认VID(04B4)和PID(1004),主机加载默认驱动CyUSB.sys后。通过设备管理器能看到USB总线上有名为:“Cypress EZ-USB FX2LP - EEPROM missing”的设备。则CY7C68013A被系统正确识别。,用EZ-USB FX2LP Development kits(EZ-USB FX2LP开发包)提供的CyConsole.exe(Cypress USB Console,Cypress USB控制台),可以进行对芯片查看配置和固件下载的操作。 3 软件设计 3.1 Firmware(固件)程序 固件程序运行在CY7C68013A里集成的微控制器上,完成的功能是:向USB主机提交VID和;以及对USB设备Interface(接口)配置和Endpoint(端点)的配置;通过固件程序的调度,完成端点与USB主机之间的数据传输。在EZ-USB FX2LP里面,对于同步传输,可以通过对EPxISOINPKTS寄存器[2]的配置,使用High-bandwidth Isochronous Endpoint(高带宽同步端点)。 3.2 驱动程序 USB2.0以其协议的复杂性换来了其使用上的易用性。使得驱动程序的开发成为USB开发的一个难点。在Cypress提供的EZ-USB FX2LP开发包里面包含了CyUSB.sys[3]。这是一个符合WDM规范支持USB2.0的通用设备驱动程序。如果不对数据传输速率有着苛刻的要求,开发中只进行少量的修改即可满足应用需求。 3.3 应用程序 在对EZ-USB FX2LP的驱动CyUSB.sys调用中采用了两种新的方法: 第一种是使用传统的DeviceIoControl()函数与驱动进行交互,控制硬件设备读写。但IOCTL(IO Control Code,IO控制字)和访问EZ-USB GPD(EZ-USB General Purpose Driver,EZ-USB通用驱动程序)的IOCTL完全不同,具体定义可参考Cypress有关CyUSB技术文档[3]。用户可通过这些底层调用完成操作。第二种是使用Cypress提供的CyAPI.lib[4],里面包含9个类。所有USB设备都包含至少一种设备配置,而每一种配置又包含一个或多个接口,USB接口通常包括一个或多个端点。CyAPI.lib反映了这种结构,如表1所示: CcyIsoPktInfo 定义了两个公共变量Status和Length,调用此类的实例返回同步传输的状态和数据包数量。 通过调用以上的类,可以完成与硬件之间的数据传输。很多时候的应用需要把系统的数据吞吐能力发挥到极限,这时可以使用CyAPI.lib程序库提供的BeginDataXfer()、WaitForXfer()、FinishDataXfer()的底层异步方法。在应用程序开始处理数据传输之前加载一个队列的传送缓冲,这样做的好处是可以使应用程序对缓冲进行持续读写操作而无需中断设备传输。具体函数定义可参考相关技术文档[4]。这些类是对第一种方法的封装,使用比较简洁。使用时需要在工程中引用CyAPI.lib,另注意加上头文件CyAPI.h和cyioctl.h。在应用程序中对数据的采集传输处理和用户界面的人机交互处理设计上,建议采用多线程技术,这样做的好处:大大提高数据采集传输效率,并且应用程序的操作不会给数据处理带来影响。给出应用程序中块传输代码中异步调用部分,同步传输应用可以参考进行编写: // 在定义并且打开了USB设备之后 OVERLAPPED outOvLap, inOvLap;// 使用Overlapped的异步IO机制 ... for (i=0; i< QueueSize; i++) //定义一个缓冲队列 contexts = dlg->InEndPt->BeginDataXfer(buffers, len, &inOvLap); //调用BeginDataXfer初始化,调用Overlapped对象,返回指针保存到contexts ... if (!dlg->InEndPt->WaitForXfer(&inOvLap, Timeout)) //等待数据传输完成 {dlg->InEndPt->Abort(); // 复位管道 WaitForSingleObject(inOvLap.hEvent,INFINITE); // 等待直到数据传送完成} if (dlg->InEndPt->FinishDataXfer(buffers, rLen, &inOvLap, contexts)) // 调用FinishDataXfer()完成一次数据传输,释放临时变量 {.....// 数据读写处理} 4 高速带宽测试结果及分析 测试计算机环境:CPU:Intel P4 2.40 GHz;芯片组:Intel 82875P;USB控制器:Intel USB2.0 EHCI;内存:512M DDR400;硬盘:SATA 120G;操作系统:Windows 2000(SP4)。 测试方法:当传输方式为IN(数据流由设备到主机)时,FPGA模拟一个数据源,由外部时钟源推入CY7C68013A,固件对数据进行打包后送给主机,主机应用程序监视输入数据,写入硬盘供误码分析,统计CPU占用率。当传输方式为OUT(数据流由主机到设备)时由应用程序提供数据源,固件收到主机数据后发送给FPGA。测试结果如表2所示: 应用程序中上位机缓冲设为4重缓冲的测试结果,每种方式连续测试数据量超过10G,测试过程中,硬件软件均运行稳定。应用程序中适当设置上位机缓冲队列的块数,能使CPU使用率和数据传输速率更为平稳。总结测试的结果,影响系统数据传输速率有几个方面:1.固件程序中FIFO缓冲设置,相关寄存器的设置。2.应用程序对驱动程序的API异步调用效率低。3.应用程序中对输入数据流的缓冲方式。除此以外计算机主板的总线结构,USB2.0主控制器连接主板总线的方式,计算机的整体性能对USB系统性能有着重要的影响。 5 结束语 文章对基于EZ-USB FX2LP构架的CY7C68013A软硬件设计上进行了较为详细的描述,给出的设计符合USB2.0标准,该高速数据流传输平台设计具有高带宽的特点,并且软硬件运行均稳定可靠,移植性好。可以根据应用的需求,采用适合的传输方式,以适应不同的实时或是非实时高速数据流传输应用场合。 本文的创新点是:采用构架为EZ-USB FX2LP的USB控制器进行高速数据流传输,并且在应用程序的编写中,对USB设备的驱动访问采用面向对象的类的方法,在数据读写,人机交互多任务的处理上使用了多线程编程技术,使得USB上位机应用程序的开发更简洁和高效。 |
- B2B搜索“联姻”..
- 2008-9-11
- HOLTEK推出H..
- 2008-9-11
- 关于ISPRO校验..
- 2008-9-11
- 利用适配板实现免制..
- 2008-9-11
- GSMSMS模块客..
- 2008-9-11
- ISPro下载型编..
- 2008-9-11
- C语言之stati..
- 2008-9-11
- 完美结合语音芯片与..
- 2008-9-11
- 又做一工具:ATm..
- 2008-9-11
- QE128的DEM..
- 2008-9-11
- 特别推荐一款高性能..
- 2008-9-11
- SATA硬盘使用解..
- 2008-9-16
- EPoX主板几种前..
- 2008-9-16
- 反其道行之降低电压..
- 2008-9-16
- 基于ATM8051..
- 2008-9-16
- THB6016H测..
- 2008-9-16
- 显示器黑屏的解决办..
- 2008-9-16
- 你会买网络服务器吗..
- 2008-9-16
- 酷漫教你制作只带一..
- 2008-9-16
- 酷漫破解网页右健锁定
- 2008-9-16



