Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Windows控制USB_Windows_Usb - Fatal编程技术网

从Windows控制USB

从Windows控制USB,windows,usb,Windows,Usb,我知道这可能不是最容易做到的事情,但我正在尝试使用USB连接微控制器和PC。我不想使用微控制器的内部USART或USB到RS232的转换,它的项目旨在帮助我理解各种原理 因此,从微控制器端完成通信是小菜一碟——我的意思是,当我知道协议时,它相对容易在微控制器上实现,因为我直接控制所有事情,甚至精确的定时 但这不是PC的情况。我不太熟悉Windows处理连接设备的概念。在我前面的一个问题中,我询问了Windows如何通过驱动程序与设备一起工作。我理解,对于Windows的内部使用,驱动程序必须具有

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

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

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

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

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

可能会把你引向正确的方向

可能也会有帮助


有一些实际的代码和指向其他资源的链接。

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


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

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


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

嗨,谢谢,我可以再问一个问题吗?若我理解正确,HID实际上是WinAPI的一部分,用于与USB驱动程序通信,但USB驱动程序必须能够将数据发送到设备并向后发送。那么我可以直接寻址USB驱动程序吗?实际上,我从来没有使用过C标准库、WinAPI或.net类以外的东西。应该已经安装了一个HID驱动程序,它知道如何做所有事情。(不幸的是,我的经验不在Windows上。我在谷歌上搜索了一下。第13章是关于Windows上的HID。)我认为你不需要了解任何关于驱动程序的知识,除了有一件礼物。谢谢。我能有一个更快速的问题吗?假设我有USB网络摄像头,我想让它与一些设计用于网络摄像头的WinAPI函数一起工作。(即使没有,这只是理论)那么,我会在WinPAI和一些通用USB驱动程序之间编写一些转换器(只需从USB驱动程序调用一些send()函数),还是必须在驱动程序中编写整个USB通信?我的意思是所有与USB控制器的通信?