【问题标题】:How can I get Linux device with FTDI D2XX driver API如何使用 FTDI D2XX 驱动程序 API 获取 Linux 设备
【发布时间】:2015-11-11 11:08:48
【问题描述】:

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

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

谢谢

【问题讨论】:

  • 不知道你在说什么,虽然在 Linux 内核中你有不同的 API 来访问 USB 串行设备:a) TERMIOS 直接在 /dev/ttyXYZ 上工作节点,以及 b) USB IOCTL (libusb)。
  • 你好。我将在这里解释更多细节。我用 USB 连接了两个 FTDI 板,每个板都有两个设备。所以从 dmesg 我得到:usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0 usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB1 usb 1-2: FTDI USB Serial Device converter now attached to ttyUSB2 usb 1-2: FTDI USB Serial Device converter now attached to ttyUSB3 。当我调用 D2XX API 时,我也得到了四个设备,但它没有告诉我哪个设备是 ttyUSB1,即 ttyUSB2 等。它只给我 locid、序列号和描述。
  • 所以,简而言之,我想将 ttyUSB0、ttyUSB1、ttyUSB2、ttyUSB3 分配给我从 D2XX API 获得的设备(我使用 FT_GetDeviceInfoDetail 函数)
  • 我不知道 D2XX API 是什么意思。 Linux 内核似乎在这里工作。
  • 经过一番搜索,我认为从技术上讲,我的问题没有解决方案。无论如何,仅供参考:当您插入 FTDI 芯片时,Linux 内核会自动加载 VCP 驱动程序 (ftdi_sio)。同一家公司(D2XX)还有另一个驱动程序,这是我使用的。这两个驱动程序不兼容。所以,我必须卸载 (rmmod) ftdi_sio 才能使用 D2XX。 Linux ftdi_sioD2XX API

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


【解决方案1】:

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

对于 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"

通过this 文章我成功克服了这个问题。我的工作解决方案是在/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

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

sudo lsusb -v | grep -a "Bus ... Device ...:\|idVendor\|idProduct\|iProduct"

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

【讨论】:

  • 作者询问获取 FTDI 设备的设备名称,您描述了一些内容,但作者没有询问。
  • @borune,我实际上描述了作者将如何使用 D2XX 驱动程序。在完成此操作之前,无法获取设备名称。除其他外,还有可用于获取设备名称的功能。
  • 您建议使用 FT_GetDeviceInfoDetail 函数来获取设备文件名。但是此功能不提供该信息。建议ftdichip.com/Support/Knowledgebase/…之前阅读说明
  • 我发现这些说明很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
相关资源
最近更新 更多