Как узнать, какие инструменты находятся за адаптером FTDI на Windows? - PullRequest
0 голосов
/ 16 апреля 2020

В настоящее время я разрабатываю инструмент Python для Windows, который способен искать все устройства, подключенные к windows p c. Он уже поддерживает устройства rnet, и сейчас я пытаюсь добавить поддержку 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».

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

Ответы [ 4 ]

1 голос
/ 21 апреля 2020

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

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

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

FTProg screen

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

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

1 голос
/ 16 апреля 2020

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

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

1 голос
/ 16 апреля 2020

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

1 голос
/ 16 апреля 2020

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

...