如何使用FTDI D2XX驱动程序API获取Linux设备

时间:2015-11-11 11:08:49

标签: driver linux-device-driver libusb ftdi d2xx

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

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

感谢

2 个答案:

答案 0 :(得分:6)

正如D2XX Programmer's Guide在简介中所述:

  

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

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

ftdi_sio

通过this文章,我成功地克服了这个问题。我的工作解决方案是在sudo lsmod | grep -a "ftdi_sio" 下创建两个文本文件。第一个从/etc/udev/rules.d/驱动程序取消绑定我的设备,第二个调整我的设备的权限。假设取消绑定我的设备的第一个文件被命名为ftdi_sio并具有以下内容:

98-my-device.rules

现在让我们假设第二个使我的设备无法使用root权限的文件被命名为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\ '" 并具有以下内容:

99-my-device.rules

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

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

设备的属性(供应商ID,产品ID和产品描述)可以通过sudo udevadm trigger 命令获得,但这会显示太多信息。您可以使用以下内容过滤结果:

sudo lsusb -v

成功阻止Linux加载特定设备的sudo lsusb -v | grep -a "Bus ... Device ...:\|idVendor\|idProduct\|iProduct" 驱动程序后,您可以使用D2XX API。要从所有连接的设备获取信息,请尝试使用D2XX Programmer's Guide中的函数ftdi_sio的示例代码。

答案 1 :(得分:0)

我尝试创建您提到的规则,但是当我执行ftdi_sio时,我仍然看到lsmod | grep ftdi_sio