2015-06-08 142 views
2

我有許多與STM32 VCP相同的設備。 Windows 8.1爲設備創建串行COM端口。如果我將一臺設備連接到任何PC的USB端口,Windows將綁定到同一個COM端口。將第二個設備連接到其他USB端口後,它將創建具有不同串行COM編號的下一個COM端口。如果我拔掉這些設備並以不同的順序連接,COM端口將在設備之間切換。這是一個問題,因爲我每次都需要相同的訂單COM端口(物理)。 使用USBlyzer軟件,我可以看到某種形式的USB端口號是每個物理USB端口不同:是否有可能通過USB端口使用PyUSB獲得USB設備

enter image description here

所以我想訪問(獲取當前設備),這些設備的端口號。或者列出所有設備並從設備對象獲取此端口號?

在libusb的文檔中發現它有這樣的方法:

uint8_t libusb_get_port_number(libusb_device * DEV)
獲取一個設備被連接到的端口的數量。

鏈接:http://libusb.sourceforge.net/api-1.0/group__dev.html

也許PyUSB有它太...

+0

我從來沒有見過Windows的行爲。如果這些設備是相同的(並且沒有USB序列號),那麼它們分配的COM端口號只應取決於它們插入的端口號,而不是它們插入的順序。但我承認我不接受不經常測試沒有序列號的USB設備,可能會更改某些設備。這是什麼版本的Windows? –

回答

1

找到其他解決我的問題。使用Windows DeviceManager API從位置信息獲取端口和集線器編號(USB物理標識)以及設備的友好名稱,其中包含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 
+0

感謝分享。這是一個超級有用的圖書館,它給了我想要的東西(經過大量研究!) – dustinrwh

相關問題