USB通讯入门(二)CyUSB.inf文件修改后,设备管理器可以识别出USB设备,但Cypress USB Console没有任何显示

       Cypress提供的通用驱动程序是CyUSB.sys,对应的驱动信息文件是CyUSB.inf。通过CyUSB.inf文件安装通用驱动后,插入FX2LP开发板,计算机设备管理器和Cypress USB Console都可以正常识别出开发板设备,在设备管理器的显示为"Cypress EZ-USB FX2LP No EEPROM",在Console中读出来的VendorID为0x04B4, ProductID为0x8613,这正是.inf文件中描述的FX2LP默认VID&PID,以及该默认VID&PID所对应的设备描述,该默认描述在.inf文件的[Strings]节,其中有这样一句代码:

VID_04B4&PID_8613.DeviceDesc="Cypress EZ-USB FX2LP No EEPROM"

    为了能够自定义USB设备在设备管理器中的显示,我想根据Cypress USB Console User's Guide中的Device Driver对.inf文件修改的说明,改成自己预想的设置。这里先对CyUSB.inf文件简单说明一下。

; Installation INF for the Cypress Generic USB Driver for Windows 98ME/2000/XP
;

[Version]		   //版本段
Signature="$CHICAGO$"		   //Signature一般必须为此值
Class=USB		   //驱动程序的类别,说明此为USB设备
ClassGUID={36FC9E60-C465-11CF-8056-444553540000}		   //对应USB设备的GUID值。不同设备的GUID值不同
provider=%PROVIDER%		   //INF文件的提供者,%PROVIDER%是一个字符串标记,在[String]段可以看到它所指的字符串


[SourceDisksNames]		   //定义安装源文件所在磁盘
1=%CYPRESS_INSTALL%,,,		   //表示安装在磁盘1

[SourceDisksFiles]		   //待安装的源文件,即待安装的驱动程序
CyUSBME.sys = 1		   //表示要安装到哪个目录,具体那个目录在[DestinationDirs]段说明
CyUSB.sys = 1
CyUSB.spd = 1

[Manufacturer]		   //此节用来指定设备供应商的名称,这个名称同时也是Model段
%MFGNAME%=Cypress	     //Cypress为Model段

[Cypress]		         //此为[Model]段,并列出相应的安装段,可以列写多个设备的PID,VID。用来表示响应不同的固件

; Cypress FX2LP default ID
%VID_04B4&PID_8613.DeviceDesc%=CYUSB, USB\VID_04B4&PID_8613	//CyUSB被设置为安装段

; Cypress FX1 default ID
%VID_04B4&PID_6473.DeviceDesc%=CYUSB, USB\VID_04B4&PID_6473

; Cypress FX2LP Example Device.  DVK firmware examples use this VID/PID
%VID_04B4&PID_1004.DeviceDesc%=CYUSB, USB\VID_04B4&PID_1004

[DestinationDirs]
CyUSBME.Files.Ext = 10,System32\Drivers	//意思是把CyUSBMe.Files.Ext,CyUSB.Files.Ext里的东西指定了方向,即右边的路径。这里没有操作,10,表示C盘下的windows目录
CyUSB.Files.Ext = 10,System32\Drivers	//CyUSBMe.Files.Ext ,CyUSB.Files.Ext是两个段,在后面定义了,可以看到这两个段代表了两个驱动文件SunwodaUSB.sys

[CyUSB]				        //此为安装段,开始向[DestinationDirs]所示路径安装文件
CopyFiles=CyUSB.Files.Ext		//CopyFiles是个指令,即将=后面的文件CyUSB.Files.Ext安装到[DestinationDirs]所示的路径
AddReg=CyUSB.AddReg		    //在注册表中添加相应的新的子键,进行相应操作,操作[CyUSB.AddReg]段中放着

[CyUSB.HW]
AddReg=CYUSB.AddReg.Guid		//在HW下的注册

[CYUSB.NT]				        //在NT(大于win98的平台)平台下的安装及注册
CopyFiles=CyUsb.Files.Ext
AddReg=CyUsb.AddReg

[CYUSB.NT.HW]
AddReg=CyUsb.AddReg.Guid

[CYUSB.NT.Services]			//添加安装文件的服务信息
Addservice = CyUsb, 0x00000002, CyUsb.AddService  //Addservice是个操作指令格式:Addservice=需要服务的安装段名,0x00000002是固定值,安装服务信息段名

[CYUSB.AddService]			    //安装服务信息段名
DisplayName    = %CYUSB.SvcDesc%
ServiceType    = 1                  ; SERVICE_KERNEL_DRIVER
StartType      = 3                  ; SERVICE_DEMAND_START
ErrorControl   = 1                  ; SERVICE_ERROR_NORMAL
ServiceBinary  = %10%\System32\Drivers\CyUSB.sys		//这个表示驱动所在的路径,最终可在设备管理器中看到
LoadOrderGroup = Base

