如何让C ++从USB端口(如串行端口)执行I / O.

时间:2011-08-11 02:03:49

标签: c++ usb

是否可以从/向特定USB端口读取/写入,避免所有USB握手内容?

我想要做的是与微控制器通信,例如,通过USB没有板载USB驱动程序。我希望我的C ++应用程序能够通过特定的USB端口发送数据,然后从同一个USB端口接收数据。

基本上我想要做的就是将USB端口视为串口。这可能吗?我有可以使用的解决方法吗?

提前致谢。

PS:我知道这不是与uC沟通的最佳方式,但我们假设,出于某种原因,我必须这样做。

编辑:BTW我正在使用Windows 7

3 个答案:

答案 0 :(得分:4)

通常的解决方案是在微控制器板上使用FTDI USB转串口芯片,例如FT232R。然后,就您的MCU而言,它正在与串行端口通信,而在主机上您只需拥有正确的驱动程序。

在我的Mac上,FTDI芯片显示为/dev/tty.usbmodem____处的串行端口,其中____是Mac首次检测时分配的持久唯一ID。即使数周之后,拔塞和重新插入也会获得相同的数字,但在不同的Mac上它是一个不同的数字。

在Windows上,如果安装了驱动程序IIRC,它将显示为新的COM端口。在Linux上,它显示为/dev/ttyUSB_,其中_是从0开始的序列号,如果您在内核中启用了FTDI串行驱动程序支持。如果您插入多个FTDI芯片,这可能会变得棘手。

如果您的微控制器具有内置USB端口,则需要找到该软件以将其识别为标准CDC(通信设备类)串行端口设备(standard documentation available)。大多数操作系统都支持此标准USB设备类。

答案 1 :(得分:0)

使用其中一个USB转串口适配器。 USB端口看起来就像是C ++程序的串口。

答案 2 :(得分:0)

通常,您可以使用HID界面对此进行近似处理:内置驱动程序,您可以在两个方向上发送功能报告。它不是串口简单(因为它是数据包,而不是连续的字节流),但hidapi使它非常简单和跨平台。