我正在使用FTDI D2XX驱动程序API与FTDI设备通信。它给了我一些关于设备的信息,比如locid、序列号、描述,但这还不够。
如何使用此API获取设备编号(/dev/ttyUSBXX
)或总线或端口。
感谢
正如《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
'"
现在假设使我的设备在没有根权限的情况下可用的第二个文件命名为99-my-device.rules
,并且具有以下内容:
ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{product}=="FTDI Device",
MODE="0666"
这些规则将在下一次重新启动时激活,或者可以通过以下方式应用:
sudo udevadm trigger
设备的属性(供应商id、产品id和产品描述)可以通过sudo lsusb -v
命令获得,但这会显示太多信息。你可以用这样的东西过滤结果:
sudo lsusb -v | grep -a "Bus ... Device ...:|idVendor|idProduct|iProduct"
成功阻止Linux为特定设备加载ftdi_sio
驱动程序后,可以使用D2XX API。要从所有连接的设备获取信息,请尝试D2XX程序员指南中的函数FT_GetDeviceInfoDetail
的示例代码。