Как узнать, какие инструменты стоят за адаптером FTDI в Windows?

В настоящее время я разрабатываю инструмент Python для Windows, который может искать все устройства, подключенные к ПК с Windows. Он уже поддерживает устройства Ethernet, и сейчас я пытаюсь добавить поддержку USB и последовательных устройств. Для этих устройств я хочу прочитать их идентификатор поставщика, идентификатор продукта, серийный номер и, конечно же, адрес/порт, который необходим для подключения к устройству.

Простые USB-устройства можно легко обнаружить с помощью PyUSB или PyWin32. К сожалению, многие устройства говорят, что их поставщиком является FTDI, что не соответствует действительности. Насколько я знаю, FTDI просто предоставляет USB-адаптер/конвертер.

Итак, как я могу найти устройство за адаптером FTDI? Я уже пробовал PyUSB, PyWin32 и PySerial, но все они просто говорят, что подключено FTDI-устройство; но я хочу знать фактическое устройство, стоящее за адаптером FTDI... Есть ли способ узнать это?

Я надеюсь, что вы можете мне помочь... Заранее спасибо.

Обновить

Поскольку универсального решения не существует, есть ли способ однозначно идентифицировать одно из этих устройств FTDI? Некоторые из них предоставляют серийные номера, но, к сожалению, не все. Например, есть устройства с идентификатором устройства, например «USB\VID_0403&PID_FAF0\7&5E2426C&0&2», где «7&5E2426C&0&2» должен быть серийным номером. Но эти серийные номера с амперсандами не являются настоящими серийными номерами (может быть, это что-то из Windows или около того). PySerial даже распознает этот серийный номер только как «7».

Если бы у меня была хотя бы возможность получить настоящий серийный номер этого устройства, это было бы очень кстати. Таким образом, я мог однозначно идентифицировать это устройство, даже если оно получило новый идентификатор порта или устройства после отключения и повторного подключения. Или эти амперсанд-сериалы всегда одинаковы для одного устройства?


person Lula    schedule 16.04.2020    source источник
comment
Нет, FTDI не предоставляет только адаптер/конвертер. Это заблуждение.   -  person user2120666    schedule 16.04.2020


Ответы (4)


Когда используется конвертер FTDI Serial to USB, вы обычно получаете виртуальный COM-порт, который Windows распознает как устройство PlugAndPlay. Небольшая внутренняя электронная плата помещается в разъем USB кабеля FTDI, который выполняет преобразование последовательного интерфейса UART в USB.

Теперь, когда вы запрашиваете информацию о подключенном устройстве, вы получаете информацию о подключенном устройстве PlugAndPlay, плате кабеля FTDI, а не информацию об устройстве за этим кабелем. Например. когда устройство чтения карт подключено с помощью такого кабеля, вы получаете серийный номер платы кабеля FTDI, а не серийный номер устройства чтения карт.

Но не исключено, что полезную информацию удастся извлечь. Существует программа от FTDI под названием FT_Prog, которая позволяет программировать EEPROM. плата в кабеле. С помощью этого инструмента можно изменить часть информации, которую вы можете получить из кабеля FTDI, как показано на рисунке ниже.

Экран FTProg

Иногда это делается, но не обязательно для производителей устройств. И когда это сделано, нет стандартизированной схемы того, что вводить в эти поля. Для этого вам понадобится собственный словарь известных идентификаторов устройств.

Другой способ — получить информацию непосредственно с устройства, находящегося за кабелем. Но в этом случае вам нужно знать протокол связи, чтобы иметь возможность общаться с устройством. Если используются проприетарные протоколы, ваш единственный шанс — использовать сниффер для обратного проектирования протокола, но это может быть слишком экстремально^^

person Quergo    schedule 20.04.2020

Поскольку компания, использующая FTDI, не заинтересована в покупке собственного идентификатора поставщика, вам не повезло. Для FTDI нет стандартного протокола, поэтому нет универсального способа обнаружить устройство, стоящее за ним.

person FoxVK    schedule 16.04.2020

Спецификация USB позволяет (не требует), чтобы устройство предоставляло строковый дескриптор, содержащий серийный номер, или, что еще лучше, это может быть любая строка.

К счастью, FTDI предоставляет уникальные серийные номера. См. этот поток Получить серийный номер USB-устройства с помощью Python 3

person FoxVK    schedule 16.04.2020

FTDI обычно позволяет использовать EEPROM (на самом деле в большинстве случаев это простая флэш-память) для хранения в ней конкретной информации о продукте. Например. можно назначить конкретный идентификатор поставщика, идентификатор продукта, серийный номер, описание производителя, описание продукта. НО это только необязательно (Подробности ищите по FT_Prog). Таким образом, у каждого дизайнера продукта есть свобода, но ему не нужно заполнять все, что он хочет. Если у вас есть набор устройств, которые вы хотите поддерживать, вы можете проверить, поддерживают ли они интерфейс, совместимый с SCPI. В этом случае вы можете спросить их, используя *IDN? об их личности. Если нет, вы можете надеяться, что продукт имеет правильно записанное ПЗУ для предоставления дополнительной информации. В любом другом случае можно только догадываться.

person Christian B.    schedule 16.04.2020