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

GLa*_*ros 1 driver libusb linux-device-driver ftdi d2xx

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

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

谢谢

Aki*_*ira 6

正如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"
Run Code Online (Sandbox Code Playgroud)

通过这篇文章,我成功克服了这个问题.我的工作解决方案是创建两个文本文件/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\
'"
Run Code Online (Sandbox Code Playgroud)

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

ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{product}=="FTDI Device",\
MODE="0666"
Run Code Online (Sandbox Code Playgroud)

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

sudo udevadm trigger
Run Code Online (Sandbox Code Playgroud)

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

sudo lsusb -v | grep -a "Bus ... Device ...:\|idVendor\|idProduct\|iProduct"
Run Code Online (Sandbox Code Playgroud)

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