繁体   English   中英

在C ++中发现USB设备并与之通信

[英]Discovering and communicating with USB devices in C++

简而言之,在USB通信方面,我是个新手。 虽然我在微控制器方面处理过较低级别的串行通信(SPI,UART,I2C),但我从未处理过USB或串行通信的OS端。 所以,请忍受我。

我有一个RFID读/写器,它具有自己的协议,可用于发出各种命令。 我正在研究使用Boost:ASIO库执行所需的读/写操作。

但是,图书馆有点麻烦,我正在寻找一些指导。 此外,当我在Windows环境中工作时,我想使我的硬件抽象层尽可能地可移植。 同样,我过去(和其他程序员)对COM端口进行硬编码时遇到了不好的经验,我宁愿我的程序在插入时发现我的阅读器,也许是基于阅读器ID。

我建议您研究libusb( http://www.libusb.org/ ),它具有对USB接口的跨平台支持,并且如果您了解USB的工作原理,它并不复杂。

设备检测是特定于平台的,因此您应该在特定于OS的部分和数据处理之间定义跨平台API。

对于Windows上的设备枚举,有SetupDi * API。 设备到达事件可以通过RegisterDeviceNotification获得。 您可以检查包含VID和PID的“兼容ID”,以及报告USB字符串描述符的总线相关设备描述,以识别您自己的设备。

在Linux上,有udev ,它可以在VID,PID和字符串描述符上进行匹配,并为匹配的设备提供枚举和到达事件。

使用这些特定于OS的方式查找串行端口名称后,您将具有各种跨平台的串行端口库来打开连接并与设备交换数据。

暂无
暂无

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

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