【问题标题】:Controlling the USB from Windows从 Windows 控制 USB
【发布时间】:2010-06-14 22:07:57
【问题描述】:

我知道这可能不是最简单的事情,但我正在尝试使用 USB 连接微控制器和 PC。我不想使用微控制器内部的 USART 或 USB 转 RS232,其项目旨在帮助我理解各种原理。

所以,从微控制器端完成通信是小菜一碟——我的意思是,当我知道他的协议时,在微控制器上实现它相对容易,因为我可以直接控制一切,甚至是精确的时间。

但这不是 PC 的情况。我对 Windows 处理连接的设备的概念不是很熟悉。在我之前的一个问题中,我询问了 Windows 如何通过驱动程序与设备一起工作。我了解,对于 Windows 的内部使用,驱动程序必须具有一些可供操作系统使用的默认功能集。我的意思是,当操作系统要访问硬盘时,它会调用硬盘驱动程序(可能是操作系统内部的),并带有特定的“问题”,这意味着必须编写硬盘驱动程序才能与 Windows 配合,才能在适当的情况下具有写入功能操作系统调用的地方。类似的东西是GPU,甚至DirectX,我的意思是DirectX必须从驱动程序中调用特定的函数,所以必须编写驱动程序才能与DX一起使用。我知道,WinAPI 中的许多函数都是独立工作的,但即使是“简单”的窗口最终也必须写入帧缓冲区,使用 MMIO 来处理驱动程序指定的地址。我说的对吗?

所以,我希望 Windows 具有内部功能,WinAPI 的一部分旨在处理某些常用的东西。调用制造商设计的驱动程序。但这似乎并不完全正确,因为 Windows 无法通过并行端口进行通信。我的意思是,WinAPI中没有使用串口的函数,但是有使用HDD、GPU等的函数。

但现在到了我非常迷茫的部分。因此,我认为 Windows 必须具有一些内置功能才能通过 USB 进行通信,例如它处理 USB 闪存。那么,是否有任何 WinAPI 函数旨在让用户通过该函数操作 USB,或者当我想自己使用 USB 时,我是否必须自己调用所需的 USB 驱动程序函数?因为您需要发送到 USB 控制器的只是设备地址和信息,对吗?我的意思是,我不必编写任何新的驱动程序,对吗?有的话直接调用WinAPI函数,或者直接调用原USB驱动。这有什么意义吗?

【问题讨论】:

    标签: windows usb


    【解决方案1】:

    为了让您的生活更轻松,并避免编写自己的驱动程序,请尝试在 USB 上使用HID(人机接口设备)API。尽管它说的是“人机界面”,但它实际上并不一定是用于人类控制的设备。优点是现代操作系统已经带有 HID 驱动程序,您可以使用示例代码(例如您可以找到的 here)开始使用。许多微控制器制造商都为协议的嵌入提供了合适的代码。

    由于操作系统已经了解 HID,如果您使用 HID 接口构建设备,您会发现不仅可以从任何操作系统读取它,而且您可能还会发现许多应用程序已经可以与您的设备通信,如果它的通信仅限于足够小的 HID 子集。 (例如,我为音乐应用程序构建了一个输入设备,但令人惊讶的是,我发现我可以将它直接插入我们在工作中使用的 3D 动画应用程序中,在不同的操作系统上运行,并且无需编写任何代码就可以立即工作额外的代码行!)

    【讨论】:

    • 嗨,谢谢,我可以再问一个问题吗?如果我没看错的话,HID 实际上是与 USB 驱动程序通信的 WinAPI 部分,但 USB 驱动程序必须具有向设备发送数据和向后发送数据的能力。那么我可以直接寻址USB驱动程序吗?实际上,我从未使用过 C 标准库、WinAPI 或 .net 类之外的东西。
    • 应该已经安装了一个知道如何做所有事情的 HID 驱动程序。 (不幸的是,我的经验不是在 Windows 上。我做了一些谷歌搜索。第 13 章here 是关于 Windows 上的 HID。)我认为您不需要了解有关驱动程序的任何信息,除了存在一个。
    • 谢谢。我可以问一个更快速的问题吗?假设我有 USB 网络摄像头,我希望它与一些设计用于网络摄像头的 WinAPI 函数一起使用。 (即使没有,这只是理论)那么,我是只在 WinPAI 和一些通用 USB 驱动程序之间编写一些翻译器(只需从 USB 驱动程序调用一些 send() 函数),还是必须在我的驱动程序中编写整个 USB 通信?我的意思是与 USB 控制器的所有通信?
    【解决方案2】:

    This answer 可能会让你朝着正确的方向前进。

    The first answer here 也可能有帮助。

    The answers to this 有一些实际代码和其他资源的链接。

    【讨论】:

      【解决方案3】:

      USB 包含一组常用功能,很像支持 USB 闪存驱动器(USB 大容量存储类)。微控制器接口最有趣的两个是 HID 和 CDC。 CDC 最容易使用,因为它直接模拟老式串行端口。

      如果您将微控制器配置为充当 CDC 设备,Windows 会将其枚举为串行端口,并且所有旧的串行 API 都将在其上工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-11
        • 1970-01-01
        • 1970-01-01
        • 2011-10-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多