Retraso de entrada USB HID e informes perdidos: depuración de teclados, gamepads, escáneres y dispositivos HID personalizados
Cómo diagnosticar el retraso de entrada de USB HID, informes perdidos, teclas repetidas, retraso del gamepad, caídas del escáner de códigos de barras, interrupción de la sincronización del punto final, intervalo de sondeo e informes de problemas de descriptores.
Los problemas de USB HID a menudo se describen en el lenguaje del usuario: "retraso del teclado, teclas perdidas, entrada doble, caída del escáner de código de barras, retraso del gamepad, pedal que no responde o un dispositivo HID personalizado envía informes pero la aplicación nunca los recibe. Términos de búsqueda como "retraso de entrada de USB HID", "informes de HID perdidos", "retraso del punto final de interrupción de HID", "teclas USB repetidas en el teclado" y "captura de USB de latencia del gamepad" apuntan a la misma necesidad de ingeniería: inspeccionar el flujo de informes de HID, no solo el evento de la aplicación."
Los dispositivos HID suelen utilizar puntos finales de interrupción. Eso no significa una interrupción del hardware en el sentido del escritorio; significa que el host sondea el punto final en un intervalo definido. Si los informes tienen formato incorrecto, se retrasan, son demasiado frecuentes, demasiado extensos o no se describen correctamente, es posible que la aplicación experimente retrasos o falte información.
Bus Scope ayuda porque el diagnóstico de HID necesita evidencia de descriptor, punto final, sondeo e informe juntos.
El descriptor del informe HID importa
El descriptor del informe HID define lo que significan los informes. Describe usos, tamaños de informes, recuentos de informes, rangos lógicos, ID de informes e informes de entrada/salida/características.
Si el descriptor no coincide con los bytes reales enviados por el dispositivo, los síntomas pueden ser extraños:
- La aplicación no ve ninguna entrada.
- Algunos botones funcionan pero otros no.
- Los ejes saltan o se saturan.
- Las teclas del teclado se repiten.
- Se espera el ID del informe, pero no se envía.
- La longitud del informe difiere del descriptor.
- El anfitrión rechaza o ignora los informes.
Es posible que el dispositivo esté enviando bytes, pero el host los interpreta incorrectamente.
Interrumpir el intervalo de sondeo del punto final
Los puntos finales IN de interrupción HID incluyen un intervalo de sondeo. Un dispositivo de baja velocidad o de alta velocidad puede ser sondeado de manera diferente que un dispositivo de alta velocidad. Si el intervalo de sondeo es demasiado lento para el uso previsto, el retraso de entrada está integrado en la configuración del dispositivo.
Para un gamepad o dispositivo de control en tiempo real, el intervalo de informes es importante. Para un escáner de código de barras, los informes ocasionales pueden estar bien, pero el encuadre del informe debe ser confiable.
Inspeccionar los descriptores de puntos finales:
- Dirección de punto final
- Tipo de transferencia de interrupción
- Tamaño máximo de paquete
- Intervalo de sondeo
- Velocidad del dispositivo
No adivine la latencia únicamente a partir de la interfaz de usuario de la aplicación.
Informes perdidos frente a eventos de aplicaciones perdidos
Un informe puede faltar en varias capas:
- El firmware del dispositivo nunca lo envió.
- La transferencia USB falló.
- El anfitrión encuestó demasiado lento.
- El informe fue enviado pero con formato incorrecto.
- El conductor lo interpretó de otra manera.
- La aplicación lo filtró.
- El enrutamiento de entrada de enfoque o del sistema operativo canceló el evento.
La evidencia a nivel de autobús responde a las primeras cuatro. Si los informes están presentes y son válidos en el autobús, avance hasta el manejo del conductor y de la solicitud. Si faltan informes en el bus, depure el firmware, la sincronización del terminal o el estado de energía.
Teclas repetidas y botones atascados
Las claves repetidas pueden ocurrir cuando se envía el informe de "clave inactiva", pero el informe de "clave inactiva" falta o está mal formado. Un botón del gamepad puede aparecer atascado por el mismo motivo.
Captura alrededor del evento:
Report: key A down
Report: no keys down
If the release report never appears, the device or USB path is suspect. If it appears on the bus but the application still thinks the key is down, inspect driver/application mapping.
Barcode scanner drops
Many barcode scanners emulate keyboards. A scan may produce a fast sequence of HID reports. If the reports are too fast for the application, the problem may not be USB. But if the trace shows missing key reports, wrong report IDs, or endpoint errors, the scanner or hub path may be responsible.
Useful evidence:
- Full scan report sequence.
- Report interval.
- Missing release reports.
- Endpoint errors.
- Device reconnect or suspend during scan.
Debug checklist
Use this workflow:
- Capture enumeration from plug-in.
- Save the HID report descriptor.
- Identify interrupt IN endpoint and polling interval.
- Capture a known input sequence.
- Compare actual report length with descriptor.
- Check report IDs.
- Look for missing down/up pairs.
- Check whether endpoint errors occur.
- Compare direct port vs hub.
- Compare bus evidence with application logs.
Final diagnosis
USB HID input lag and missed reports need evidence from the HID descriptor, interrupt endpoint, polling interval, and actual report bytes. A UI symptom does not prove whether the device, bus, driver, or app is responsible.
Bus Scope helps make the HID report sequence visible so keyboard, gamepad, scanner, and custom HID issues can be debugged from USB facts.
Respuesta directa: ¿por dónde se empieza a diagnosticar la latencia USB HID?
Elija una acción reproducible: pulsar y soltar una tecla, mover un eje hasta una posición conocida o leer un único código de barras. Registre el instante de la acción, el primer informe HID correspondiente en el bus y la recepción por la aplicación. Si el retraso aparece antes del informe, revise el muestreo y el firmware. Si el informe llega correcto y a tiempo pero la aplicación reacciona tarde, continúe por el controlador, la cola de entrada, el foco y el procesamiento de la aplicación.
Una conclusión verificable incluye punto de captura, velocidad del dispositivo, dirección del
endpoint, bInterval, tamaño máximo de paquete, Report ID y longitud real. “El teclado USB tiene
lag” describe un síntoma; esos datos delimitan lo que realmente se observó.
Construya una ventana de evidencia alrededor de una entrada
Capture la enumeración y los descriptores y conserve una ventana breve desde antes de la entrada hasta la respuesta o el primer fallo. Para una tecla hacen falta pulsación y liberación. Para un eje, una serie de valores. Para un escáner, todos los caracteres y el terminador.
| Capa | Evidencia que debe conservar | Pregunta que responde |
|---|---|---|
| Descriptor HID | Usages, tamaños, counts, IDs y rangos | ¿Qué formato espera el host? |
| Endpoint | Dirección, tipo, tamaño, bInterval, velocidad |
¿Qué oportunidad de sondeo se declaró? |
| Informes USB | Tiempo, estado, longitud y campos decodificados | ¿Qué llegó al punto de captura? |
| Controlador/sistema | Estado y hora del evento | ¿Qué ocurrió por encima de USB? |
| Aplicación | Recepción, foco y filtrado | ¿Cómo trató el programa el evento? |
Que no aparezca un informe en una captura del host no demuestra que el dispositivo no transmitiera en el cable. Compruebe bus o root hub, inicio de la captura, permisos y posibles pérdidas del capturador. La guía de captura por plataforma permite documentar procedencia y límites.
Mida la latencia en lugar de estimarla
Defina inicio y final. El inicio observable puede ser el fin de la transferencia Interrupt-IN que contiene el cambio; el final puede ser la marca de recepción de la aplicación. Para incluir el contacto físico hace falta una referencia externa o telemetría del firmware: una captura USB no conoce ese instante.
Repita el ensayo bajo las mismas condiciones y conserve mínimo, mediana, máximo y valores atípicos. La media puede ocultar una pausa rara que explique la queja. Mantenga fijos puerto, hub, estado de energía, firmware, frecuencia de informes, carga del sistema y versión de la aplicación.
| Pregunta | Comparación útil | Interpretación prudente |
|---|---|---|
¿Limita bInterval la respuesta? |
Valor anunciado frente a sondeo observado | No representa toda la latencia de la aplicación |
| ¿Cambia el hub el resultado? | Puerto directo frente a hub con variables fijas | Delimita una ruta, no prueba por sí solo un hub defectuoso |
| ¿Aparece tras reanudar? | Ejecución estable frente a Suspend/Resume | Relacione solo eventos de energía observados |
| ¿Pierde entrada la aplicación? | Informe válido sin evento de aplicación | Revise controlador y programa |
Valide Report ID, longitud, pulsación y liberación
Si el descriptor declara varios Report IDs, cada informe debe incluir el identificador esperado y la longitud correspondiente. Un byte de ID ausente o duplicado desplaza todos los campos aunque los bytes parezcan plausibles. Compare cada informe decodificado con el descriptor y no suponga una longitud única.
Pruebe una tecla, dos simultáneas, cada botón crítico, centro y extremos de eje y regreso a neutro. Debe verse claramente el informe de liberación o neutralidad. Si el firmware solo informa cambios, cada transición importante debe generar un informe y una pérdida no puede dejar al host atrapado sin recuperación.
Separe USB de la carga de la aplicación
Informes USB completos pueden llegar tarde a la interfaz por un hilo bloqueado, filtro de rebote, lectura limitada, pérdida de foco o mapeo incorrecto de usages. Compare un receptor sencillo o log del controlador con la aplicación afectada usando exactamente la misma entrada. Si la capa inferior recibe todo, no cambie el descriptor al azar.
Si faltan pulsación, liberación o neutro en la ventana del bus, guarde estado de transferencia,
errores del endpoint, Suspend/Resume y reset. Consulte el análisis de endpoint Interrupt y
bInterval para relacionar
velocidad y planificación.
¿Cómo se acepta la corrección?
Repita una secuencia conocida con carga normal y alta en el puerto afectado. Conserve captura fallida y corregida, indicando la única variable cambiada o todas las diferencias. El éxito exige IDs y longitudes válidos, pares completos de pulsación/liberación, latencia dentro del objetivo y el mismo número de eventos en la aplicación.
| Caso | Condición de aprobación |
|---|---|
| Teclado o pedal | Sin pulsaciones/liberaciones perdidas ni repeticiones inexplicadas |
| Mando | Ejes estables, botones completos, sin pausas periódicas largas |
| Escáner | Todos los caracteres en orden con un único terminador |
| HID personalizado | ID, longitud y valores coinciden con el descriptor |
| Suspend/Resume | La entrada vuelve sin reconexión oculta |
Repita después de reiniciar dispositivo y host y ejecute varios ciclos. Anote firmware, sistema, controlador, puerto o hub y herramienta. La guía de solución de problemas de Bus Scope mantiene ambas ejecuciones en una sesión revisable.
Preguntas frecuentes sobre retraso HID
¿Un bInterval pequeño garantiza baja latencia?
No. Participa en la planificación del endpoint según la velocidad USB, pero se suman muestreo del firmware, colas del host, controlador y aplicación. Mida la cadena observable y nombre lo que no ve la captura.
¿Informes completos en Bus Scope descartan totalmente el dispositivo?
Demuestran presencia y validez en ese punto y ventana. No prueban todos los estados internos o ciclos de energía, pero justifican avanzar hacia controlador o aplicación cuando la evidencia USB es completa.
¿Basta con aumentar la frecuencia de informes?
No sin evidencia. Frecuencia, velocidad, endpoint, tamaño y capacidad del host deben ser compatibles. Enviar más no corrige una estructura errónea ni una liberación ausente y puede añadir carga.
¿Qué se entrega al equipo de firmware?
Incluya pasos, descriptores, secuencia decodificada, tiempos de sondeo, primer informe ausente o incorrecto, estado del endpoint y comparación acotada entre fallo y éxito. No envíe una captura enorme sin marcar ni afirme un estado interno invisible en el bus.
Así, “USB HID tiene retraso” se convierte en una cadena comprobable: declaración del dispositivo, sondeo del host, informes recibidos, interpretación del controlador y evento de la aplicación. Consulte la página de Bus Scope para el flujo de evidencia o la página de descarga para probar una captura corta y saneada.
<!-- bus-scope-localized-transaction-foundation-v1:start -->Prueba del contrato USB para «Retraso de entrada USB HID e informes perdidos: depuración de teclados, gamepads, escáneres y dispositivos HID personalizados»
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 «Retraso de entrada USB HID e informes perdidos: depuración de teclados, gamepads, escáneres y dispositivos HID personalizados», 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 -->