4

STM32 VCP と同一のデバイスが多数あります。Windows 8.1 は、デバイス用のシリアル COM ポートを作成します。1 つのデバイスを PC の USB ポートに接続すると、Windows は同じ COM ポートにバインドされます。2 番目のデバイスを別の USB ポートに接続すると、別のシリアル COM 番号で次の COM ポートが作成されます。これらのデバイスを取り外して別の順序で接続すると、デバイス間で COM ポートが切り替わります。毎回同じ順序の COM ポートの順序 (物理的に) が必要なため、これは問題です。USBlyzer ソフトウェアを使用すると、物理的な USB ポートごとに、ある種の USB ポート番号が異なることがわかります。

ここに画像の説明を入力

したがって、これらのデバイスをポート番号でアクセス (現在のデバイスを取得) したいと思います。または、すべてのデバイスを一覧表示し、デバイス オブジェクトからこのポート番号を取得しますか?

libusb のドキュメントには、次のようなメソッドがあることがわかりました。

uint8_t libusb_get_port_number (libusb_device *dev)
デバイスが接続されているポートの番号を取得します。

リンク: http://libusb.sourceforge.net/api-1.0/group__dev.html

多分PyUSBにもそれがあります...

4

1 に答える 1

2

私の問題に対する他の解決策を見つけました。Windows DeviceManager API を使用して、位置情報からポートとハブ番号 (USB 物理 ID) を取得し、COM ポート番号を含むデバイスのフレンドリ名を取得します。この情報を解析すると、シリアル通信の情報が得られます。

from infi.devicemanager import DeviceManager
dm = DeviceManager()
dm.root.rescan()

devices = dm.all_devices


for i in devices:
    try:
        print '{} : address: {}, bus: {}, location: {}'.format(i.friendly_name, i.address, i.bus_number, i.location)
    except Exception:
        pass
于 2015-06-08T14:27:18.043 に答える