我正在使用 FTDI D2XX 驱动程序API与FTDI设备进行通信。 它给了我一些关于设备的信息,比如locid,serialnumber,description,但这还不够。
如何使用此API获取设备编号(/dev/ttyUSBXX
)或总线或端口。
感谢
答案 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