Depuración de dispositivos compuestos USB: números de interfaz, IAD, endpoints y binding de driver
Cómo depurar dispositivos compuestos USB cuando una interfaz funciona, otra falla o el host enlaza el driver equivocado.
Los dispositivos compuestos USB son cómodos y peligrosos a la vez. Un único dispositivo puede exponer controles HID, CDC serie, mass storage, endpoints vendor-specific, audio, vídeo o interfaces de diagnóstico. Cuando todo se describe correctamente, el host enlaza los drivers adecuados y cada función va. Cuando un campo de descriptor está mal, el dispositivo entero puede parecer poco fiable.
Búsquedas como "USB composite device not recognized", "CDC interface not showing", "HID works but serial does not" o "wrong driver binding USB interface" suelen apuntar a estructura de descriptores, numeración de interfaz, asignación de endpoints o comportamiento del Interface Association Descriptor.
Los dispositivos compuestos necesitan una configuración coherente
El configuration descriptor es el mapa de nivel superior. Tiene que describir la longitud total, el número de interfaces, los atributos de potencia y todos los descriptores de interfaz y endpoint anidados. Si wTotalLength está mal, el host puede no leer todas las funciones. Si el conteo de interfaces está mal, el host puede ignorar las últimas. Si las direcciones de endpoint colisionan, las transferencias se vuelven ambiguas o inválidas.
Inspecciona:
- Longitud total de la configuración.
- Número de interfaces.
- Números de interfaz.
- Alternate settings.
- Direcciones de endpoint.
- Direcciones de endpoint.
- Valores de class, subclass, protocol.
- Orden de los descriptores.
Una captura debería mostrar si el host pidió la configuración completa y qué bytes devolvió el dispositivo.
El IAD ayuda a agrupar interfaces relacionadas
Los Interface Association Descriptors se suelen usar para agrupar varias interfaces que pertenecen a una misma función, como la comunicación CDC más los datos CDC. Sin un agrupamiento correcto, el host puede enlazar drivers mal o exponer solo parte de la función.
Evidencia de IAD a inspeccionar:
- Primer número de interfaz.
- Conteo de interfaces.
- Class, subclass y protocol de la función.
- Posición antes de las interfaces agrupadas.
- Consistencia con los descriptores de interfaz reales.
Si el CDC serie no aparece pero el HID sí, puede que la interfaz HID esté bien y el agrupamiento CDC esté mal.
Las colisiones de direcciones de endpoint son fáciles de pasar por alto
Las direcciones de endpoint incluyen la dirección. El endpoint 0x81 y el 0x01 son direcciones distintas, pero dos endpoints IN con la misma dirección no son válidos dentro de la misma configuración. Los equipos de firmware a veces copian descriptores de endpoint entre interfaces y se olvidan de actualizar las direcciones.
Síntomas:
- Una interfaz funciona y otra queda muda.
- El host manda transferencias a un endpoint inesperado.
- El driver de clase carga pero la aplicación no recibe datos.
- STALL o timeout en endpoint tras la configuración.
- Solo una función va a la vez.
La captura debería enseñar los descriptores de endpoint y el tráfico posterior de transferencia lado a lado.
El binding de driver también es evidencia
El host elige drivers según los descriptores. Un dispositivo que se enlaza mal puede tener evidencia de descriptores que explique por qué. Class, subclass, protocol, interface association, compatible IDs y descriptores específicos del SO pueden afectar al binding.
No diagnostiques el binding solo con el Administrador de dispositivos o con logs de la aplicación. Compara las class-specific requests del host con el árbol de descriptores. Si las peticiones de clase esperadas no llegan, probablemente el host no enlazó el driver esperado.
Dónde encaja Bus Scope
Bus Scope debería ayudar a los equipos de firmware a inspeccionar dispositivos compuestos a dos niveles:
- Mapa de descriptores.
- Evidencia de transferencias tras el binding del driver.
Una buena sesión .bscope para depurar compuestos muestra:
- Todas las interfaces.
- Agrupamiento por IAD.
- Asignación de endpoints.
- Class-specific requests por interfaz.
- Bytes de descriptor en crudo.
- Estado de las transferencias tras la configuración.
Eso hace que la conversación de soporte sea concreta. En lugar de "a Windows no le gusta nuestro dispositivo compuesto", el informe puede decir "la interfaz 2 nunca recibe class requests CDC porque el descriptor de agrupamiento no coincide con el layout declarado de interfaces".
Ese es el nivel de evidencia que necesitan los equipos de firmware.
<!-- bus-scope-localized-transaction-foundation-v1:start -->Prueba del contrato USB para «Depuración de dispositivos compuestos USB: números de interfaz, IAD, endpoints y binding de driver»
La respuesta directa es que STALL, timeout o reset no explica por sí solo la causa. Primero demuestra que el proveedor observa el dispositivo correcto; después lee el contrato de transferencia: tipo, dirección, recipient, wValue, wIndex, longitud declarada y real, status y estado anterior y posterior. En «Depuración de dispositivos compuestos USB: números de interfaz, IAD, endpoints y binding de driver», relaciona la conclusión con la primera transacción que difiere de un caso bueno.
| Límite | Qué comparar | Decisión útil |
|---|---|---|
| Plataforma | proveedor, permiso, Root Hub o usbmon/XHC20 | ¿Llegan records de la conexión correcta? |
| Setup | bmRequestType, bRequest, wValue, wIndex, wLength | ¿El host envía la petición prevista? |
| Data | dirección, longitud y bytes retenidos | ¿El payload cumple el contrato? |
| Status | ACK, STALL, timeout o cancellation | ¿Dónde termina la transacción? |
| Estado | configuration, interface, alternate setting, endpoint halt | ¿El dispositivo estaba preparado? |
Empieza antes de reset y enumeración y conserva descriptors, SET_CONFIGURATION, SET_INTERFACE y el comando previo al fallo. Un filtro estrecho de endpoint puede ocultar el control transfer decisivo. Ejecuta una sola acción USB documentada por prueba y cambia solo firmware, driver, puerto, cable, comando o timing.
¿Cómo se escribe una respuesta citable?
Indica la petición observada, sus campos setup, la respuesta y el contexto anterior; propone después una prueba con un solo cambio. Bytes no retenidos por el límite de captura no prueban packet loss. La proximidad entre command y reset demuestra correlación, no causa sin repetición o transición de estado.
¿Cuándo vale una comparación?
Mantén VID/PID, firmware, speed, topología, proveedor, filtro y trigger. Compara fases USB semánticas y no frame numbers entre usbmon y USBPcap. Anota inicio, final, versión, OS, conexión y checksum. Revisa la solución de problemas de Bus Scope.
Los propietarios Semrush siguen separados: free USB analyzer en la página de producto, best USB protocol analyzer en la comparación y USB descriptor viewer en la guía de descriptors. Esta página de soporte no recibe volumen o KD inventado.
<!-- bus-scope-localized-transaction-foundation-v1:end --><!-- multilingual-blog-closeout:start -->Respuesta directa y límite de aceptación
La respuesta breve a «Depuración de dispositivos compuestos USB: números de interfaz, IAD, endpoints y binding de driver» es: Cómo depurar dispositivos compuestos USB cuando una interfaz funciona, otra falla o el host enlaza el driver equivocado. Trate esa frase como un resultado que debe comprobarse, no como una promesa para cualquier entrada, dispositivo, proyecto o entorno. Un resultado completo registra estado inicial, acción exacta, salida visible y condición que demuestra que la tarea terminó en Bus Scope.
Procedimiento basado en evidencia
Empiece con un caso pequeño y repetible antes de cambiar un proyecto completo. Anote versión de la aplicación, sistema operativo, identidad de entrada o dispositivo, ajustes relevantes y resultado esperado. Ejecute una acción deliberada, conserve la primera transición inesperada y compárela con un caso conocido cuando exista. Cambiar varios controles a la vez oculta qué condición creó o corrigió el problema.
Punto de control 1: Depuración de dispositivos compuestos USB: números de interfaz, IAD, endpoints y binding d
Compruebe «Depuración de dispositivos compuestos USB: números de interfaz, IAD, endpoints y binding de driver» con la entrada representativa más pequeña. Mantenga iguales los ajustes no relacionados, repita la misma acción y revise el resultado después de reabrir o reconectar. Una captura aislada es más débil que un registro con entrada, ajuste, acción, salida y hora.
Punto de control 2: Cómo depurar dispositivos compuestos USB cuando una interfaz funciona, otra falla o el hos
Si «Cómo depurar dispositivos compuestos USB cuando una interfaz funciona, otra falla o el host enlaza el driver equivocado.» es ambiguo, compare un caso bueno y otro fallido bajo condiciones equivalentes. Marque la primera diferencia significativa en vez de enumerar todos los síntomas posteriores. Ese límite suele producir una consulta más clara y un experimento más seguro.
Punto de control 3: Los dispositivos compuestos necesitan una configuración coherente
Compruebe «Los dispositivos compuestos necesitan una configuración coherente» con la entrada representativa más pequeña. Mantenga iguales los ajustes no relacionados, repita la misma acción y revise el resultado después de reabrir o reconectar. Una captura aislada es más débil que un registro con entrada, ajuste, acción, salida y hora.
Punto de control 4: El IAD ayuda a agrupar interfaces relacionadas
Si «El IAD ayuda a agrupar interfaces relacionadas» es ambiguo, compare un caso bueno y otro fallido bajo condiciones equivalentes. Marque la primera diferencia significativa en vez de enumerar todos los síntomas posteriores. Ese límite suele producir una consulta más clara y un experimento más seguro.
Punto de control 5: Las colisiones de direcciones de endpoint son fáciles de pasar por alto
Compruebe «Las colisiones de direcciones de endpoint son fáciles de pasar por alto» con la entrada representativa más pequeña. Mantenga iguales los ajustes no relacionados, repita la misma acción y revise el resultado después de reabrir o reconectar. Una captura aislada es más débil que un registro con entrada, ajuste, acción, salida y hora.
Punto de control 6: El binding de driver también es evidencia
Si «El binding de driver también es evidencia» es ambiguo, compare un caso bueno y otro fallido bajo condiciones equivalentes. Marque la primera diferencia significativa en vez de enumerar todos los síntomas posteriores. Ese límite suele producir una consulta más clara y un experimento más seguro.
Punto de control 7: Dónde encaja Bus Scope
Compruebe «Dónde encaja Bus Scope» con la entrada representativa más pequeña. Mantenga iguales los ajustes no relacionados, repita la misma acción y revise el resultado después de reabrir o reconectar. Una captura aislada es más débil que un registro con entrada, ajuste, acción, salida y hora.
Punto de control 8: Prueba del contrato USB para «Depuración de dispositivos compuestos USB: números de interf
Si «Prueba del contrato USB para «Depuración de dispositivos compuestos USB: números de interfaz, IAD, endpoints y binding de driver»» es ambiguo, compare un caso bueno y otro fallido bajo condiciones equivalentes. Marque la primera diferencia significativa en vez de enumerar todos los síntomas posteriores. Ese límite suele producir una consulta más clara y un experimento más seguro.
Punto de control 9: ¿Cómo se escribe una respuesta citable?
Compruebe «¿Cómo se escribe una respuesta citable?» con la entrada representativa más pequeña. Mantenga iguales los ajustes no relacionados, repita la misma acción y revise el resultado después de reabrir o reconectar. Una captura aislada es más débil que un registro con entrada, ajuste, acción, salida y hora.
Punto de control 10: ¿Cuándo vale una comparación?
Si «¿Cuándo vale una comparación?» es ambiguo, compare un caso bueno y otro fallido bajo condiciones equivalentes. Marque la primera diferencia significativa en vez de enumerar todos los síntomas posteriores. Ese límite suele producir una consulta más clara y un experimento más seguro.
Matriz de aceptación
| Punto | Evidencia que conservar | Condición de aprobado |
|---|---|---|
| Depuración de dispositivos compuestos USB: números de interfaz, IAD, endpoints y binding de driver | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Cómo depurar dispositivos compuestos USB cuando una interfaz funciona, otra falla o el host enlaza el driver equivocado. | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Los dispositivos compuestos necesitan una configuración coherente | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| El IAD ayuda a agrupar interfaces relacionadas | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Las colisiones de direcciones de endpoint son fáciles de pasar por alto | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| El binding de driver también es evidencia | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
Aislamiento, recuperación y entrega
Deténgase en el primer límite que falla. Conserve fuente, proyecto, sesión o captura, duplíquelo antes de una edición destructiva y cambie una variable por experimento. Repetir un flujo amplio después de varios cambios puede dar otro resultado sin explicar la causa.
Separe ausencia de evidencia de evidencia de ausencia. Una vista vacía puede indicar entrada, alcance, filtro, permiso, dispositivo, intervalo o estado equivocado. Verifique adquisición o importación antes de interpretar el decoder, editor, informe o exportación.
Antes de entregar, reabra el artefacto y revise inicio, punto de decisión y final. Registre versión, plataforma, configuración, expectativa, observación y reproducción mínima. Elimine o redacte datos sensibles y confirme que el destinatario está autorizado.
Preguntas y respuestas
¿Cuál es la forma fiable más rápida de empezar?
Use el caso representativo más pequeño, escriba el resultado esperado y cambie una variable. Confirme el recorrido básico antes de añadir filtros, efectos, ediciones, automatización o una fuente mayor.
¿Qué evidencia debe guardarse?
Conserve identidad de entrada, versión, plataforma, ajustes, acción exacta, primera transición inesperada y salida final. Cierre y reabra cualquier proyecto, sesión, informe o exportación antes de considerarlo duradero.
¿Cuándo debe repetirse el procedimiento?
Repítalo después de cambios relevantes en aplicación, sistema, driver, firmware, modelo, fuente o flujo. Preserve el caso aceptado anterior como referencia sin modificar.
¿Cuándo está listo para entregar?
Cuando otra persona autorizada identifica la entrada, repite la acción, obtiene el mismo resultado, entiende los límites restantes y abre el artefacto sin depender de estado local no documentado.
Guías relacionadas
Estas páginas en el mismo idioma cubren etapas contiguas sin cambiar el propietario canónico del tema:
<!-- multilingual-blog-closeout:end -->