| |
![]() |
设为首页 | |||
| 联系站长 | |||||
|
|
||||||
USB设备开发应用 |
||||||
| 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设备驱动程序需要工具 | ||||||
|
|
||||||
|
Windows98 DDK; Visiual C++ 5.0以上版本。 |
||||||
在安装Windows 98 DDK之前必须首先安装Visiual C++。在运行DDK build时会自动调用Microsoft C编译器; |
||||||
|
Intel HEX记录格式的文件转换为C文件的工具――hex2c.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设备驱动程序的一般步骤 | ||||||
| 新建一个目录,将EZUSB软件开发包中..\drivers\ezloader目录下的所有文件连同子目录拷贝到该目录下。注意:\lib\i386\free和..\lib\i386\cheched目录结构必须完整,否则在编译过程中将会出错。 编辑该目录下的sources文件,在TARGETNAME=ezloader一行中修改目标文件名。这里的文件是指由Windows DDK产生的驱动(.sys)文件。 利用hex2c.exe将固件的Intel HEX记录格式的代码文件转换为C文件,打开C文件,用其中的firmware[ ] 数组代替EZ-Loader Driver中提供的firmware.c中的数组。 利用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到一个新名字来实现。 |
||||||
| 设计应用举例(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设备的PID为0x1004。 开发固件装载设备驱动程序按照如下步骤进行: (1) 新建一个目录,假设为dev_io。将cypress\ usb\ drivers\ ezloader 目录下的文件和子目录的内容全部复制到该目录下。 (2) 用任何一个文本编辑器打开该目录下的sources文件,修改如下一行 (3) 利用hex2c.exe,将dev_io.hex文件转换为dev_io.c文件。 (4) 打开bal.c和firmware.c文件,将firmware.c中的firmware[ ]数组用dev_io.c中的firmware[ ] 数组替换; (5) 利用windows DDK创建目标驱动程序。运行build.exe,选择DDK的free或者是checked环境,进入到bal子目录,键入 (6)最后,要使得该驱动程序正确工作,还必须为它写一个安装信息,即.inf文件。它将设备的VID/PID绑定到特定的设备驱动程序上。该inf文件可存放在任何一个指定的目录下,当该USB设备首次被连接时,系统会自动询问该文件的位置。我们创建一个dev_io.inf文件。该文件内容如下: 下载 dev_io.inf文件
(7)修改开发板的VID/PID为0x0547/0x1004。将该USB外设的PID号写入到串行EEPROM中。有两种方法: (8) 重新插上开发板,Windows提示找到新硬件,并要求提供该设备的驱动程序。按照windows添加新硬件向导的提示,将dev_io.inf提供给windows. (9) 查看结果,发现驱动程序装入后,dev_io.hex固件就开始在开发板上运行了。 |
||||||
| 设计应用举例(2) | ||||||
|
对于上面的例子,只是编制了固件程序,对于用户来说,往往需要编制应用程序,对开发的USB设备进行管理和操作。在我们的开发套件的光盘上提供了这样的例子,固件程序类似于dev_io,同时在vb下编制了应用程序。在光盘SY2100 Examples目录下“EZUSB\按钮和灯主机控制”中。(这是一个标准的HID设备,无需编制驱动程序) 1)在“控制面板”中下载运行SY2100 Examples\EZUSB\按钮和灯主机控制\GPHID 下的GPHID.HEX固件,运行后LED显示0~F,如下图所示。
2)运行SY2100 Examples\EZUSB\按钮和灯主机控制\VBhid\VBhid应用程序,界面如下图所示;
可以通过应用程序对HID设备进行操作,同时在开发板上的操作也同时反应在应用界面上。 F1,F4按钮控制增加和减小数码的显示速度;F2,F3控制是否显示小数点。该设备的VID和PID为0547和7450。 |
||||||
|
||||||
|
||||||
|
||||||