해결책: 가지가 깊지 않고 넓게 가지

해결책: 가지가 깊지 않고 넓게 가지

제목이 XY 문제 형식이라면 죄송합니다. 하지만:

많은 USB 장치가 걸려 있는 Windows 시스템이 있습니다. (저는 다수의 클라이언트를 보유한 임베디드 개발자이며, 다수의 임베디드 장치에 대해 종단적 테스트를 실행해야 하는 경우가 많습니다.) 다음과 같은 현상이 관찰됩니다.

내 기본 USB 장치 세트는 다음과 같습니다.

enter image description here

그러나 이 경우 내 OSBOT TinyCam 장치를 사용할 수 없습니다. ("다른 앱이 이미 카메라를 사용하고 있는 것 같습니다. Windows 카메라 앱 오류 코드 0xA00F4243")

EDBG CMSIS-DAP 장치 및/또는 Atmel-ICE CMSIS-DAP 장치 중 4개를 꺼내거나 플러그를 뽑으면 TinyCam이 정상적으로 작동합니다.

그러면 다음과 같은 질문이 생깁니다.

  • 시스템이 USB 버스에서 관리할 수 있는 장치 수에 제한이 있습니까?
  • 문제를 더 잘 진단하기 위해 수집할 수 있는 추가 정보가 있습니까?

또한 나는 이것이 OSBOT TinyCam에만 국한된 것이라고 생각하지 않습니다. 예를 들어 모든 CMSIS-DAP USB 장치를 분리하고 OSBOT TinyCam을 연결한 후 카메라 앱을 실행하면 카메라가 제대로 작동합니다. 그러나 TinyCam을 연결한 후 모든 CMSIS-DAP 장치를 연결하면 내 Microchip IDE가 더 이상 모든 CMSIS-DAP 장치에 액세스할 수 없습니다.

enter image description here

따라서 이 경우에는 "먼저 도착하는 사람"이 작동하는 것으로 보이고 나머지는 제외됩니다.

답변1

엔드포인트와 관련하여 USB 루트 호스트 컨트롤러의 제한 사항이 발생할 수 있습니다. 이는 운영 체제와 관련이 없는 하드웨어 제한 사항입니다.

각 USB 장치는 최대 32개의 엔드포인트를 정의할 수 있습니다(16개의 입력과 16개의 출력, 단 하나는 제어 엔드포인트여야 함). 그러나 대부분의 장치는 2개 또는 3개의 엔드포인트(예: 데이터 입력, 데이터 출력 및 제어 엔드포인트)만 정의합니다. 허브 자체도 최소한 제어 엔드포인트를 정의합니다. 모든 USB 컨트롤러 구현에는 자체 레이어 또는 엔드포인트 제한이 있을 수 있습니다.

귀하의 경우 일부 장치에는 다른 장치보다 더 많은 엔드포인트가 필요할 수 있습니다. USB 루트 호스트 컨트롤러에는 지원할 수 있는 엔드포인트 수에 대한 자체 제한이 있을 수도 있습니다.

컴퓨터에서 지원하는 엔드포인트 수를 늘리려면 더 많은 루트 USB 호스트 컨트롤러가 필요합니다. USB 허브를 연결하면 엔드포인트가 더 추가되지 않고 허브 자체가 루트 컨트롤러의 엔드포인트를 사용하므로 개수가 줄어듭니다.

USB 사양에서는 하나의 루트 컨트롤러에 이론적으로 엄청난 수의 장치를 허용하지만 USB 컨트롤러 구현에 내재된 실질적인 제한으로 인해 가능한 최대값이 훨씬 더 적은 수로 더욱 제한됩니다.

USB 장치의 엔드포인트 수(및 기타 모든 것)를 검사하는 도구는 오픈 소스입니다. USB 장치 트리 뷰어. 장치에서 사용하는 끝점을 표시할 수 있지만 루트 컨트롤러에 대한 제한은 표시하지 않습니다.

예를 들어, 여기에는 연결된 USB 디스크에 대한 3개의 엔드포인트가 표시됩니다.

enter image description here

주제에 관한 일부 출처 :

답변2

해결책: 가지가 깊지 않고 넓게 가지

@harrymc 질문에 올바르게 대답했습니다. USB 토폴로지가 "너무 깊어" 엔드포인트 수가 제한되었습니다.

이전에는 4개의 7포트 USB 확장기가 있었는데 "A"와 "C"는 PC에 직접 연결되었고 "B"와 "D"는 "A"와 "C"에서 데이지 체인으로 연결되었습니다.

+-----+   +---------+   +---------+
|     |<=>|A        |<=>|B        |
|     |   +---------+   +---------+
|     |   +---------+   +---------+
| PC  |<=>|C        |<=>|D        |
+-----+   +---------+   +---------+

"A", "B", "C" 및 "D"가 모두 PC에 직접 연결되도록 설정을 재구성했습니다.

+-----+   +---------+
|     |<=>|A        |
|     |   +---------+
|     |   +---------+
|     |<=>|B        |
|     |   +---------+
|     |   +---------+
|     |<=>|C        |
|     |   +---------+
|     |   +---------+
| PC  |<=>|D        |
+-----+   +---------+

이로 인해 USB 장치 트리의 깊이가 한 단계 줄어들었고 이제 필요한 모든 장치를 동시에 지원할 수 있습니다.

관련 정보