这里举例讲述生成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文件,修改如下一行
TARGETNAME=ezloader
为
TARGETNAME=dev_io
这一名称将影响到最后产生的.sys文件的名称。
(3) 利用hex2c.exe,将dev_io.hex文件转换为dev_io.c文件。
Hex2c dev_io.hex dev_io.c
现在,dev_io.c包含一个Intel HEX记录结构的数组,被称为firmware.
(4) 打开bal.c和firmware.c文件,将firmware.c中的firmware[ ]数组用dev_io.c中的firmware[ ] 数组替换;
(5) 利用windows DDK创建目标驱动程序。运行build.exe,选择DDK的free或者是checked环境,进入到bal子目录,键入
build -c
开始创建驱动程序。这取决于所选的编译环境,编译成功的话,将在\\..\dev_io\lib\i386\checked或..\dev_io\lib\i386\free目录下产生一个dev_io.sys文件,这就是我们需要的固件装载设备驱动程序(目标驱动程序),将该驱动程序复制到c:\windows\system32\drivers目录下。
(6)最后,要使得该驱动程序正确工作,还必须为它写一个安装信息,即.inf文件。它将设备的VID/PID绑定到特定的设备驱动程序上。该inf文件可存放在任何一个指定的目录下,当该USB设备首次被连接时,系统会自动询问该文件的位置。我们创建一个dev_io.inf文件。该文件内容如下:
下载 dev_io.inf文件
(7)修改开发板的VID/PID为0x0547/0x1004。将该USB外设的PID号写入到串行EEPROM中。有两种方法:
第一种:使用EEPROM编程器。将B0 47 05 04 10 01 00 七个字节编程到串行EEPROM的前7个单元中。
第二种:使用EZUSB控制面板。单击Download按钮,选择\\…\Cypress \usb\ Examples\ EzUsb\ Vend_Ax\ Vend_Ax.hex文件,几秒后该文件将下载到EZ-USB芯片中,接着修改ezusb开发板的PID为上一步中.inf文件所指定的PID的值,设置Req=0xA2,Dir=OUT,最后,单击Vend_Req按钮,即可将新的PID值写入到串行的EEPROM中。
(8) 重新插上开发板,Windows提示找到新硬件,并要求提供该设备的驱动程序。按照windows添加新硬件向导的提示,将dev_io.inf提供给windows.
(9) 查看结果,发现驱动程序装入后,dev_io.hex固件就开始在开发板上运行了。 |