原创 开发EZ-Loader设备驱动程序

2008-11-8 22:46 4292 10 10 分类: MCU/ 嵌入式
开发EZ-Loader设备驱动程序 ( 转载)

2008-07-14 13:20



EZUSB系列芯片都具有通过下载固件和重枚举的方式来动态改变设备特性的能力


下载固件到EZUSB芯片中有两种方法:


1使用EZUSB控制面板,通过USB口下载固件;


2Keil 调试监控程序(Debug Monitor)通过RS232串口下载固件。


在开发过程中,两种方法均可采用。但是我们希望最终作出的产品能自动完成固件下载以及设备重枚举。这就需要一个特殊的、具有下载固件并完成设备重枚举功能的设备驱动程序,暂且称之为固件下载驱动程序EZUSB软件开发包,提供一个固件下载驱动程序的模板,即EZ-Loader DriverEZ-Loader驱动程序是一个非常简单的USB程序驱动模板,简化到用户只需要知道如何去干一件事情,即下载固件到USB外设。因此,可以使用该模板非常简单地开发出自己的设备驱动程序。


EZ-USB软件开发包提供的EZLoader驱动程序只需要很少的修改就可以支持一个专用的设备。因此,它不需要有较深的Windows驱动程序编程的知识背景,然而,用户应该非常熟悉Windows的即插即用Windows INF文件Windows的注册表和USB


EZLoader驱动程序是一个设备驱动程序,因此它需要Windows98的设备驱动工具包(DDK)。DDK对用户来说并不友好,在尝试制作EZLoader驱动程序之前,应该验证所用的DDK有能力创建设备驱动程序。


一个典型的基于EZUSB芯片的设备,如果它具有了固件下载驱动程序的功能,那么,它只需要有少量的固件存储器(EEPROM等)来存储设备VID/PIDVID/PID与主机系统中指定的设备驱动程序相关联。该设备驱动程序的唯一功能就是下载固件到外设的EZUSB芯片中。


开发EZ-Loader设备驱动程序需要工具


1Windows98 DDK Visiual C++ 5.0以上版本。


2、在安装Windows 98 DDK之前必须首先安装Visiual C++。在运行DDK build时会自动调用Microsoft C编译器;


3Intel 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 DDKbuild命令编译创建该驱动程序。


在修改EZ-Loader驱动程序之前,用户应该为定制的固件下载驱动程序创建一个新的目录,一旦产生了新的目录,则复制EZ=Loader下的所有源文件到该目录,使用DDKbuild命令编译生成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文件中的TARGETNAMEfiled到一个新名字来实现。
设计应用举例(1)


这里举例讲述生成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设备的PID0x1004


ezloader.cEZ-Loader的主要源程序文件,包含DriverEntry()和其他标准USB驱动程序的接入点。其中还包括进行固件下载的代码。
ezloader.h
EZ-Loader驱动程序的头文件。
firmware.c
包含用于USB设备固件的Intel Hex纪录格式的数组文件。用户可利用hex2c.exe软件转换Intel Hex纪录格式的固件到C代码并放入该文件中。重新编译驱动后,该固件代码将加入到新的驱动程序中。
loader.c
包含用于USB设备固件的Intel Hex纪录格式的数组文件,以便下载用户固件到外部RAM中。加入用户的固件延伸到外部RAM,该固件首先下载到EZ-USB外设,并允许下载到外部RAM
ezloder.rc
保存驱动程序版本信息的源文件。
resource.h
ezloader.rc的头文件
makefile
DDK build需要的文件
sources
DDK build需要的文件。终端用户可修改该文件,以生成一个不重名的驱动程序。

Ez-Loader驱动程序是一个非常简单的USB驱动程序模板。
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /3 下一条