
Perdóneme si el título tiene la forma de un problema XY, pero:
Tengo un sistema Windows del que cuelgan muchos dispositivos USB. (Soy un desarrollador integrado con un grupo de clientes y, a menudo, necesito ejecutar pruebas longitudinales en varios dispositivos integrados). Observo el siguiente fenómeno:
Mi conjunto predeterminado de dispositivos USB se ve así:
Sin embargo, en este caso, mi dispositivo OSBOT TinyCam no está disponible. ("Parece que otra aplicación ya está usando la cámara. Código de error de la aplicación Cámara de Windows 0xA00F4243")
Si expulso (o simplemente desconecto) CUALQUIER cuatro de los dispositivos EDBG CMSIS-DAP y/o Atmel-ICE CMSIS-DAP, TinyCam funciona normalmente.
Lo que me lleva a las preguntas:
- ¿Existe un límite en la cantidad de dispositivos que el sistema puede administrar en el bus USB?
- ¿Existe información adicional que pueda recopilar para diagnosticar mejor el problema?
Además, no creo que esto sea específico de OSBOT TinyCam. Por ejemplo, si desconecto todos los dispositivos USB CMSIS-DAP, conecto OSBOT TinyCam y ejecuto la aplicación Cámara, la cámara funciona bien. Pero luego, si conecto todos los dispositivos CMSIS-DAP DESPUÉS de conectar TinyCam, mi Microchip IDE ya no puede acceder a todos los dispositivos CMSIS-DAP:
Entonces, en este caso, parece que "el que llegue primero" es el que trabaja, y los demás quedan excluidos.
Respuesta1
Es posible que se encuentre con la limitación de su controlador de host raíz USB en lo que respecta a los puntos finales. Esta es una limitación de hardware que no está relacionada con su sistema operativo.
Cada dispositivo USB puede definir hasta 32 puntos finales (16 entradas y 16 salidas, aunque uno debe ser un punto final de control), pero la mayoría de los dispositivos solo definen 2 o 3 puntos finales (por ejemplo, entrada de datos, salida de datos y un punto final de control). Los propios centros también definen al menos un punto final de control. Cada implementación de controlador USB puede tener sus propias limitaciones de capa o punto final.
En su caso, algunos de sus dispositivos pueden requerir más puntos finales que otros. Su controlador de host raíz USB también puede tener su propio límite en la cantidad de puntos finales que puede admitir.
Para aumentar la cantidad de puntos finales admitidos por su computadora, necesita más controladores de host USB raíz. Encadenar concentradores USB no agrega más puntos finales, sino que reduce el número, ya que los propios concentradores utilizan puntos finales del controlador raíz.
Aunque la especificación USB permite una enorme cantidad teórica de dispositivos en un controlador raíz, las limitaciones prácticas inherentes a la implementación de controladores USB limitan aún más el máximo posible a un número mucho menor.
Una herramienta para examinar la cantidad de puntos finales (y todo lo demás) en sus dispositivos USB es el código abierto Visor de árbol de dispositivos USB. Puede mostrar los puntos finales utilizados por un dispositivo, pero no muestra el límite para el controlador raíz.
Por ejemplo, aquí se muestran 3 puntos finales para un disco USB conectado:
Algunas fuentes sobre el tema:
Respuesta2
La solución: ramas anchas, no profundas
@harrymc Respondió correctamente a la pregunta: la topología USB era "demasiado profunda", lo que limitaba la cantidad de puntos finales.
Anteriormente, tenía cuatro expansores USB de 7 puertos, "A" y "C" estaban conectados directamente a la PC, "B" y "D" estaban conectados en cadena desde "A" y "C".
+-----+ +---------+ +---------+
| |<=>|A |<=>|B |
| | +---------+ +---------+
| | +---------+ +---------+
| PC |<=>|C |<=>|D |
+-----+ +---------+ +---------+
Reconfiguré mi configuración para que "A", "B", "C" y "D" se conectaran directamente a la PC.
+-----+ +---------+
| |<=>|A |
| | +---------+
| | +---------+
| |<=>|B |
| | +---------+
| | +---------+
| |<=>|C |
| | +---------+
| | +---------+
| PC |<=>|D |
+-----+ +---------+
Esto redujo un nivel la profundidad de mi árbol de dispositivos USB y ahora puedo admitir todos los dispositivos que necesito simultáneamente.