
如果標題是 XY 問題的形式,請原諒我,但是:
我有 Windows 系統,上面掛有很多 USB 裝置。 (我是一名擁有大量客戶的嵌入式開發人員,並且經常需要在一堆嵌入式設備上執行縱向測試。)我觀察到以下現象:
我的預設 USB 裝置集如下所示:
但是在這種情況下,我的 OSBOT TinyCam 設備不可用。 (「看起來另一個應用程式已經在使用相機。Windows 相機應用程式錯誤代碼 0xA00F4243」)
如果我彈出(或只是拔掉)任何四個 EDBG CMSIS-DAP 設備和/或 Atmel-ICE CMSIS-DAP 設備,TinyCam 都會正常運作。
這引出了我的問題:
- 系統可以在 USB 總線上管理的裝置數量是否有限制?
- 我可以收集其他資訊來更好地診斷問題嗎?
另外,我不認為這是 OSBOT TinyCam 特有的。例如,如果我拔下所有 CMSIS-DAP USB 設備並插入 OSBOT TinyCam 並啟動相機應用程序,則相機可以正常工作。但是,如果我在插入 TinyCam 後插入所有 CMSIS-DAP 設備,我的 Microchip IDE 將無法再存取所有 CMSIS-DAP 設備:
所以在這種情況下,看起來「誰先到達那裡」就是有效的,而其他人則被排除在外。
答案1
您可能會遇到 USB 根主機控制器在端點方面的限制。這是與您的作業系統無關的硬體限制。
每個USB 設備最多可定義32 個端點(16 個輸入和16 個輸出,但其中一個必須是控制端點),但大多數設備僅定義2 或3 個端點(例如資料輸入、資料輸出和控制端點) 。集線器本身也至少定義了一個控制端點。每個 USB 控制器實作可能有其自己的層或端點限制。
就您的情況而言,您的某些裝置可能需要比其他裝置更多的端點。您的 USB 根主機控制器也可能對其可支援的端點數量有其自身的限制。
若要增加電腦支援的端點數量,您需要更多根 USB 主機控制器。連結 USB 集線器不會增加更多端點,而是減少數量,因為集線器本身會耗盡根控制器的端點。
儘管 USB 規範允許在一個根控制器上容納大量理論上的設備,但 USB 控制器實現中固有的實際限制進一步將可能的最大值限制為低得多的數量。
用於檢查 USB 裝置上端點數量(以及其他所有內容)的開源工具 USB 裝置樹檢視器。它可以顯示設備使用的端點,但不顯示根控制器的限制。
例如,此處顯示已連接 USB 磁碟的 3 個端點:
有關該主題的一些來源:
答案2
解決方案:分支寬而不深
@harrymc 正確回答了這個問題:USB 拓撲“太深”,限制了端點的數量。
以前,我有四個7埠USB擴充器,「A」和「C」直接連接到PC,「B」和「D」從「A」和「C」以菊花鏈方式連接。
+-----+ +---------+ +---------+
| |<=>|A |<=>|B |
| | +---------+ +---------+
| | +---------+ +---------+
| PC |<=>|C |<=>|D |
+-----+ +---------+ +---------+
我重新配置了設置,將「A」、「B」、「C」和「D」全部直接連接到電腦。
+-----+ +---------+
| |<=>|A |
| | +---------+
| | +---------+
| |<=>|B |
| | +---------+
| | +---------+
| |<=>|C |
| | +---------+
| | +---------+
| PC |<=>|D |
+-----+ +---------+
這將我的 USB 裝置樹的深度減少了一個級別,現在我可以同時支援我需要的所有裝置。