从Windows控制USB

时间:2010-06-14 22:07:57

标签: windows usb

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

因此,从微控制器方面完成通信是件小事 - 我的意思是,当我知道他的协议时,它相对很容易在Micro上实现它,因为我可以直接控制evrything,甚至精确计时。 / p>

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

所以,我预计Windows有内部功能,WinAPI的一部分设计用于某些常用的东西。致电制造商设计的驱动程序。但这似乎并非完全正确,因为Windows无法通过Paralel端口进行通信。我的意思是,WinAPI中没有使用串口的功能,但有功能可以使用HDD,GPU等。

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

The first answer here也可能会有所帮助。

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

答案 2 :(得分:0)

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

如果将微控制器配置为充当CDC设备,Windows会将其枚举为串行端口,并且所有旧的串行API都可以使用它。