原创 CY7C68013自动下载固件驱动程序的配置

2013-1-21 12:06 2416 9 9 分类: FPGA/CPLD 文集: FPGA

CY7C68013自动下载固件驱动程序的配置

EZ Loader Custom USB Firmware Loader Driver

上面的一串英文是cypress公司的一个文档名称,是讲如何设置的,在这里保留一下,你可以google这个名称,然后找到那个文档读一下。

这里说一下CY7C68013A的C0加载方式是如何实现的。

首先我的系统是XP,系统装好了WINDDK,VC6.0.

1,你要有一个CY7C68013A的开发板,

2,安装CYPRESS的USB控制面板软件,它里面也包含了基本的驱动和一些固件例程。

24343357_1338640940VP4L.jpg

 

我用的是如图所示的开发包,这是第一个版本,好像,现在还有2个新的版本。我这里只是使用这个版本。安装以后目录如下

 

24343357_1338640946gqmp.jpg

然后到drivers目录

 

24343357_13386409543EZi.jpg

3,把EZLOADER文件夹,EZUSBDRV文件夹,EZUSBW2K.INF文件,这3个复制到另外的一个文件夹,我这里就直接放在C盘了。

4,从开始菜单,进入到WINDDK的编译环境,是DOS界面,启动它。

 

24343357_13386409647R5S.jpg

到c:ezloaderok目录

24343357_13392512867Ams.jpg

 

 

目录下文件有:

 

24343357_1338640976IZId.jpg

5,用记事本打开Sources文件,将其中的一段修改如下,to build那个英文说得很明白了。

 

24343357_13386409818X7W.jpg

然后回到DOS界面

24343357_1339251567SR8o.jpg

 

6,输入build –c,如果没有错误编译成功的话,界面如下

 

24343357_1338640996pLhx.jpg

Ezloader.sys,就是下载固件程序到cy7c68013RAM的驱动文件,说白点就是,它是C0加载方式的,第一个驱动文件,功能就是将固件程序下载到RAM中。

这里差点漏了说,在这之前,我们要把固件程序也就是HEX文件转化为.c 的文件,将这个.c 文件中的那个数组,替换fireware.c 中对应的数组,如图

 

24343357_1338641005YLWc.jpg

7,成功没有那么容易,我在编译的时候出现了这样的错误,

关于USHORT,类型不匹配的错误,找到相应的行,将数据变量强制类型转换,就好了。

USHORT,是unsigned short 类型的缩写。

8,现在ezloader.sys有了,接下来比较重要的就是inf文件了,我们就使用ezusbw2k.inf,做些修改,就可以达到我们的要求了,

先看看这个文件内容

[Version]

Signature="$CHICAGO$"

Class=USB

provider=%Cypress%

LayoutFile=layout.inf

[Manufacturer]

%Cypress%=Cypress

[Cypress]

;

; This is the VID/PID for the EZ-USB development board.  This device

; is bound to a version of the general purpose driver that will

; automatically download the Keil 8051 monitor to external RAM.

; Do not use this VID/PID for your own device or the monitor will

; wipe out your firmware.

;

%USBVID_0547&PID_0080.DeviceDesc%=EZUSBDEV.Dev, USBVID_0547&PID_0080

%USBVID_04B4&PID_0081.DeviceDesc%=EZUSBDEV.Dev, USBVID_04B4&PID_0081

上面棕色的这段话,比较重要,我要翻译一下啊,就是说VID0547PID0080和VID04B4PID0081这2个标示是用来下载KEIL的监控程序到CY7C68013RAM的驱动所用的标示,一般程序不要使用这2个标示,这说明,这个INF文件可以下载程序到CY7C68013RAM,所以我们可以使用它为模板,来修改一下,达到我们的目的。

 

 

%USBVID_0547&PID_1004.DeviceDesc%=EZUSBDEV.Dev,USBVID_0547&PID_1004

%USBVID_0547&PID_1005.DeviceDesc%=EZUSB.Dev, USBVID_0547&PID_1005

黄色是我添加的,PID1004就对应EZLOADER.SYS驱动,PID1005对应EZUSB.SYS驱动,它是USB通用驱动,CYPRESS公司提供的。

这里特别说明一下,CO加载模式需要EEPROM,在这里要使用USB控制面板将EEPROM写入C0 47 05 04 10 01 00 00,看紫色的,0410,就是1004的意思,很重要,USB刚刚接入的时候,芯片就是使用1004来进行前枚举的,也就是要首先加载EZLOADER.SYS这个驱动程序,这个驱动把固件程序下载到RAM中,然后芯片执行RAM中的程序,重新模拟USB接入,这就是后枚举了,当然了这个时候,就要使用固件程序里面设定的PID了。还有就是固件程序里面的PID要是1005,这样才可以和EZUSB.SYS匹配。如图

 

