EZUSB系列芯片都具有通过下载固件和重枚举的方式来动态改变设备特性的能力。 下载固件到EZUSB芯片中有两种方法: 1、使用EZUSB控制面板,通过USB口下载固件; 2、用Keil 调试监控程序(Debug Monitor)通过RS232串口下载固件。 在开发过程中,两种方法均可采用。但是我们希望最终作出的产品能自动完成固件下载以及设备重枚举。这就需要一个特殊的、具有下载固件并完成设备重枚举功能的设备驱动程序,暂且称之为固件下载驱动程序。EZUSB软件开发包,提供一个固件下载驱动程序的模板,即EZ-Loader Driver。EZ-Loader驱动程序是一个非常简单的USB程序驱动模板,简化到用户只需要知道如何去干一件事情,即下载固件到USB外设。因此,可以使用该模板非常简单地开发出自己的设备驱动程序。 EZ-USB软件开发包提供的EZ-Loader驱动程序只需要很少的修改就可以支持一个专用的设备。因此,它不需要有较深的Windows驱动程序编程的知识背景,然而,用户应该非常熟悉Windows的即插即用、Windows INF文件、Windows的注册表和USB。 EZ-Loader驱动程序是一个设备驱动程序,因此它需要Windows98的设备驱动工具包(DDK)。DDK对用户来说并不友好,在尝试制作EZ-Loader驱动程序之前,应该验证所用的DDK有能力创建设备驱动程序。 一个典型的基于EZ-USB芯片的设备,如果它具有了固件下载驱动程序的功能,那么,它只需要有少量的固件存储器(EEPROM等)来存储设备的VID/PID。VID/PID与主机系统中指定的设备驱动程序相关联。该设备驱动程序的唯一功能就是下载固件到外设的EZUSB芯片中。 开发EZ-Loader设备驱动程序需要工具 1、Windows98 DDK; Visiual C++ 5.0以上版本。 2、在安装Windows 98 DDK之前必须首先安装Visiual C++。在运行DDK build时会自动调用Microsoft C编译器; 3、Intel HEX记录格式的文件转换为C文件的工具――hex<?XML:NAMESPACE PREFIX = ST1 />2c.exe。该工具将Intel HEX记录格式的输入文件转换成C代码数组。Cypress EZUSB 软件开发包提供了该工具,该工具的命令格式如下:(在\Cypress\usb\bin中) Hex2c <Intel_HexFile_name> <C_FileName> <Var_Name> 其中:Intel_HexFile_Name:为输出的Intel HEX文件名,由Keil工具生成。 C_FileName:是输出的C文件名。 Var_Name:是产生的C输出的文件中数组的名称。该参数为可选项,缺省时,数组名称为firmware。 创建EZ-Loader设备驱动程序的一般步骤 1、新建一个目录,将EZUSB软件开发包中..\drivers\ezloader目录下的所有文件连同子目录拷贝到该目录下。注意:\lib\i386\free和..\lib\i386\cheched目录结构必须完整,否则在编译过程中将会出错。 2、编辑该目录下的sources文件,在TARGETNAME=ezloader一行中修改目标文件名。这里的文件是指由Windows DDK产生的驱动(.sys)文件。 3、利用hex2c.exe将固件的Intel HEX记录格式的代码文件转换为C文件,打开C文件,用其中的firmware[ ] 数组代替EZ-Loader Driver中提供的firmware.c中的数组。 4、利用Windows DDK的build命令编译创建该驱动程序。 在修改EZ-Loader驱动程序之前,用户应该为定制的固件下载驱动程序创建一个新的目录,一旦产生了新的目录,则复制EZ=Loader下的所有源文件到该目录,使用DDK的build命令编译生成EZ-Loader驱动程序。 Sources文件和EZ-Loader source 一起告诉DDK build如何创建驱动程序。指定的源文件由驱动程序和驱动程序输出文件名组成。已提供的sources文件将产生一个名为ezloader.sys的驱动程序。根据build环境,该文件将产生于..\lib\i386\checked 或 ..\lib\i386\free目录下。这些目录将在build驱动程序产生或build报告一个错误之前产生。 当定制EZ-Loader驱动程序时,需要改变驱动程序的输出文件名,而不是ezloader.sys。那么,可以通过改变sources文件中的TARGETNAME=filed到一个新名字来实现。 这里举例讲述生成EZ-Loader固件装载驱动程序的详细过程,所选取的例子是"按钮和灯",在目录..\buttons and lights\dev_io\下的目标程序,它由Keil软件工具编译、链接后生成。设计的目标是在设备插上后,主机能通过USB总线自动下载该固件到EZ-USB外设芯片中,并自动运行该固件程序。 首先,需要分配设备的VID/PID号。采用重枚举的设备需要两个VID/PID,一个绑定到固件下载之前的设备驱动程序,另一个绑定到固件下载之后的设备驱动程序。在此,前一个驱动程序等待我们开发,后一个驱动程序采用EZ-USB软件开发包提供的ezusb.sys驱动程序。我们将PID=0X1004绑定到前一个驱动程序;PID=0X1005绑定到ezusb.sys驱动程序。VID均为0x0547。注意:这里的USB设备的PID为0x1004。 ezloader.c:EZ-Loader的主要源程序文件,包含DriverEntry()和其他标准USB驱动程序的接入点。其中还包括进行固件下载的代码。 |
文章评论(0条评论)
登录后参与讨论