Как получить устройство 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.