24343357_13386410087oN8.jpg

VID这里都是使用0547,所有的。

这一段话,很重要,理解明白,否则,你绝对会后悔。

 

;

; This VID/PID is used by several of the EZ-USB development kit

; samples.  This device is bound to the general purpose driver.

;

%USBVID_0547&PID_1002.DeviceDesc%=EZUSB.Dev, USBVID_0547&PID_1002

 

;

; The folowing PIDs are for all of the devices in the EZ-USB family.

; These are the hardcoded PIDs that will be reported by an EZ-USB

; device with no external EEPROM. Bound to the general purpose driver.

;

%USBVID_0547&PID_2131.DeviceDesc%=EZUSB.Dev, USBVID_0547&PID_2131

%USBVID_0547&PID_2126.DeviceDesc%=EZUSB.Dev, USBVID_0547&PID_2126

%USBVID_0547&PID_2125.DeviceDesc%=EZUSB.Dev, USBVID_0547&PID_2125

%USBVID_0547&PID_2136.DeviceDesc%=EZUSB.Dev, USBVID_0547&PID_2136

%USBVID_0547&PID_2122.DeviceDesc%=EZUSB.Dev, USBVID_0547&PID_2122

 

; EZ-USB FX

%USBVID_0547&PID_2235.DeviceDesc%=EZUSB.Dev, USBVID_0547&PID_2235

%USBVID_0547&PID_2236.DeviceDesc%=EZUSB.Dev, USBVID_0547&PID_2236

%USBVID_0547&PID_2225.DeviceDesc%=EZUSB.Dev, USBVID_0547&PID_2225

%USBVID_0547&PID_2226.DeviceDesc%=EZUSB.Dev, USBVID_0547&PID_2226

 

; EZ-USB FX2

%USBVID_04B4&PID_8613.DeviceDesc%=EZUSB.Dev, USBVID_04B4&PID_8613

%USBVID_04B4&PID_1002.DeviceDesc%=EZUSB.Dev, USBVID_04B4&PID_1002

 

[PreCopySection]

HKR,,NoSetupUI,,1

 

[DestinationDirs]

EZUSB.Files.Ext = 10,System32Drivers

EZUSB.Files.Inf = 10,INF

EZUSBDEV.Files.Ext = 10,System32Drivers

EZUSBDEV.Files.Inf = 10,INF

;---------------------------------------------------------------;

这下面一段是为EZUSB.SYS驱动设置的东西。

[EZUSB.Dev]

CopyFiles=EZUSB.Files.Ext, EZUSB.Files.Inf

AddReg=EZUSB.AddReg

 

[EZUSB.Dev.NT]

; copyfiles commented out for Win2K to avoid user intervention during install

; CopyFiles=EZUSB.Files.Ext, EZUSB.Files.Inf

AddReg=EZUSB.AddReg

 

[EZUSB.Dev.NT.Services]

Addservice = EZUSB, 0x00000002, EZUSB.AddService

 

[EZUSB.AddService]

DisplayName    = %EZUSB.SvcDesc%

ServiceType    = 1                  ; SERVICE_KERNEL_DRIVER

StartType      = 2                  ; SERVICE_AUTO_START

ErrorControl   = 1                  ; SERVICE_ERROR_NORMAL

ServiceBinary  = %10%System32Driversezusb.sys

LoadOrderGroup = Base

 

[EZUSB.AddReg]

HKR,,DevLoader,,*ntkern

HKR,,NTMPDriver,,ezusb.sys

 

[EZUSB.Files.Ext]

ezusb.sys

 

[EZUSB.Files.Inf]

ezusbw2k.Inf

 

;---------------------------------------------------------------;

这下面一段是为EZLOADER.SYS驱动设置的。和上面为EZUSB.SYS设置很相似。

[EZUSBDEV.Dev]

CopyFiles=EZUSBDEV.Files.Ext, EZUSBDEV.Files.Inf

AddReg=EZUSBDEV.AddReg

 

[EZUSBDEV.Dev.NT]

; copyfiles commented out for Win2K to avoid user intervention during install

; CopyFiles=EZUSBDEV.Files.Ext, EZUSBDEV.Files.Inf

AddReg=EZUSBDEV.AddReg

 

[EZUSBDEV.Dev.NT.Services]

Addservice = EZUSBDEV, 0x00000002, EZUSBDEV.AddService

 

[EZUSBDEV.AddService]

DisplayName    = %EZUSBDEV.SvcDesc%

ServiceType    = 1                  ; SERVICE_KERNEL_DRIVER

StartType      = 2                  ; SERVICE_AUTO_START

ErrorControl   = 1                  ; SERVICE_ERROR_NORMAL

