今天把68013A-56焊接在CCD2的CPLD PCB上,配套的EEPROM存储器还没有焊接上,所以想用它试验一下Cypress的基础开发实例。研究了一上午,结果驱动都没装上。
我用一种我没想到的方式解决的这个问题,详见文章尾部叙述。
如果有人能给我一点提醒,非常感谢!Please contact "sunmaoduo@163.com"
插入设备(后文简称 FX2LP),显示Unknown Device如下图:
Figure 1
双击显示,代码43:
Figure 2
Figure 3
Figure 4
Figure 5
Figure 6
以上是插入设备时的反应。
Cypress提供的Vista(compatible with Windows 7)驱动文件包括cyusb.inf、cyusb.sys,根据TRM中的相关内容:
Figure 7
我修改了cyusb.inf文件中的相关项,现将cyusb.inf内容列出(大部分和Cypress Suite USB 3.4.7 附带的通用驱动配套inf文件相同):
————————————————————————————————————————
; Installation INF
for
the Cypress Generic USB Driver
for
Windows Vista
; Processor support
for
OS unknown platforms.
;
; (c) Copyright
2011
Cypress Semiconductor Corporation
;
[Version]
Signature
=
"
$WINDOWS NT$
"
Class
=
USB
ClassGUID
={36FC9E60-C465-11CF-
8056
-
444553540000
}
provider
=%CYUSB_Provider%
CatalogFile
=
CYUSB.cat
DriverVer
=
10
/
17
/
2011
,
3.4
.
7.000
[SourceDisksNames]
1
=%CYUSB_Install%
,,,
[SourceDisksFiles]
CYUSB.sys
=
1
[DestinationDirs]
CYUSB.Files.Ext
=
10
,System32\Drivers
[ControlFlags]
ExcludeFromSelect
= *
[Manufacturer]
%CYUSB_Provider%=
Device,NT,NTx86,NTamd64
;
for
all platforms
[Device]
%VID_04B4&PID_8613.DeviceDesc%=CyUsb, USB\VID_04B4&
PID_8613 ; 修改了VID、PID,下同
;
for
windows
2000
non intel platforms
[Device.NT]
%VID_04B4&PID_8613.DeviceDesc%=CyUsb, USB\VID_04B4&
PID_8613
;
for
x86 platforms
[Device.NTx86]
%VID_04B4&PID_8613.DeviceDesc%=CyUsb, USB\VID_04B4&
PID_8613
;
for
x64 platforms
[Device.NTamd64]
%VID_04B4&PID_8613.DeviceDesc%=CyUsb, USB\VID_04B4&
PID_8613
[CYUSB]
CopyFiles
=
CYUSB.Files.Ext
AddReg
=
CyUsb.AddReg
[CYUSB.HW]
AddReg
=
CYUSB.AddReg.Guid
[CYUSB.Services]
Addservice
= CYUSB,
2
,CYUSB.AddService
[CYUSB.NT]
CopyFiles
=
CYUSB.Files.Ext
AddReg
=
CyUsb.AddReg
[CYUSB.NT.HW]
AddReg
=
CYUSB.AddReg.Guid
[CYUSB.NT.Services]
Addservice
= CYUSB,
2
,CYUSB.AddService
[CYUSB.NTx86]
CopyFiles
=
CYUSB.Files.Ext
AddReg
=
CyUsb.AddReg
[CYUSB.NTx86.HW]
AddReg
=
CYUSB.AddReg.Guid
[CYUSB.NTx86.Services]
Addservice
= CYUSB,
2
,CYUSB.AddService
[CYUSB.NTamd64]
CopyFiles
=
CYUSB.Files.Ext
AddReg
=
CyUsb.AddReg
[CYUSB.NTamd64.HW]
AddReg
=
CYUSB.AddReg.Guid
[CYUSB.NTamd64.Services]
Addservice
= CYUSB,
2
,CYUSB.AddService
[CYUSB.AddReg]
; Deprecating
-
do
not use
in
new
apps to identify a CYUSB driver
HKR,,DevLoader,,
*
ntkern
HKR,,NTMPDriver,,CYUSB.sys
; You may optionally include a check
for
DriverBase
in
your application to check
for
a CYUSB driver
HKR,,DriverBase,,CYUSB.sys
HKR,
"
Parameters
"
,
"
MaximumTransferSize
"
,
0x10001
,
4096
HKR,
"
Parameters
"
,
"
DebugLevel
"
,
0x10001
,
2
HKR,,FriendlyName,,
%CYUSB_Description%
[CYUSB.AddService]
DisplayName
= %CYUSB_Description%
ServiceType
=
1
; SERVICE_KERNEL_DRIVER
StartType
=
3
; SERVICE_DEMAND_START
ErrorControl
=
1
; SERVICE_ERROR_NORMAL
ServiceBinary
= %
10
%
\System32\Drivers\CYUSB.sys
AddReg
=
CYUSB.AddReg
LoadOrderGroup
=
Base
[CYUSB.Files.Ext]
CYUSB.sys
[CYUSB.AddReg.Guid]
HKR,,DriverGUID,,
%CYUSB.GUID%
[Strings]
CYUSB_Provider
=
"
Cypress
"
CYUSB_Company
=
"
Cypress Semiconductor Corporation
"
CYUSB_Description
=
"
Cypress Generic USB Driver
"
CYUSB_DisplayName
=
"
Cypress USB Generic
"
CYUSB_Install
=
"
Cypress CYUSB Driver Installation Disk
"
VID_04B4
&PID_8613.DeviceDesc=
"
Cypress USB Generic Driver (3.4.7.000)FRANK64
"
; 修改成自定义的名字
CYUSB.GUID
=
"
{76C2F9FD-3238-48aa-A217-06A805FE4DC9}
"
; 利用GUIDGEN.EXE生成了新的GUID
CYUSB_Unused
=
"
.
"
————————————————————————————————————————
然后点击更新驱动程序,将目标文件夹指向我创建的.inf文件和对应的.sys文件所在的文件夹,确定,显示:
Figure 8
其实就是没有更新驱动…一切都没有变化(原因是没有成功识别设备的VID&PID):
Figure 9
Figure 10
回想一下,首次插入USB设备的时候,即便没有安装驱动,系统也应该能够通过标准请求得到USB设备默认的VID、PID吧,可是我插入USB设备后,VID、PID俱不显示,而没有VID&PID系统当然不知道安装什么驱动程序,也无法把我改好的.inf文件和设备捆绑起来。这是否说明问题出在硬件上,比如USB电缆?
Answer:不是硬件问题,也不是电缆问题!下面是次日上午,我发现的奇怪现象:
上午我把68013A without EEPROM(后文简称FX2LP)的板子拿到实验室,连接我的台式机(XP x86)和同学的笔记本电脑(Win7 x64),发现竟然都能识别出VID_04B4 & PID_8613,并且成功安装Cypress Suite USB 3.4.7提供的驱动(XP:wxp x86,7:wlh x64)。而我实验室和宿舍的两台笔记本(Win7 x64)的 USB2.0接口 均不能识别FX2LP的VID和PID。
当我决定把FX2LP插在USB3.0接口上试一试的时候,奇迹发生了(下列图中的Win7个性化效果不同于之前的截图,因为下列图截图于实验室笔记本win7,之前是宿舍笔记本win7):
这里有一个细节:
1、当首次用USB2.0接口连接FX2LP时,显示"unknown device"在"通用串行总线控制器",错误代码43,显然Windows给FX2LP安装了一个驱动(图4),不过驱动程序存在错误(43);
2、当首次用USB3.0接口连接FX2LP时,显示"未知设备"在"其它设备",而且没有安装任何驱动;
Figure 11
VID&PID均得到了识别
Figure 12
且成功安装了驱动(在启动计算机时,F8禁用了强制驱动签名)。
Figure 13
下图是安装完驱动的效果,名字上的FRANK64是我在inf文件中加的:
Figure 14
总结如下:
我比较一下成功识别和失败的计算机的不同:
1、失败的计算机除了带有USB2.0还带有USB3.0接口;
2、成功的计算机只带有USB2.0接口。
我想问题可能出在这个USB3.0接口上,我使用带有USB3.0接口的计算机的电脑时,当FX2LP连接在USB2.0接口上时,无法识别VIDPID,但是如果FX2LP连接在USB3.0接口时,可以成功显示VIDPID,并成功安装驱动。