[CYUSBME.AddReg]			    //不同安装段的注册表操作
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,CYUSBME.sys

[CYUSB.AddReg]			        //不同安装段的注册表操作
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,CYUSB.sys

[CYUSBME.Files.Ext]			//待安装的驱动程序文件
CYUSBME.sys

[CYUSB.Files.Ext]			    //待安装的驱动程序文件
CYUSB.sys

[CYUSB.AddReg.Guid]
;HKR,,DriverGUID,,%CYUSB.GUID%

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

[Strings]					        //一些显示的字符串,在设备管理器中可以看到
PROVIDER="CyPress"
MFGNAME="Cypress"
CYPRESS_INSTALL="Cypress Generic USB Driver Installation Disk"
VID_04B4&PID_8613.DeviceDesc="Cypress EZ-USB FX2LP No EEPROM"
VID_04B4&PID_6473.DeviceDesc="Cypress EZ-USB FX1 - EEPROM missing"
VID_04B4&PID_1004.DeviceDesc="Cypress EZ-USB Example Device"
CypressUSB.SvcDesc="Cypress Generic USB Driver"

CYUSB.GUID="{02841D59-0003-441A-A625-5D0B1473F2DC}"

 我在.inf文件里面基本把Cypress 的信息都改成了自己的信息,然后用Visual Studio中的GUID生成工工具生成了一个新的GUID放到CYUSB.GUID处;

之后,我重新安装了驱动程序,插入FX2LP开发板之后,选择更新设备驱动程序,但提示为你的设备是最佳驱动程序已安装,如下图所示,而设备的显示名称并没有变为我想要的样子。

也就是说,虽然点击了更新设备驱动程序,但由于系统检测到系统中已经安装好了CyUSB.sys驱动,所以就不再更新了。为了解决这个问题,我卸载了设备,然后重新安装驱动,这次选择我已经修改好了的.inf文件,成功安装后,设备还是原来的显示。在C:\Windows\INF中,找到了好很多个oemx.inf文件,从oem1.inf到oem42.inf,其中ome38.inf, oem39.inf, oem40.inf, oem41.inf,oem42.inf都是这几天自己调试FX2LP开发板时安装的,每个.inf文件都有一些地方不一样,系统把所有安装.sys驱动时的.inf文件全部重命名为oemx.inf了。而我最后自定义修改的.inf文件就是oem42.inf文件了。但当前FX2LP开发板绑定的还是oem39.inf文件,如下图所示。

自然而然我就想到一个问题了,即然多个oemx.inf文件都同时存在于C:\Windows\INF中,怎么样在这些文件中切换,以能够使设备绑定自己想要的.inf文件。试了好久都没成功,最后在更新驱动程序中,发现了“让我从计算机上的可用驱动程序列表中选取”,如下图所示,点击之后,在里面找到了与FX2LP兼容的所有驱动,即从oem38-oem42所对应的驱动的设备显示名。

然后选择了与oem42.inf对应的名称,更新好驱动后,终于在计算机设备管理器中能够识别出开发板,并且用自定义的名称显示,如下图所示:

这个时候心情很激动,毕竟插入的设备可以显示自己想要的名称,也算是一点点成就感。但很快又有新的问题出现了,在Cypress USB Console中识别不出该设备,没有任何显示,如下图所示:

既然已经知道了怎么样让设备绑定不同的.inf文件,于是自然就想切换成其他的驱动,看看能不能在Console中显示。结果是选择Cypress默认的oem38.inf,设备能够马上在Console上得到显示,而其他不同的oemx对应的驱动,则不一定能够识别与显示。这里说不一定的意义是有的可以识别出来,而有的确不能识别,有的在切换几次又能够识别出来,没有任何规律可循。很是气恼,在各种USB驱动开发群以及论坛上提问,也没人来回答。只能自己找问题,一切还得回到最基本的技术文档。我把Cypress USB Console User's Guide又通读了一遍,看看能不能的找到什么突破口。终于,在最后一节Using Custom Drivers中找到了这样一段话:

Device drivers can be accessed / identified in the Windows operating system by a unique number called their Global Unique IDentifier (or GUID). Two drivers with the same GUID would not play well together on a system. (The Unique part of GUID would have been violated.)

 

The CyUSB.sys driver provides a mechanism to allow customers to register the driver with a new GUID that they create. Any application that desires to access devices via that new driver GUID would also need to know the GUID.

 

CyConsole was designed with provision for connecting to other CyUSB.sys drivers that have different GUIDs. On the Misc. tab sheet you will notice a drop-down list labelled Access devices attached to this driver . The drop-down list is populated with the file names of all copies of CyUSB.sys that are installed in the system. (It gathers the list from the Windows registry.)

其中第一段的意思是说每一个驱动都必须有一个自己的GUID,如果两个驱动有相同的GUID,在系统中将产生混乱。第二段的意思是CyUSB.sys提供了一个用户能够用自己的GUID来注册驱动的机制。想要通过GUID来与设备进行通讯的任何应用程序都必须知道这个GUID。第三段的意思是CyConsole提供了与拥有不同GUID的CyUSB.sys连接的办法,这个办法就是Misc.选项卡,在其中的下拉列表中可以选择系统中已经安装好的不同的CyUSB.sys的副本。

 

