代码之家  ›  专栏  ›  技术社区  ›  B.Gen.Jack.O.Neill

从Windows控制USB

  •  2
  • B.Gen.Jack.O.Neill  · 技术社区  · 15 年前

    我知道这可能不是最容易做到的事情,但我正试图连接微控制器和PC使用USB。我不想用单片机的内部接口或USB到RS232转换,它的项目无意中帮助我了解各种原理。

    因此,从微控制器端完成通信是小菜一碟-我的意思是,当我知道协议时,它相对容易在微型机上实现,因为我直接控制所有事情,甚至精确计时。

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

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

    3 回复  |  直到 15 年前
        1
  •  1
  •   sigfpe    15 年前

    HID (人机界面设备)在USB之上的API。虽然它说的是“人机界面”,但它实际上并不一定是人类控制的设备。其优点是,现代操作系统已经配备了HID驱动程序,您可以使用示例代码,例如您可以找到什么 here 开始吧。许多微控制器制造商为协议的嵌入提供了合适的代码。

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

        2
  •  0
  •   Community CDub    8 年前

    This answer 可能会把你引向正确的方向。

    The first answer here

    The answers to this

        3
  •  0
  •   Yann Ramin    15 年前

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

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