我正在使用FTDI D2XX驱动程序 API 与 FTDI 设备进行通信。它给了我一些关于设备的信息,比如 locid、序列号、描述,但这还不够。
如何/dev/ttyUSBXX
使用此 API 获取设备号 ( ) 或总线或端口。
谢谢
我正在使用FTDI D2XX驱动程序 API 与 FTDI 设备进行通信。它给了我一些关于设备的信息,比如 locid、序列号、描述,但这还不够。
如何/dev/ttyUSBXX
使用此 API 获取设备号 ( ) 或总线或端口。
谢谢
正如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_GetDeviceInfoDetail
D2XX 程序员指南中的示例函数代码。