ServiceBinary  = %10%System32Driversezloader.sys

要修改为ezloader.sys 了。

LoadOrderGroup = Base

 

[EZUSBDEV.AddReg]

HKR,,DevLoader,,*ntkern

HKR,,NTMPDriver,,ezloader.sys

 

[EZUSBDEV.Files.Ext]

ezloader.sys

 

[EZUSBDEV.Files.Inf]

ezusbw2k.Inf

 

;---------------------------------------------------------------;

 

[Strings]

Cypress="Cypress Semiconductor"

USBVID_0547&PID_0080.DeviceDesc="Cypress EZ-U1SB Development Board"

USBVID_04B4&PID_0081.DeviceDesc="Cypress EZ-U1SB FX2 Development Board"

USBVID_0547&PID_1002.DeviceDesc="Cypress EZ-U1SB Sample Device"

USBVID_04B4&PID_1002.DeviceDesc="Cypress EZ-U1SB Sample Device"

USBVID_0547&PID_2131.DeviceDesc="Cypress EZ-U1SB (2131Q/2131S/2135S) - EEPROM missing"

USBVID_0547&PID_2126.DeviceDesc="Cypress EZ-U1SB (2126S) - EEPROM missing"

USBVID_0547&PID_2125.DeviceDesc="Cypress EZ-U1SB (2121S/2125S) - EEPROM missing"

USBVID_0547&PID_2136.DeviceDesc="Cypress EZ-U1SB (2136S) - EEPROM missing"

USBVID_0547&PID_2122.DeviceDesc="Cypress EZ-U1SB (2122S) - EEPROM missing"

 

USBVID_0547&PID_2235.DeviceDesc="Cypress EZ-U1SB (2235) - EEPROM missing"

USBVID_0547&PID_2236.DeviceDesc="Cypress EZ-U1SB (2236) - EEPROM missing"

USBVID_0547&PID_2225.DeviceDesc="Cypress EZ-U1SB (2225) - EEPROM missing"

USBVID_0547&PID_2226.DeviceDesc="Cypress EZ-U1SB (2226) - EEPROM missing"

 

USBVID_04B4&PID_8613.DeviceDesc="Cypress EZ-U1SB FX2 (68613) - EEPROM missing"

 

USBVID_0547&PID_1004.DeviceDesc="Using ezloader.inf for EZ-Loader before ReNumeration (ezloader.sys)"

USBVID_0547&PID_1005.DeviceDesc="Cypress Widget afterReNumeration (ezusb.sys)"

 

EZUSB.SvcDesc="Cypress General Purpose U1SB Driver (ezusb.sys)"

EZUSBDEV.SvcDesc="Cypress General Purpose U1SB Driver (ezloader.sys)"

这里照葫芦画瓢,驱动安装以后自己可以看看效果。

说了这么多就是要把,原来ezusbw2k.inf中的ezmon.sys,替换为ezloader.sys,

不过网上一个网友说他用ezloader替换ezmon没有成功,但是,我这里成功了,也许是其他地方设置有关吧。

现在,我们ezloader.sys,ezusbw2k.inf,EEPROM的PID,VID,固件程序的VID,PID 都好了,就缺ezusb.sys这个通用驱动了。下面我们编译生成它的驱动文件。

这里涉及的内容比较多,要耐心琢磨和细心。

9,和编译生成ezloader.sys一样,看我编译成功后的界面。下图。

 

24343357_1338641016HYy1.jpg

如果出现USHORT错误界面如下

 

24343357_1338641021Saa2.jpg

找到对应的行数添加USHORT强制类型转换。如下图。

 

24343357_1338641023haol.jpg

然后就好了。

10,接下来把ezloader.sys和ezusb.sys都复制到C:windowssystem32drivers目录下面,这个目录下面有很多其他的驱动,真是物以类聚啊。

11,上电,接上USB线,弹出安装驱动的对话框,不要自动寻找,要手动一步一步到

24343357_13386410309lYY.jpg

24343357_133864103670s5.jpg

24343357_1338641040RGdh.jpg

24343357_1338641045Xy6e.jpg

24343357_1338641047x23u.jpg

24343357_1338641052LndE.jpg

24343357_1338641058kp13.jpg

 

 

 

 

 

 

 

看到了吧,重枚举以后驱动程序就是EZUSB.SYS了,看看VID和PID.

因为前枚举比较快,看不到前面设置的STRING,如果你将固件程序里面的PID设置为1004的话,那么你这个时候看见的就是"Using ezloader.inf for EZ-Loader before ReNumeration (ezloader.sys)"了。我有一次忘了修改固件程序的PID,结果就是显示这个驱动,当时还感觉很奇怪呢。呵呵。

 

24343357_1338641060njKp.jpg

完全符合。 

文章评论0条评论)

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