【问题标题】:Do I need to write my own host side USB driver for a CDC device我是否需要为 CDC 设备编写自己的主机端 USB 驱动程序
【发布时间】:2010-11-13 16:46:37
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我相信你首先要查看USB规范,看看这些东西是否被允许。如果规范允许,那么标准浏览器可能会支持它。
  • 在 USB 2.0 规范中,设备描述符允许多种配置,每种配置都可以指定它需要来自接口的一定功率。然后,我想,由驾驶员在这些不同的配置之间进行选择。

标签: windows hardware usb


【解决方案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 上查看详细信息。 谢谢。

【讨论】:

    【解决方案2】:

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

    编辑:对不起,我应该更清楚。如果它不能绘制满负载,这将不会失败 - 我不确定这是否可能。

    【讨论】:

    • 我正在尝试自动安装此驱动程序,而不是用户需要转到设备管理器(尽管这确实有效)。我试过只使用右键单击安装,也使用stackoverflow.com/questions/677686/… 中描述的方法。无论哪种情况,当我插入设备时,它都会打开新硬件向导,虽然它显示在设备管理器的端口下,但没有与之关联的驱动程序。更多细节:
    • ... 我正在尝试在 Windows XP 上使用赛普拉斯芯片。赛普拉斯为此提供了一个 .inf 文件 (cypress.com/?rID=40248),这有点不同,例如 CopyFiles 设置为 DriverCopyFiles,而不是 FakeModemCopyFileSection。有什么建议吗?
    • 我们已经使用 usbser.sys 作为我公司生产的许多产品的驱动程序,但我从来没有找到一种简单的方法来避免 Windows XP 中的“发现新硬件向导”。如果你这样做,请告诉我。好消息是,使用相同的 inf 文件,如果在安装 inf 文件后插入设备,则在 Windows Vista 和 Windows 7 中无需向导即可自动安装驱动程序。
    • @Edwin Evans:是的,这正是 .inf 文件的用途 - 将您的 VID/PID 与 usbser.sys 匹配。
    • @Edwin Evans:对于大容量存储设备(记忆棒)之类的东西,大概是使用设备类。但对于 USB 串行设备,它不使用设备类。猜测一下,MS 意识到,如果您必须为您放入的每个记忆棒安装驱动程序,那将太烦人了,但串行设备在用户领域并不常见。
    【解决方案3】:

    您在驱动程序问题上是正确的。当设备插入并通过枚举过程时,它需要保持

    【讨论】:

      【解决方案4】:

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

      您可能需要模拟现有的 USB UART。数据表很容易获得。 (但我想你已经知道了。)

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

      但请放过它,让我们都知道!

      【讨论】:

      • 请注意,设备 ID 由供应商 ID 和产品 ID 组成,该供应商 ID 的所有者可能不会感谢您劫持他们的 ID。对于个人项目当然没问题,但不要出售此类设备。
      • 当然,拥有自己的身份证并没有那么贵,我们都想购买你的奇妙设备,对吧?
      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多