【发布时间】:2015-07-09 10:37:07
【问题描述】:
在 Linux 中,USB 串行转换器通常显示为 /dev 目录中的一个节点:/dev/ttyUSBx。
要使用串口转换器,第一步就是打开端口,然后配置它等等。
port = open("/dev/ttyUSB0", O_RDWR);
如果您想使用串行设备(I2C 或 SPI),ftdi 提供可用作普通 UART 端口或 i2c/spi 的设备(如 FT4232 或 FT232h)。
对于 i2c/spi 操作,您必须使用单独的驱动程序 - 我使用开源 libmpsse。这是一个您必须安装的库,因此它将与标准 FTDI 驱动程序并行工作,因为它是在此基础上构建的。
所以现在,如果我想打开一个端口作为 UART,我使用正常打开功能(如上所述)。如果我想连接 i2c/spi 设备,我使用 libmpsse open 函数,它根据 VID/PID 打开端口:
struct mpsse_context *Open(int vid, int pid, enum modes mode, int freq, int endianess, int interface, const char *description, const char *serial)
现在的问题是 - 我可以通过使用设备 vid/pid 而不是其开发模式的路径将端口打开为 UART 吗?这一切都归结为 ftdi 函数调用,但我似乎找不到一个例子。
为什么我需要这样做?我不想知道节点路径。我应该可以只使用 VID/PID 和接口号 - 它更灵活。
感谢任何帮助!
【问题讨论】:
-
/dev/serial/ 中可能有一些更适合的东西:
-
@Jasen 需要详细说明吗? :)
-
详细说明 Jasen:如果您列出
/dev/serial/by-id,您将找到以您的设备命名的链接,指向/dev上的虚拟文件。那里没有 vid/pid,只有制造商和产品名称,但在大多数情况下,这可能就足够了。 -
我知道这个问题是针对 linux 的,但是,为了保留这个,人们可以找到,在 Windows 中,您可以通过获取
HKLM\SYSTEM\CurrentControlSet\Enum\USB上的条目来列出 USB 设备。 CDC/ACM 设备可能有一个friendlyName条目,它将是与此设备关联的COMx端口。
标签: c++ c linux linux-device-driver ftdi