Fallo en la petición de device descriptor USB en Windows: depurando Code 43 con evidencia a nivel de bus
Cómo investigar el fallo de Device Descriptor Request Failed en Windows USB, Code 43, descriptores malos, timeouts de enumeración, problemas de power y crashes de firmware con evidencia de captura USB.
"Unknown USB Device (Device Descriptor Request Failed)" es uno de los errores USB más comunes en Windows. El Administrador de dispositivos puede mostrar Code 43. El dispositivo puede aparecer como desconocido, fallar nada más enchufarlo o ir en una máquina pero no en otra. Los usuarios buscan "USB Device Descriptor Request Failed", "Windows Code 43 USB", "device descriptor request failed fix" y "USB enumeration failed" porque Windows da una etiqueta de usuario, no la razón a nivel de bus.
La petición del descriptor es uno de los primeros pasos de la enumeración USB. Si falla, el host no llega a saber ni qué es el dispositivo. Eso significa que los drivers de clase, el software de aplicación, los puertos serie, los HID reports y los protocolos vendor no son el primer sitio donde depurar. El fallo pasó antes de que el sistema operativo tuviera bastante información para enlazar el driver normal.
Bus Scope ayuda para esta clase de problema porque la evidencia importante está en las primeras transferencias de control tras el attach.
Qué intenta hacer Windows
Cuando se enchufa un dispositivo USB, el host detecta el attach, resetea el puerto y pide el device descriptor. El device descriptor contiene identidad básica e información de capacidad:
- Versión USB.
- Device class / subclass / protocol.
- Max packet size para endpoint zero.
- Vendor ID.
- Product ID.
- Número de release del dispositivo.
- Índice de string de fabricante.
- Índice de string de producto.
- Índice de string de número de serie.
- Número de configuraciones.
Si Windows no puede leer este descriptor de forma fiable, puede reportar "Device Descriptor Request Failed".
Qué puede significar el fallo
Este error puede deberse a:
- Firmware del dispositivo que no responde en endpoint zero.
- Cable USB malo o inestable.
- Power insuficiente.
- Reset del dispositivo durante la enumeración.
- Contenido del descriptor mal formado o inconsistente.
- Problema con el max packet size del endpoint zero.
- Problema de timing durante la recuperación tras reset.
- Compatibilidad de hub o puerto.
- Problema de negociación USB 2.0 vs USB 3.x.
- Daño eléctrico o defecto de hardware.
- Problema de driver del host controller.
La misma etiqueta de Windows cubre muchas causas raíz distintas. Por eso importa la evidencia de paquetes.
Secuencia temprana de enumeración
Una enumeración temprana sana suele parecerse a:
Port attach
Port reset
GET_DESCRIPTOR(Device, first 8 bytes)
SET_ADDRESS
GET_DESCRIPTOR(Device, full)
GET_DESCRIPTOR(Configuration)
SET_CONFIGURATION
Distintos host controllers y versiones de Windows pueden variar, pero el patrón es similar. Si el primer GET_DESCRIPTOR falla, el host nunca llega al setup normal del dispositivo.
Los primeros 8 bytes importan
Los hosts suelen leer primero los primeros 8 bytes del device descriptor para conocer el packet size del endpoint zero. Si esa petición falla o devuelve datos inconsistentes, la enumeración se puede parar.
Los desarrolladores de firmware a veces prueban solo la respuesta completa del descriptor y se pierden la petición inicial corta. Un dispositivo puede ir con un host y fallar con otro porque el timing y la longitud de la petición cambian.
Busca:
- Ninguna respuesta a la primera petición de descriptor.
- Short packet donde se espera una respuesta válida.
- STALL en endpoint zero.
- Timeout seguido de reset.
- Longitud de descriptor que no encaja con la estructura esperada.
- Datos del descriptor que cambian entre intentos.
Power y bucles de reset
Si el dispositivo tarda en arrancar o consume demasiada corriente, puede resetearse durante la enumeración. Windows entonces vuelve a intentar. El resultado puede ser un bucle:
Attach
Reset
GET_DESCRIPTOR
Timeout
Reset
GET_DESCRIPTOR
Timeout
Unknown USB Device
Los usuarios pueden creer que es un problema de driver porque el error aparece en el Administrador de dispositivos. Pero si nunca se leyó el descriptor, el driver normal ni siquiera entró en juego.
Prueba un cable corto directo, otro puerto, un hub con alimentación y otro host, pero conserva la captura. La traza dice si el dispositivo falló antes o después de la respuesta de descriptor.
Descriptores mal formados
Si el dispositivo devuelve bytes de descriptor pero son inválidos, Windows puede rechazar el dispositivo. Ejemplos:
bLengthincorrecto.- Descriptor type incorrecto.
- Longitud total de configuración que no encaja.
- Falta el endpoint descriptor.
- Interface count que no encaja.
- Max packet size inválido.
- String descriptor length que no coincide.
- Versión USB anunciada como soportada sin estarlo.
Los descriptores mal formados son especialmente habituales en firmware a medida, placas de desarrollo, cores USB en FPGA y dispositivos con stacks USB escritos a mano.
Bus Scope puede inspeccionar el contenido del descriptor directamente en lugar de depender del error genérico del Administrador de dispositivos.
Por qué va en Linux pero no en Windows
Algunos dispositivos enumeran en Linux pero fallan en Windows porque los hosts no son igual de tolerantes. Windows puede aplicar comprobaciones de consistencia de descriptores distintas. Linux puede reintentar de forma que tape problemas de timing. Un dispositivo también puede depender de un comportamiento de driver de clase que cambia entre sistemas operativos.
No concluyas que Windows se equivoca o que el dispositivo está bien. Compara las trazas de enumeración. La diferencia se suele ver en el orden de peticiones, el timing, la longitud del descriptor o el comportamiento de reset.
Checklist de depuración
Usa este proceso:
- Captura desde antes del plug-in.
- Identifica si la primera petición de device descriptor recibe alguna respuesta.
- Comprueba si el endpoint zero hace STALL o timeout.
- Inspecciona los bytes del descriptor para verificar longitud y tipo.
- Mira si se repiten resets de puerto.
- Compara puerto directo frente a hub.
- Compara puertos USB 2.0 y USB 3.x.
- Prueba otro cable.
- Compara trazas de enumeración en Windows y Linux.
- Si el firmware es a medida, prueba lecturas de descriptor cortas de forma explícita.
Qué incluir en un bug report
Un informe útil incluye:
- Texto del error de Windows y Code 43 si aparece.
- VID/PID del dispositivo si alguna vez se leyó.
- Si la primera petición de descriptor de 8 bytes tuvo éxito.
- Última petición USB correcta antes del fallo.
- Si se repiten los resets.
- Detalles de cable/hub/puerto.
- Captura en torno al plug-in, no solo tras el fallo.
Eso da a los equipos de firmware y driver evidencia accionable.
Diagnóstico final
"USB Device Descriptor Request Failed" significa que el host falló muy pronto en la enumeración. La causa raíz puede estar en el firmware, la estructura del descriptor, el timing, el comportamiento del endpoint zero, el power, el cable, el hub o la compatibilidad con el host. Suele ser demasiado pronto para echar la culpa a la aplicación.
Bus Scope soporta el flujo correcto: inspeccionar las primeras transferencias de control, conservar la secuencia de enumeración y diagnosticar el fallo desde el bus USB en lugar de desde una etiqueta genérica de Windows.
<!-- bus-scope-localized-transaction-foundation-v1:start -->Prueba del contrato USB para «Fallo en la petición de device descriptor USB en Windows: depurando Code 43 con evidencia a nivel de bus»
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 «Fallo en la petición de device descriptor USB en Windows: depurando Code 43 con evidencia a nivel de bus», 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 «Fallo en la petición de device descriptor USB en Windows: depurando Code 43 con evidencia a nivel de bus» es: Cómo investigar el fallo de Device Descriptor Request Failed en Windows USB, Code 43, descriptores malos, timeouts de enumeración, problemas de power y crashes de firmware con evidencia de captura USB. 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: Fallo en la petición de device descriptor USB en Windows: depurando Code 43 con evidencia
Cierre «Fallo en la petición de device descriptor USB en Windows: depurando Code 43 con evidencia a nivel de bus» solo cuando el resultado guardado, exportado o reabierto conserve el estado observado. La respuesta temporal de la interfaz orienta, pero la evidencia duradera es más fuerte. Documente cualquier límite pendiente para quien continúe.
Punto de control 2: Cómo investigar el fallo de Device Descriptor Request Failed en Windows USB, Code 43, desc
Para «Cómo investigar el fallo de Device Descriptor Request Failed en Windows USB, Code 43, descriptores malos, timeouts de enumeración, problemas de power », separe una decisión del producto de un límite del sistema, hardware, archivo fuente, permiso o proceso. Confirme qué capa produjo la evidencia antes de atribuir una causa. Así evita convertir un síntoma cercano en una causa raíz supuestamente probada.
Punto de control 3: Qué intenta hacer Windows
Cierre «Qué intenta hacer Windows» solo cuando el resultado guardado, exportado o reabierto conserve el estado observado. La respuesta temporal de la interfaz orienta, pero la evidencia duradera es más fuerte. Documente cualquier límite pendiente para quien continúe.
Punto de control 4: Qué puede significar el fallo
Para «Qué puede significar el fallo», separe una decisión del producto de un límite del sistema, hardware, archivo fuente, permiso o proceso. Confirme qué capa produjo la evidencia antes de atribuir una causa. Así evita convertir un síntoma cercano en una causa raíz supuestamente probada.
Punto de control 5: Secuencia temprana de enumeración
Cierre «Secuencia temprana de enumeración» solo cuando el resultado guardado, exportado o reabierto conserve el estado observado. La respuesta temporal de la interfaz orienta, pero la evidencia duradera es más fuerte. Documente cualquier límite pendiente para quien continúe.
Punto de control 6: Los primeros 8 bytes importan
Para «Los primeros 8 bytes importan», separe una decisión del producto de un límite del sistema, hardware, archivo fuente, permiso o proceso. Confirme qué capa produjo la evidencia antes de atribuir una causa. Así evita convertir un síntoma cercano en una causa raíz supuestamente probada.
Punto de control 7: Power y bucles de reset
Cierre «Power y bucles de reset» solo cuando el resultado guardado, exportado o reabierto conserve el estado observado. La respuesta temporal de la interfaz orienta, pero la evidencia duradera es más fuerte. Documente cualquier límite pendiente para quien continúe.
Punto de control 8: Descriptores mal formados
Para «Descriptores mal formados», separe una decisión del producto de un límite del sistema, hardware, archivo fuente, permiso o proceso. Confirme qué capa produjo la evidencia antes de atribuir una causa. Así evita convertir un síntoma cercano en una causa raíz supuestamente probada.
Punto de control 9: Por qué va en Linux pero no en Windows
Cierre «Por qué va en Linux pero no en Windows» solo cuando el resultado guardado, exportado o reabierto conserve el estado observado. La respuesta temporal de la interfaz orienta, pero la evidencia duradera es más fuerte. Documente cualquier límite pendiente para quien continúe.
Punto de control 10: Checklist de depuración
Para «Checklist de depuración», separe una decisión del producto de un límite del sistema, hardware, archivo fuente, permiso o proceso. Confirme qué capa produjo la evidencia antes de atribuir una causa. Así evita convertir un síntoma cercano en una causa raíz supuestamente probada.
Matriz de aceptación
| Punto | Evidencia que conservar | Condición de aprobado |
|---|---|---|
| Fallo en la petición de device descriptor USB en Windows: depurando Code 43 con evidencia a nivel de bus | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Cómo investigar el fallo de Device Descriptor Request Failed en Windows USB, Code 43, descriptores malos, timeouts de en | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Qué intenta hacer Windows | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Qué puede significar el fallo | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Secuencia temprana de enumeración | Estado inicial, una acción y estado resultante | Otra persona reproduce el resultado declarado |
| Los primeros 8 bytes importan | 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 -->