微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于EZ-USB FX2的USB 2.0系统软件开发

基于EZ-USB FX2的USB 2.0系统软件开发

时间:11-08 来源:互联网 点击:

通用串行总线(Universal SeriaI Bus,简称USB)以其易插拔、无需配置、真正的即插即用等特性获得了广泛的市场认可。USB 1.O标准于1996年1月提出,传输速度为1.5 Mb/s的低速模式;1998年9月提出的USB 1.1标准则将速度提高到12 Mb/s的全速模式,并且增加了中断传输的传输方式。USB 2.0标准于2000年4月提出,将传输速度提高了40倍,达到了480 Mb/s的高速模式,足以满足大多数外设的速率要求

1 USB2.0接口芯片EZ-USB FX2的系统架构及开发 要点

CYPRESS的EZ-USB FX2是业界推出的第一个USB 2.0集成外围控制器。该器件集成有1个8051处理器、1个串行接口引擎(SIE)、1个USB收发器、8.5 kB片上RAM,4 kB FIFO存储器以及1个通用可编程接口(GPIF、)。FX2是一个相当完整的解决方案。

集成的USB收发器连接到USB总线管脚D+和D一,串行接口引擎sIE实现串行数据的编解码、检错、位填充和其他USB所需信号层的任务。最终sIE实现从USB接口 收发并行数据。

FX2中集成了增强型的8051处理器,他可工作在12MFIz,24 MHz和48 MHz的频率,并且一个指令周期只需4个时钟周期。单片机只是进行USB传输的维护及控制并不进行直接的数据传输。

为了实现USB 2.0的高速带宽,把FX2的端点FIF(和从属FIFO(实现和外部逻辑器件或处理器接口的FIFO)集成在一起以减少内部数据传输时间。并且FX2的FIFO有独特的"量子"特性,数据以I-JSB分组大小为单位被提交到FIF0,而不是每次一个字节。这简化了错误恢复,如果用经典的FIFO,当产生坏的(CR((循环校验码)时,所有的数据必然泛滥流出,因为他是坏数据;如果CRC是好的,则分组信息能从USB域交换到I/O(输入/输出)域。对外来说,他看起来仍然像FIF0,但代之以每次只传送1个字或1个字节为立即传送整个分组信息。端点缓冲器可通过固件设置为双、三或四缓冲器,与所需的数据量或灵活性有关。Fx2的FIFO量子特性及可编程设置多缓J冲为满足USB 2.0所需带宽提供了保障。

FX2片上只有RAM而无ROM,可以直接通过USB下载程序,实现所谓"软配置"。"软配置"提高了软件的调试及升级速度。

FX2与外部逻辑的2种接口方式:Slave FIFlos方式和通用可编程接口GPIF、方式。Slave FIFOs方式是从机方式,外部控制器可像普通FIF0一样对FX2的多层缓冲FIF、O进行读写。FX2的Slave FIFOs工作方式可设为同步或异步;工作时钟可选为内部产生或外部输入;其他控制信号也可灵活地设置为高有效或低有效。可编程接口(GPIF)方式是主机方式,可以软件编程读写控制波形,他几乎可以对任何8/16 b接口的控制器、存储器和总线进行数据的主动读写,非常灵活。

2系统软件的开发

USB系统软件主要包括设备固件、USB设备驱动程序和应用程序3个部分。

2.1固件架构

对于USB总线控制芯片,如果没有芯片与主机及外部逻辑通信的代码,芯片则无法完成响应功能。为了便于开发者缩短开发周期,CYPRESS为开发者提供了固件程序框架来实现循环查询的程序和与主机通信的端点中断程序。用户只需在这些框架里加入自己的代码就可以实现特定的功能。固件程序框架可以实现芯片初始化、处理USB标准设备请求、电源挂起管理等。为用户提供3类钩子函数:任务调度,标准设备请求解析,uSB中断处理。

EZ-USB FX2固件程序框架首先初识化所有内部状态量,然后调用用户初始化函数TD-Init(),然后初始化UsB总线设备接口为非配置状态,并同时打开中断。当完成上面的任务后,EZ-USB FX2固件程序就开始重新枚举,直到在端点0收到SETUP包为止。一旦EZ-USB FX2收到SETUP包,固件程序框架就开始进行任务分配、任务分配就是依次重复地执行以下过程:

(1)调用用户函数TD-Poll()。

(2)检测是否有未处理的设备请求,如果有,解析接收到的命令,进行适当响应。默认情况下,他会对给定的标准设备请求实现USB定义的响应;但是,框架提供分支程序允许用户程序解析处理或者覆盖特定的设备请求。

(3)检测USB核是否报告了一个USB挂起事件,如果有,调用用户函数TD~Susupend()。当返回值为真,检测是否有恢复事件,如果没有,则挂起处理器。当检测到恢复事件,调用用户函数TD-Resume(),并继续执行步骤(3)。当TD-Sustlpend()返回值为假时,则继续执行步骤(3)。通过以上流程,固件程序实现了简单的合作任务执行框架。

2.2驱动程序

在Windows平台下,USB驱动程序由3部分组成:USB设备驱动程序,USB总线驱动程序和USB主控制器驱动程序,他们必须遵循win32驱动程序模型(wDM)。其中,windows操作系统已经提供了处于驱动程序栈底的USB总线驱动程序和USB主控制器驱动程序。而USB设备驱动程序由设备开发者编写,他通过向USB总线驱动程序发送包含URB(USB Request Block)的IRP(I/0Request Packet),来实现USB外设之间的信息交换。当主机应用程序要对USB设备进行I/0操作时,他调用Windows API函数对win32子系统进行win32调用,由I/O管理器将此请求构造成一个合适的IRP,并把他传递给USB设备驱动程序。USB设备驱动程序接受到这个IRP后,根据IRP中的包含的具体操作代码,构造响应的URB并把他放到一个新IRP中,然后把此IRP传递到USB总线驱动程序,USB总线驱动程序根据IRP中所包含的URB执行响应的操作,并把操作结果通过IRP返还给USB设备驱动程序。USB设备驱动程序接受到此IRP后,将操作结果通过IRP返还I/O管理器。最后,I/O管理器将此IRP中的操作结果返还给应用程序,至此应用程序对uSB设备的一次I/O操作完成。

在CYPRESS公司的EZ-USB FX2开发包中,有一个通用的驱动程序。EZ-USB GENERAL PURP()SEDEVICE DRIVER(GPD),GPD提供了USB标准设备请求和数据传输的用户模式接口,可以直接用来开发上层应用程序,加快开发进度。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top