Как получить устройство Linux с API драйвера FTDI D2XX

Я использую API драйвера FTDI D2XX для связи с устройством FTDI. Он дает мне некоторую информацию об устройстве, такую ​​как locid, serialnumber, description, но этого недостаточно.

Как я могу получить номер устройства (/dev/ttyUSBXX) или шину или порт с этим API.

Спасибо

1 ответ

Как сказано в Руководстве для программиста D2XX:

Для Linux, Mac OS X (10.4 и более поздних версий) и Windows CE (4.2 и более поздних версий) драйвер D2XX и драйвер VCP являются взаимоисключающими опциями, поскольку в определенный момент времени для данного идентификатора устройства может быть установлен только один тип драйвера.

Проблема в том, что ваш 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

Атрибуты устройства (идентификатор поставщика, идентификатор продукта и описание продукта) могут быть получены с помощью sudo lsusb -v команда, но это покажет слишком много информации. Вы можете отфильтровать результаты примерно так:

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

После того, как вы успешно запретили Linux загружать ftdi_sio Драйвер для конкретного устройства, вы можете использовать D2XX API. Чтобы получить информацию со всех подключенных устройств, попробуйте пример кода функции FT_GetDeviceInfoDetail из Руководства программиста D2XX.

Другие вопросы по тегам