2

我正在使用FTDI D2XX驱动程序 API 与 FTDI 设备进行通信。它给了我一些关于设备的信息,比如 locid、序列号、描述,但这还不够。

如何/dev/ttyUSBXX使用此 API 获取设备号 ( ) 或总线或端口。

谢谢

4

1 回答 1

10

正如D2XX 程序员指南在简介中所说:

对于 Linux、Mac OS X(10.4 和更高版本)和 Windows CE(4.2 和更高版本),D2XX 驱动程序和 VCP 驱动程序是 相互排斥的选项,因为在给定的设备 ID 的给定时间只能安装一种驱动程序类型。

问题是您的 Linux 可能会自动加载 VCP 驱动程序 ( ftdi_sio),因此您不能使用 D2XX 驱动程序。在终端中键入以下内容以确保ftdi_sio已加载:

sudo lsmod | grep -a "ftdi_sio"

通过这篇文章,我成功地克服了这个问题。我的工作解决方案是在/etc/udev/rules.d/. 第一个将我的设备与ftdi_sio驱动程序解除绑定,第二个调整我的设备的权限。假设第一个解除绑定我的设备的文件被命名为98-my-device.rules并具有以下内容:

ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{product}=="FTDI Device",\
PROGRAM="/bin/sh -c '\
    echo -n $id:1.0 > /sys/bus/usb/drivers/ftdi_sio/unbind;\
    echo -n $id:1.1 > /sys/bus/usb/drivers/ftdi_sio/unbind\
'"

现在假设使我的设备在没有 root 权限的情况下可用的第二个文件被命名为99-my-device.rules并具有以下内容:

ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{product}=="FTDI Device",\
MODE="0666"

这些规则将在下次重新启动时生效,或者可以通过以下方式应用它们:

sudo udevadm trigger

设备的属性(vendor id、product id 和产品描述)可以通过sudo lsusb -v命令获取,但是这样会显示太多信息。您可以使用以下内容过滤结果:

sudo lsusb -v | grep -a "Bus ... Device ...:\|idVendor\|idProduct\|iProduct"

在成功阻止 Linux 加载ftdi_sio特定设备的驱动程序后,您可以使用 D2XX API。要从所有连接的设备获取信息,请尝试FT_GetDeviceInfoDetailD2XX 程序员指南中的示例函数代码。

于 2017-04-20T08:51:24.397 回答