Windows 我需要为CDC设备编写自己的主机端USB驱动程序吗

Windows 我需要为CDC设备编写自己的主机端USB驱动程序吗,windows,hardware,usb,Windows,Hardware,Usb,这可能不会被认为与编程直接相关,但我不知道还有什么地方可以问。我试过浏览各种网站,但到目前为止谷歌还不是我的朋友 我很难确定是否需要为我正在开发的设备可能连接到的各种windows/linux/mac平台编写自己的设备驱动程序,或者该功能是否由标准驱动程序提供 我的设备是一个USB CDC(通信设备),显示为COM:端口。它还包括一个电池充电器,一旦设备被枚举,该充电器将需要从USB接口获取的完整5单位负载(500mA)电源电流。我的问题是,如果主机中的USB驱动程序决定它无法提供完整的电源电流

这可能不会被认为与编程直接相关,但我不知道还有什么地方可以问。我试过浏览各种网站,但到目前为止谷歌还不是我的朋友

我很难确定是否需要为我正在开发的设备可能连接到的各种windows/linux/mac平台编写自己的设备驱动程序,或者该功能是否由标准驱动程序提供

我的设备是一个USB CDC(通信设备),显示为COM:端口。它还包括一个电池充电器,一旦设备被枚举,该充电器将需要从USB接口获取的完整5单位负载(500mA)电源电流。我的问题是,如果主机中的USB驱动程序决定它无法提供完整的电源电流,那么它应该无法枚举设备


如果作为备用方案,我提供了第二个配置集,该配置集仅允许设备从接口连接器提取1个单元负载,则标准驱动程序将使用此配置枚举设备

我不确定电源的问题,但有很多CDC驱动程序(或者我认为有),所以你们可以用一个。对于电源问题,采用多种配置的解决方案可能是一个不错的解决方案,我在工作中从未遇到过这种情况(我有USB analyzer),但在家中,有时当我有3台或更多需要USB供电的不同设备时,我的枚举失败。我认为这是操作系统的选择,如果它不能为新设备供电,它会切断它(明智的选择,因为它不能为它供电)。这是我的客人,而不是检查USB标准件。

如果您的设备报告主机操作系统已支持的设备ID, 那他们就不需要司机了

您可能需要模拟现有的USB uart。数据表随时可用。 (但我想你已经知道了。)

我不确定主机操作系统是否会尊重您的多配置想法


但给它一个平底船,让我们都知道

关于司机的问题,你是对的。当设备插入并通过枚举过程时,需要保持<100mA。主机将询问并确定配置。如果有多个系统支持不同的功率级别,则驾驶员需要决定选择适当的配置。如果只有高功率且不可用,则不会枚举设备。一般来说,执行CDC的标准驱动程序不知道可能的不同设备级配置,因此需要一定程度的定制来处理它们

您需要为Windows编写一个.inf文件,将设备VID和PID与系统usbser.sys连接起来。我的是这样的(根据需要更换您的公司,输入您的VID和PID(十六进制),并将Driver line更改为您想要的任何日期和版本):

注意这只适用于32位OSs。它也适用于Vista,尽管文件头上没有这么说

请注意,某些版本的usbser.sys存在严重问题,包括bluescreening,例如在传输64字节的精确倍数的数据包时。如果您使用的是XP SP2或更早版本,请安装修补程序KB943198。XP SP3和Vista都很好

对于Mac,您只需正确地报告设备类别,驱动程序扫描就会选择正确的驱动程序。(Windows忽略设备类,这就是您需要提供.inf文件的原因)


编辑:对不起,我应该说得更清楚些。如果无法提取全部负载,则不会失败枚举-我不确定这是否可行。

如果您的设备作为USB CDC-ACM设备连接到windows桌面主机,则windows桌面已提供驱动程序usbser.sys。但是windows Vista中存在一些问题。您只需要inf就可以在桌面上安装usbser.sys。对于WinCE,您没有驱动程序,对于WinCE,您需要编写或从任何第三方供应商处获取驱动程序。这里有一个

如果您的设备在其设备描述符中将自身指定为自供电,那么主机将依赖于设备的自供电能力。有关详细信息,请访问usb.org。
谢谢。

我认为您首先必须查看USB规范,看看这些东西是否允许。如果规范允许,那么标准浏览器可能会支持它。在USB 2.0规范中,设备描述符允许许多配置,每个配置都可以指定它需要来自接口的一定功率。然后,我认为,由驱动程序在这些不同的配置之间进行选择。请注意,设备ID由供应商ID和产品ID组成,该供应商ID的所有者可能不欣赏您劫持其ID。对于个人projets,这当然不是问题,但不要销售此类设备。当然,获取您自己的id并不昂贵,我们都想购买您的精彩设备,对吗?我正在尝试自动安装此驱动程序,而不是用户需要转到设备管理器(尽管这确实有效)。我尝试过使用右键单击安装,也尝试过使用中描述的方法。在任何一种情况下,当我插入设备时,它会启动新硬件向导,当它显示在设备管理器的“端口”下时,没有与之关联的驱动程序。更多细节:。。。我正在Windows XP上试用,并使用Cypress芯片。Cypress为此()提供了一个有点不同的.inf文件,例如CopyFiles被设置为DriverCopyFiles,而不是FakeModemCopyFileSection。有什么建议吗?我们使用usbser.sys作为我公司生产的许多产品的驱动程序,我从来没有找到一个简单的方法来避免Windows XP中的“发现新硬件向导”。如果有,请告诉我。好消息是,使用相同的inf文件,驱动程序可以自动安装,而Win中没有向导
; -----------------------------------------------------------------------------
; XP/2000 USB Comms Port Setup
; -----------------------------------------------------------------------------

[Version] 
DriverVer=12/03/2008,1.0.0000.0000
Signature="$Windows NT$"
Class=Ports 
ClassGUID={4d36e978-e325-11ce-bfc1-08002be10318} 
Provider=%YourCompany% 

[DestinationDirs]
DefaultDestDir=10,system32\drivers
DriverCopyFiles=12

[ControlFlags]
ExcludeFromSelect = *

[Manufacturer] 
%YourCOmpany%=YourCompanySerialPort 

[YourCompanySerialPort] 
%YourCompanyUSBSerialPort%=YOURCOMPANYUSB,USB\VID_1234&PID_ABCD

; 
; Win 2000/XP
;
[YOURCOMPANYUSB]
Include=mdmcpq.inf
CopyFiles=FakeModemCopyFileSection

[YOURCOMPANYUSB.HW] 
AddReg=YOURCOMPANYUSBAddReg.HW 

[YOURCOMPANYUSBAddReg.HW] 
HKR,,DevLoader,0,*ntkern 
HKR,,NTMPDriver,,"usbser.sys" 

[YOURCOMPANYUSB.Services] 
AddService=usbser, 0x00000002, FuncDrv_Service_Inst 

[FuncDrv_Service_Inst] 
DisplayName=%USBFilterString% 
ServiceType= 1 
StartType = 3 
ErrorControl = 0 
ServiceBinary = %12%\usbser.sys 

[Strings] 
YourCompany="YourCompany" 
YourCompanySerialPort="Your Company USB Serial Port" 
USBFilterString = "USB Serial Service"