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

时间:2009-07-24 10:54:30

标签: windows hardware usb

这可能不被认为与编程直接相关,但我不知道还有什么要问的。我曾尝试查看各种网站,但到目前为止,Google并不是我的朋友。

我无法确定是否需要为我正在开发的设备连接的各种windows / linux / mac平台编写自己的设备驱动程序,或者是否由标准驱动程序提供功能。< / p>

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

如果作为后备,我提供第二个配置集,只允许设备从接口连接器中提取1个单位负载,标准驱动程序将使用此配置枚举设备。

5 个答案:

答案 0 :(得分:6)

您需要为Windows编写一个.inf文件,将您的设备VID和PID与系统usbser.sys捆绑在一起。我看起来像这样(根据需要替换YourCompany,输入您的VID和PID(十六进制),并将DriverVer行更改为您想要的任何日期和版本):

; -----------------------------------------------------------------------------
; 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"

请注意,这仅适用于32位操作系统。虽然文件头没有这么说,但它也适用于Vista!

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

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

编辑:对不起,我应该更清楚了。如果不能完全填充,这将不会失败 - 我不确定是否可能。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

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

但是请大家放手,所以我们都知道!

答案 3 :(得分:1)

你对驱动程序问题是正确的。当设备插入并经历枚举过程时,需要保持&lt; 100毫安。主机将询问并确定配置。如果有多个支持不同功率级别,则驱动程序需要决定选择适当的配置。如果只有高功率并且它不可用,那么它将不会枚举该设备。通常,执行CDC的标准驱动程序不会意识到可能的不同设备级别配置,因此需要一定程度的自定义来处理它们。

答案 4 :(得分:1)

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

http://www.em.avant-garde-lab.com/Products.html

如果您的设备在其设备描述符中将自身指定为自供电,则主机将依赖设备自供电功能。您可以在usb.org查询详细信息。 感谢。