How can I get Linux device with FTDI D2XX driver API

扶醉桌前 提交于 2019-11-30 14:25:19

问题


I am using FTDI D2XX driver API to communicate with a FTDI device. It gives me some information about the device like locid, serialnumber, description but it is not enough.

How can I get the device number (/dev/ttyUSBXX) or bus or port with this API.

thanks


回答1:


As the D2XX Programmer's Guide tells in the Introduction:

For Linux, Mac OS X (10.4 and later) and Windows CE (4.2 and later) the D2XX driver and VCP driver are mutually exclusive options as only one driver type may be installed at a given time for a given device ID.

The problem is that your Linux may automatically loads the VCP driver (ftdi_sio) and therefore you cannot use D2XX driver. Type the following into your terminal to make sure, the ftdi_sio is loaded:

sudo lsmod | grep -a "ftdi_sio"

By this article I succesfully overcame the problem. My working solution is to create two text files under the /etc/udev/rules.d/. The first unbinds my device from the ftdi_sio driver and the second adjusts the permissions for my device. Let assume the first file which unbinds my device is named to 98-my-device.rules and has the following content:

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\
'"

Now let assume the second file which makes my device usable without root rights is named to 99-my-device.rules and has the following content:

ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{product}=="FTDI Device",\
MODE="0666"

These rules will be active from the next restart or they can be applied by:

sudo udevadm trigger

The device's attributes (vendor id, product id and the product description) can be obtained by the sudo lsusb -v command but this will show too much information. You can filter the results with something like this:

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

After you succesfully prevented the Linux to load the ftdi_sio driver for a specific device, you can use the D2XX API. To get informations from all connected devices try the example code of function FT_GetDeviceInfoDetail from the D2XX Programmer's Guide.



来源:https://stackoverflow.com/questions/33649296/how-can-i-get-linux-device-with-ftdi-d2xx-driver-api

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!