繁体   English   中英

从Windows控制USB

[英]Controlling the USB from Windows

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

因此,从微处理器端完成通信很容易-我的意思是,当我知道他的协议时,它相对容易在Micro上实现,因为我可以直接控制更新,甚至精确的时间。

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

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

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

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

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

这个答案可能将您对准正确的方向。

这里的第一个答案也可能会有所帮助。

答案有一些实际的代码,以及指向其他资源的链接。

USB具有一组备用功能,非常类似于支持USB闪存驱动器(USB Mass Storage类)。 微控制器接口中最有趣的两个是HID和CDC。 CDC最容易使用,因为它可以直接模拟老式的串行端口。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM