Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2251829
  • 博文数量: 187
  • 博客积分: 1457
  • 博客等级: 上尉
  • 技术积分: 2423
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-13 09:41
个人简介

如需要绘制PCB,设计电路可以和我联系。sunhenu@163.com.

文章分类

全部博文(187)

文章存档

2017年(2)

2016年(2)

2015年(7)

2014年(13)

2013年(80)

2012年(83)

分类: LINUX

2012-06-02 20:33:44

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

EZ Loader Custom USB Firmware Loader Driver

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

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

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

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

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

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

然后到drivers目录

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

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

c:\ezloaderok目录

目录下文件有:

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

然后回到DOS界面

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

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

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

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.

;

%USB\VID_0547&PID_0080.DeviceDesc%=EZUSBDEV.Dev, USB\VID_0547&PID_0080

%USB\VID_04B4&PID_0081.DeviceDesc%=EZUSBDEV.Dev, USB\VID_04B4&PID_0081

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

 

 

%USB\VID_0547&PID_1004.DeviceDesc%=EZUSBDEV.Dev,USB\VID_0547&PID_1004

%USB\VID_0547&PID_1005.DeviceDesc%=EZUSB.Dev, USB\VID_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匹配。如图

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.

;

%USB\VID_0547&PID_1002.DeviceDesc%=EZUSB.Dev, USB\VID_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.

;

%USB\VID_0547&PID_2131.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2131

%USB\VID_0547&PID_2126.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2126

%USB\VID_0547&PID_2125.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2125

%USB\VID_0547&PID_2136.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2136

%USB\VID_0547&PID_2122.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2122

 

; EZ-USB FX

%USB\VID_0547&PID_2235.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2235

%USB\VID_0547&PID_2236.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2236

%USB\VID_0547&PID_2225.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2225

%USB\VID_0547&PID_2226.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2226

 

; EZ-USB FX2

%USB\VID_04B4&PID_8613.DeviceDesc%=EZUSB.Dev, USB\VID_04B4&PID_8613

%USB\VID_04B4&PID_1002.DeviceDesc%=EZUSB.Dev, USB\VID_04B4&PID_1002

 

[PreCopySection]

HKR,,NoSetupUI,,1

 

[DestinationDirs]

EZUSB.Files.Ext = 10,System32\Drivers

EZUSB.Files.Inf = 10,INF

EZUSBDEV.Files.Ext = 10,System32\Drivers

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%\System32\Drivers\ezusb.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%\System32\Drivers\ezloader.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"

USB\VID_0547&PID_0080.DeviceDesc="Cypress EZ-U1SB Development Board"

USB\VID_04B4&PID_0081.DeviceDesc="Cypress EZ-U1SB FX2 Development Board"

USB\VID_0547&PID_1002.DeviceDesc="Cypress EZ-U1SB Sample Device"

USB\VID_04B4&PID_1002.DeviceDesc="Cypress EZ-U1SB Sample Device"

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

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

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

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

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

 

USB\VID_0547&PID_2235.DeviceDesc="Cypress EZ-U1SB (2235) - EEPROM missing"

USB\VID_0547&PID_2236.DeviceDesc="Cypress EZ-U1SB (2236) - EEPROM missing"

USB\VID_0547&PID_2225.DeviceDesc="Cypress EZ-U1SB (2225) - EEPROM missing"

USB\VID_0547&PID_2226.DeviceDesc="Cypress EZ-U1SB (2226) - EEPROM missing"

 

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

 

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

USB\VID_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,EEPROMPID,VID,固件程序的VID,PID 都好了,就缺ezusb.sys这个通用驱动了。下面我们编译生成它的驱动文件。

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

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

如果出现USHORT错误界面如下

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

然后就好了。

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

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

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

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

完全符合。

 

阅读(29731) | 评论(5) | 转发(1) |
给主人留下些什么吧!~~

xuyuan54462013-12-18 11:32:56

你好,你可以加一下我QQ吗?我有胡奥多问题需要请教你,我们好好交流一下可以吗?QQ:919864832

亚洲飞鹰88662013-12-03 17:14:51

能加下qq吗?我qq1084847216,希望能帮助下!

亚洲飞鹰88662013-12-03 17:10:45

您好,我现在手中有Cypress公司FPGA开发板带的原代码。ezusb.sys、ezloader.sys这些原带的光盘下都有,请问下这个ezusb.sys和ezloader.sys还有ezmon.sys具体的作用是什么?就是用来识别设备的吗?我现在有点蒙,我现在设备管理器下发现设备了“Cypress EZ-U1SB FX2 (68613) - EEPROM missing",但是我用控制面板下载完固件程序后,执行send,无法获取端点信息,请求帮助

d12452013-11-21 10:51:21

为什么我一直有错误  在编译‘ezusbdrv.sys'文件时 会出现’NMAKE:U1073:don't know how to make'objchk\i386\ezloader.res ‘这个错误,不能得到ezusb.sys

lylppll2013-04-16 11:34:53

感谢!