Как я могу получить устройство Linux с API-интерфейсом драйвера FTDI D2XX

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

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

спасибо


person GLampros    schedule 11.11.2015    source источник
comment
Понятия не имею, о чем вы говорите, хотя в ядре Linux у вас есть разные API для доступа к последовательному USB-устройству: а) TERMIOS, который работает непосредственно на узлах /dev/ttyXYZ, и б) USB IOCTL ( библиотекаb).   -  person 0andriy    schedule 11.11.2015
comment
Привет. Я объясню здесь более подробно. Я подключаю две платы FTDI с usb, на каждой из которых по два устройства. Итак, из 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 . Когда я вызываю API D2XX, я также получаю четыре устройства, но это не дает мне, какое устройство ttyUSB1, какое ttyUSB2 и т.д. Это только дает мне locid, серийные номера и описания.   -  person GLampros    schedule 12.11.2015
comment
Итак, в двух словах я хочу назначить ttyUSB0, ttyUSB1, ttyUSB2, ttyUSB3 устройствам, которые я получаю от D2XX API (я использую функцию FT_GetDeviceInfoDetail)   -  person GLampros    schedule 12.11.2015
comment
Я понятия не имею, что означает D2XX API. Ядро Linux, кажется, работает здесь.   -  person 0andriy    schedule 14.11.2015
comment
После некоторых поисков я думаю, что технически нет решения моей проблемы. В любом случае, к вашему сведению: ядро ​​​​Linux автоматически загружает драйвер VCP (ftdi_sio), когда вы подключаете чип FTDI. Есть другой драйвер от той же компании (D2XX), и я его использую. Эти два драйвера несовместимы. Итак, мне нужно выгрузить (rmmod) ftdi_sio, чтобы использовать D2XX. Linux ftdi_sio D2XX API   -  person GLampros    schedule 16.11.2015
comment
Жаль, что официальное руководство для Linux предлагает только способ удаления модуля (командой rmmod). Однако мне удалось решить эту проблему более сложным способом, как показано в моем ответе.   -  person Akira    schedule 12.05.2017


Ответы (1)


Как указано в D2XX Programmer's Guide сообщает во введении:

Для 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 для определенного устройства, вы можете использовать API D2XX. Чтобы получить информацию со всех подключенных устройств, попробуйте пример кода функции FT_GetDeviceInfoDetail из Руководства программиста D2XX.

person Akira    schedule 20.04.2017
comment
Автор спрашивает о получении имени устройства для устройства FTDI, вы что-то описали, но автор ничего не просит. - person borune; 04.04.2020
comment
@borune, я фактически описал, как автор вообще сможет использовать драйвер D2XX. Пока это не сделано, имя устройства не может быть получено. Также есть функция, которую можно использовать, среди прочего, для получения имени устройства. - person Akira; 05.04.2020
comment
вы предлагаете использовать функцию FT_GetDeviceInfoDetail для получения имени файла устройства. Но эта функция не предоставляет эту информацию. Прочтите описание, прежде чем советовать ftdichip.com/Support/Knowledgebase/ - person borune; 06.04.2020
comment
Я нашел эти инструкции очень полезными. - person Richard W; 10.02.2021