使用C ++发现USB设备并与之通信

时间:2016-05-24 18:01:04

标签: c++ boost serial-port usb boost-asio

直接记录,在USB通信方面,我总是不错。虽然我在微控制器端处理了较低级别的串行通信(SPI,UART,I2C),但我从未处理过USB或串行通信的OS方面。所以请耐心等待。

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

然而,图书馆有点过头了,我正在寻求一些指导。此外,当我在Windows环境中工作时,我想让我的硬件抽象层尽可能便携。同样,我在过去曾经遇到过糟糕的经历(其他程序员)硬编码COM端口,而且我宁愿我的程序在插入它时根据读者ID发现我的读者。

2 个答案:

答案 0 :(得分:3)

我建议调查libusb(http://www.libusb.org/)它对USB接口有跨平台支持,如果你了解USB是如何工作的,那就不复杂了。

答案 1 :(得分:2)

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

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

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

使用这些特定于操作系统的方法查找串行端口名称后,您可以使用各种跨平台串行端口库来打开连接并与设备交换数据。