到这里终于明白了,CyConsole之所以不能识别出更新的设备,是因为在这里没有选择对的CyUSB.sys驱动,选择不同的驱动后,果然在设备列表栏里就识别出了设备,如下图所示:

与设备管理器中显示的名称一致,到这里就算把问题解决了。

PS:

为了能够让设备绑定新的驱动,我试过了很多方法,首先是把C:\Windows\INF中与Cypress USB有关的.inf都删除,便后续又全部重新都有了;然后我想在.inf文件中有注册表的操作,应该是注册表中有驱动的相关信息,所以到注册表中去寻找,注册表中与USB有关的子键有三个位置:

第一个是硬件子键:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum

第二个是服务子键:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services

第三个是类子键:HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class

很多在CyUSB.inf中注册表操作段的信息都可以这些地方找到。

我把注册表中这些项都删除了,但后来发现C:\Windows\INF中这些oemx.inf文件还是出现了,这里我还是没搞懂是怎么回事?

如果有大佬知道,请不吝赐教!!!

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: CSDN是一个知识分享平台,而cyusb.dll是一个与Cypress USB开发框架相关的动态链接库文件cyusb.dll是Cypress Semiconductor Corporation开发的USB驱动程序。它是Cypress USB开发框架的一部分,用于与CypressUSB设备进行通信。这个动态链接库文件包含了一系列的函数和操作,开发人员可以调用这些函数来控制和管理Cypress USB设备。 使用cyusb.dll,开发人员可以实现各种与Cypress USB设备相关的任务,比如设备的连接与断开、设备的配置和初始化、数据的传输等。它为开发人员提供了便捷的接口和丰富的功能,使得他们能够更加简单和高效地开发基于Cypress USB设备的应用程序。 在使用cyusb.dll之前,开发人员需要在他们的开发环境中正确地配置和引入这个动态链接库文件。随后,他们可以利用cyusb.dll提供的函数和操作来编写他们的应用程序,并通过这些函数与Cypress USB设备进行交互。 总而言之,cyusb.dll是一个与Cypress USB开发框架相关的动态链接库文件,它为开发人员提供了便捷的接口和丰富的功能,使得他们能够更加方便地开发基于Cypress USB设备的应用程序。 ### 回答2: CSDN是一个知名的技术社区,任何关于cyusb.dll的提问都可以在CSDN上找到答案。cyusb.dll是一个用于USB设备驱动开发的动态链接库。使用cyusb.dll可以方便地进行USB设备的访问和控制。 cyusb.dll是CyUSB库提供的一个动态链接库文件,该库提供了一系列的函数和接口,用于USB设备的初始化、打开、关闭、数据传输等操作。通过使用cyusb.dll,开发人员可以方便地与USB设备进行交互,读取和写入设备端的数据,并进行各种控制和配置。 在使用cyusb.dll时,开发人员需要按照其提供的接口进行函数调用,以实现对设备的各种操作。一般来说,使用cyusb.dll开发USB设备驱动需要具备一定的编程基础和USB相关的知识。 对于cyusb.dll的具体使用方法和示例,可以在CSDN上搜索相关的文章或者在CSDN的论坛上提问,会有众多开发者给解答和建议。此外,CSDN上还有很多与cyusb.dll相关的教程和案例,供开发人员学习和参考。 总之,cyusb.dll是一个用于USB设备驱动开发的动态链接库,在CSDN上可以找到相关的信息和帮助,可以通过搜索学习相关的知识,解决开发中的问题。 ### 回答3: csdn cyusb.dll是一种用于CSDN CYUSB驱动的动态链接库文件CYUSBCypress公司开发的一种USB芯片,在Windows操作系统中使用该驱动可以实现对CYUSB芯片的控制和通信。 CSDN是一个知名的IT技术社区网站,提供各类技术文章、软件下载和在线问答等服务。cyusb.dll作为CYUSB驱动的一部分,是CSDN网站上提供的软件资源之一。 cyusb.dll文件的作用是提供与CYUSB驱动相关的函数和接口,使得开发人员可以直接调用这些函数来和CYUSB芯片进行通信。这些函数可以用于初始化驱动、设置芯片的工作模式、发送和接收数据等操作。 通常情况下,我们需要使用cyusb.dll文件时,需要按照CSDN网站上提供的相关文档和教程进行驱动的安装和配置。通过正确地使用cyusb.dll文件,我们能够方便地开发基于CYUSB芯片的各种应用程序,如USB设备控制、数据传输等。 总的来说,csdn cyusb.dll是CSDN网上提供的用于CYUSB驱动的一个重要的DLL文件,它为开发人员提供了便利,使得我们能够快速地进行CYUSB芯片的相关开发和调试工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值