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

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

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

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

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

您需要为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文件)。

编辑:对不起,我应该更清楚。 这将不会失败枚举,如果它不能画满负荷 – 我不知道这是可能的。

我不确定权力的问题,但这是令人满意的CDC司机(或者我认为有),所以你可以使用一个。 对于电源问题,多配置的解决方案可能是好的,我从来没有遇到过这种工作(我有USB分析仪),但在家里有时,当我有3个或更多不同的设备,需要从USB供电我枚举失败。 我认为这是操作系统的选择,如果它不能提供电力的新设备切断它(明智的选择,因为它无法供电)。 这是我的感觉,而不是检查USB标准。

如果您的设备报告主机OS已经支持的设备ID,那么他们将不需要驱动程序。

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

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

但给它一个平底船,所以我们都知道!

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

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

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

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