【问题标题】:C++ USB ProgrammingC++ USB 编程
【发布时间】:2010-05-12 23:39:19
【问题描述】:

我是硬件编程的新手(尤其是 USB),所以请多多包涵。我正在使用 C++,我需要向/从微处理器板上的 USB 端口发送/接收一些数据(字节数组)。

现在,我以前做过一些串口编程,我知道对于一个串口,你必须打开一个端口,设置,执行 i/o,最后关闭端口。我猜是用USB接口,它不像我上面提到的那么简单。

我确实知道我想使用 Microsoft 标准驱动程序并实施标准 Windows IO 命令来完成此任务,因为我相信没有可供我与之交互的微处理器板驱动程序。

如果有人能指出我通过标准 Windows IO 命令与 USB 端口(打开、设置、i/o)“对话”所需的步骤的正确方向,我将非常感激。非常感谢你!!

【问题讨论】:

  • +1 只是出于好奇,您打算做什么? (抱歉,我不禁有兴趣回答)

标签: c++ windows usb


【解决方案1】:

USB in a nutshell 是优秀的背景阅读。

对于通用 USB 模块,请尝试LibUSB,其中包含一些与标准设备通信的示例。 LibUSB-Win32 是该库的 Windows 端口。

你是对的,它远没有接近像 RS232 端口那么简单。

您使用的是什么微处理器?它是否带有任何 USB 硬件,或者您是否正在考虑尝试在软件中实现所有功能(我什至不建议考虑!)。许多微处理器都带有代码示例,可以模拟简单的 HID USB 设备,如键盘/鼠标等,您可以将其用作起点。如果做不到这一点,可能会有a few off-the-shelf options 可以为您省去很多麻烦:-)

【讨论】:

  • +1 好建议。在设备端,最好适合现有的 Windows 端驱动程序,而 HID 是一个非常灵活的驱动程序。
【解决方案2】:

找出微处理器板上使用的 USB 芯片组,例如Ftdi、Cypress等。这些厂商提供通信的驱动、库和示例程序,这是最简单的方法。

除非您的主板设置为 HID 设备,否则没有“标准”驱动程序,但是如果您使用 Windows,Microsoft 会提供 WinUSB.sys 'generic' driver,它可能会或可能不会满足您的需求(它不支持同步传输)。

【讨论】:

    【解决方案3】:

    您是否应该为将自行连接的 USB 设备编写驱动程序。如果您知道板上具有 USB i/o 的芯片类型,则驱动程序将适用于该设备。

    如果该芯片是 STM,则可能已经有驱动程序,或者可能有 API 来帮助开发驱动程序。它可能是自定义设备,但您应该查看设备类型以查看是否存在与您的设备匹配的现有类型。如果是这样,您可能还可以使用它的驱动程序。需要有关董事会的信息。

    编写自己的驱动程序 不用太深入,你应该学习微软的驱动模型,用户模式和内核模式驱动之间的区别,驱动节点代表什么,驱动层次以及它们如何在逻辑上附加自己,不同类型的驱动(过滤器,函数,总线) ,内核驱动程序如何与用户界面、动态链接库、框架和 API、WDM 框架/API、KMDF 和 UMDF API 进行通信,这只是一个简短的列表。

    或者您可以使用现有的驱动程序。

    使用 USB 微控制器提供的驱动程序 我们不知道 USB 微控制器正在使用什么固件(如果有的话)。如果没有固件(如果说芯片没有它或者依靠 eprom 来存储它而不是闪存)那么如果我们知道芯片是否支持 USB 引导加载程序,您可以对其进行闪存或通过 USB 加载它的固件并且有无需 JTAG 或其他外围设备。很可能仅 USB 就能够让您离开地面并从那里到达任何地方。在考虑没有 USB 微控制器的电路板时,通常会出现这些类型的问题。

    这里是一个稍微相关的驱动程序的链接。大多数 USB 微控制器的目的是将 USB 通信切换到 UART,因为大多数实际进行思考和控制一切的微控制器都没有配备 USB i/o,而是配备了 UART 或其他一些 i/o 引脚,如 I2C 或 SPI 等。

    https://www.silabs.com/products/mcu/Pages/USBXpress.aspx

    该驱动程序可能确实有效,如果不是类似的东西,但对于您的 USB 微控制器的制造商;几乎肯定会完成这项工作。希望这会有所帮助。

    【讨论】:

    • 您好,很好的答案 - 但它确实以 WALLOFTEXT 的形式出现!也许您可以对其进行编辑,使其更易于阅读? :)
    • Taryn East 我看不出问题出在哪里。这里有大量关于最终与 USB 驱动程序相关的想法的信息。 USB本质上是硬件。微软甚至为这种开发提供了丰富的信息和框架。当问题清楚地标记 Windows 时,我的评论被否决,而其他人建议使用 linux 驱动程序。虽然他确实向 Windows 建议了端口。当微软字面上有几十页的信息甚至样本时,为什么要使用 linux 驱动程序。如果他使用的是 windows 电脑,他应该遵循微软的指导方针。
    • Windows 甚至提供了用户模式 ​​USB 驱动程序,无需编写更复杂的 kmdf 驱动程序。如果他想编写 Windows 驱动程序,那么有很多事情要做,这是没有办法的。 Windows 文档将同样“容易”阅读。然而,对于某些人来说,这是有价值的文章。
    • 如果没有 ioctl 导出到用户模式,过滤器驱动程序可能是挂钩 USB 驱动程序控制的最简单方法。过滤器驱动程序具有额外的好处,因为它适用于所有 Windows 硬件,而不是特定于您的硬件。
    • Marshall - 它最初是一个巨大的段落,中间没有中断。这很难读。它现在被分解成更短的部分,使其更易于阅读。
    【解决方案4】:

    通过硬件编程,您的意思是您将对微控制器进行编程吗?如果是这样,您将无法使用“标准 Windows 驱动程序”或类似的东西。

    USB 标准很厚。看看here

    这是一个非常复杂的话题,我建议您找到已经为您的微控制器创建的 USB 实现。 (如果您向我们提供更多信息,我们可能会找到)

    【讨论】:

    • 不,我不会对微控制器进行编程......也许我不够清楚。我只需要从 USB 端口写入和读取。
    【解决方案5】:

    什么样的微处理器和什么样的板?

    许多处理器都支持 USB 端口。此外,一些硬件板也带有 USB 控制器。

    例如,我的商店使用的处理器带有两个 USB 控制器,可以充当集线器或设备。我们甚至添加了另一个处理器来充当 USB 控制器。

    【讨论】:

      猜你喜欢
      • 2011-05-13
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 2018-09-19
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多