Débogage bInterval d'endpoint interrupt USB

Comment déboguer bInterval d'endpoint interrupt USB, taux de polling, latence HID, rapports d'entrée manqués, règles d'intervalle full-speed vs high-speed et erreurs de descripteur d'endpoint.

usb binterval, endpoint interrupt, latence hid, taux polling, rapport entrée, descripteur endpoint, diagnostic usb

Les endpoints interrupt USB sont utilisés par les claviers, souris, manettes, capteurs, panneaux tactiles, scanners de codes-barres, onduleurs et beaucoup d'outils HID personnalisés. Les utilisateurs cherchent « USB bInterval », « HID polling rate », « USB interrupt endpoint latency », « missed input reports », « USB device 125Hz 250Hz 1000Hz » ou « bInterval full speed high speed » quand l'entrée semble retardée ou que les rapports arrivent au mauvais rythme.

Bus Scope est utile car le comportement de polling est défini par les descripteurs d'endpoint et le timing réel du bus. L'UI de l'OS ne montre souvent que « device connected » ; la capture peut montrer l'intervalle que l'hôte utilise réellement.

Ce que signifie bInterval

Un descripteur d'endpoint interrupt inclut bInterval. Cette valeur décrit l'intervalle de polling, mais l'interprétation dépend de la vitesse et du type d'endpoint.

Distinctions importantes :

  • Les endpoints interrupt low-speed et full-speed utilisent des intervalles basés sur les frames en millisecondes.
  • Les endpoints interrupt high-speed utilisent un encodage différent basé sur les microframes.
  • L'ordonnancement du contrôleur hôte et la topologie du hub peuvent affecter le timing observé.
  • Le timing de lecture applicative n'est pas le même que le polling du bus USB.

Si un ingénieur ne regarde que les callbacks applicatifs, il peut manquer le calendrier réel de l'endpoint.

Symptômes courants

Les problèmes d'intervalle de polling se manifestent par :

  • Souris ou manette qui semble molle.
  • Rapports d'entrée HID qui arrivent toutes les 8 ms au lieu de 1 ms.
  • Périphérique annoncé à 1000 Hz mais qui se comporte comme du 125 Hz.
  • Données de capteur en bursts.
  • Scanner de codes-barres qui perd les scans rapides.
  • Panneau tactile qui semble retardé après resume.
  • Firmware qui envoie des rapports plus vite que l'hôte ne poll.
  • Mode high-speed qui change le timing des rapports de façon inattendue.

Ces problèmes ressemblent souvent à des soucis de latence ou de réactivité, mais la preuve racine est dans le descripteur USB et le timing des paquets.

Interprétation full-speed vs high-speed

Le même bInterval numérique peut signifier un timing effectif différent selon la vitesse. Un endpoint HID full-speed avec bInterval=8 n'est pas le même modèle d'ordonnancement qu'un endpoint high-speed avec la même valeur en octets.

Le débogage doit capturer :

  • Vitesse réellement négociée.
  • Descripteur d'endpoint.
  • Adresse de l'endpoint.
  • Type de transfert.
  • bInterval.
  • Cadence des tokens IN ou des transferts observés.
  • Timing des payloads de rapport.

Bus Scope doit montrer ensemble les valeurs du descripteur et le timing observé.

Surproduction firmware

Certains firmwares génèrent des rapports d'entrée plus vite que l'hôte ne poll. Ces rapports peuvent être écrasés, fusionnés ou perdus avant que l'hôte ne les voie jamais.

Symptômes :

  • Les logs internes du périphérique montrent des événements.
  • L'hôte reçoit moins de rapports.
  • Les appuis rapides sur les boutons sont manqués.
  • Le mouvement semble lissé ou retardé.
  • Les rapports après un burst ne contiennent que le dernier état.

Ce n'est pas un problème de perte de paquets USB. C'est un problème de contrat de buffering firmware et de polling.

Le polling hôte n'est pas le taux de lecture applicatif

Une application peut lire toutes les 1 ms, mais l'hôte USB peut ne poller que toutes les 8 ms. Ou l'hôte peut poller à l'heure, mais la boucle d'événements applicative peut traiter les données plus tard.

La capture de paquets sépare :

  • Intervalle de polling du bus.
  • Timing de réponse du périphérique.
  • Buffering du pilote hôte.
  • Latence du callback applicatif.

Cette séparation est critique pour les cas de support de latence HID.

Erreurs de descripteur bInterval

Bugs de descripteurs fréquents :

  • Annoncer accidentellement bInterval=10 au lieu de 1.
  • Copier l'intervalle full-speed dans le descripteur high-speed incorrectement.
  • Utiliser un intervalle dans les attentes du descripteur HID et un autre dans le descripteur d'endpoint.
  • Les commentaires firmware annoncent 1000 Hz mais le descripteur dit plus lent.
  • L'alternate setting change l'intervalle mais le firmware ne le gère pas.

L'octet dans le descripteur est le contrat sur lequel l'hôte ordonnance.

Checklist de débogage

Suivez ce flux :

  1. Capturez l'énumération.
  2. Identifiez les descripteurs d'endpoints interrupt.
  3. Enregistrez la vitesse réelle du périphérique.
  4. Décodez bInterval.
  5. Mesurez la cadence IN d'interrupt observée.
  6. Comparez avec le taux de polling attendu.
  7. Déclenchez des événements d'entrée rapides.
  8. Vérifiez si des rapports sont manqués ou fusionnés.
  9. Comparez port direct vs hub.
  10. Conservez ensemble descripteur et preuves de timing.

Diagnostic final

La latence d'interrupt USB n'est pas qu'un problème de performance applicative. Elle dépend du bInterval d'endpoint, du mode de vitesse, de l'ordonnancement hôte, de la génération de rapports et du buffering firmware.

Bus Scope aide à prouver si un périphérique HID ou interrupt est vraiment pollé au rythme voulu et si l'entrée manquée vient des réglages de descripteur, du buffering firmware ou du timing hôte/application.

<!-- bus-scope-localized-transaction-foundation-v1:start -->

Test du contrat USB pour « Débogage bInterval d'endpoint interrupt USB »

La réponse directe est qu’un STALL, timeout ou reset n’explique pas seul la cause. Prouvez d’abord que le fournisseur voit le bon périphérique, puis lisez le contrat du transfer : type, direction, recipient, wValue, wIndex, longueur annoncée et réelle, status et état avant/après. Pour « Débogage bInterval d'endpoint interrupt USB », reliez la conclusion à la première transaction différente d’un cas nominal.

Limite Comparaison Décision
Plateforme fournisseur, droits, Root Hub ou usbmon/XHC20 Les records viennent-ils de la bonne connexion ?
Setup bmRequestType, bRequest, wValue, wIndex, wLength L’hôte envoie-t-il la requête prévue ?
Data direction, longueur et bytes conservés Le payload respecte-t-il le contrat ?
Status ACK, STALL, timeout ou cancellation Où finit réellement la transaction ?
État configuration, interface, alternate setting, endpoint halt Le périphérique était-il prêt ?

Commencez avant reset et énumération et gardez descriptors, SET_CONFIGURATION, SET_INTERFACE et la commande avant défaut. Un filtre endpoint étroit peut masquer le control transfer décisif. Exécutez une seule action USB documentée par essai et ne changez que firmware, driver, port, câble, commande ou timing.

Comment rédiger une réponse réutilisable ?

Nommez requête, champs setup, réponse et contexte précédent, puis un test à variable unique. Des bytes non retenus ne prouvent pas packet loss. La proximité entre command et reset établit une corrélation, pas la cause sans répétition ou transition d’état.

Quand la comparaison est-elle valide ?

Gardez VID/PID, firmware, speed, topologie, fournisseur, filtre et trigger. Comparez les phases USB sémantiques, pas les frame numbers entre usbmon et USBPcap. Notez début, fin, version, OS, connexion et checksum. Consultez le dépannage Bus Scope.

Les propriétaires Semrush restent distincts : free USB analyzer sur la page produit, best USB protocol analyzer dans la comparaison et USB descriptor viewer dans le guide descriptor. Aucun volume ou KD n’est inventé pour cette page de support.

<!-- bus-scope-localized-transaction-foundation-v1:end --><!-- multilingual-blog-closeout:start -->

Réponse directe et limite d’acceptation

La réponse courte à « Débogage bInterval d'endpoint interrupt USB » est la suivante : Comment déboguer bInterval d'endpoint interrupt USB, taux de polling, latence HID, rapports d'entrée manqués, règles d'intervalle full-speed vs high-speed et erreurs de descripteur d'endpoint. Considérez cette phrase comme un résultat à vérifier, et non comme une promesse valable pour toute entrée, tout appareil, tout projet ou tout environnement. Un résultat complet consigne l’état initial, l’action exacte, la sortie visible et la condition qui prouve la fin de la tâche dans Bus Scope.

Procédure fondée sur les preuves

Commencez par un cas petit et répétable avant de modifier un projet complet. Notez version de l’application, système, identité de l’entrée ou de l’appareil, réglages pertinents et résultat attendu. Exécutez une action volontaire, conservez la première transition inattendue et comparez-la à un cas nominal si possible. Plusieurs changements simultanés masquent la condition qui a créé ou corrigé le problème.

Point de contrôle 1 : Débogage bInterval d'endpoint interrupt USB

Transformez « Débogage bInterval d'endpoint interrupt USB » en critère réussite/échec reproductible. Indiquez ce qui doit être présent, absent et quelle reprise reste sûre. Conservez le projet ou la capture d’origine jusqu’à ce que la copie corrigée réussisse le même contrôle.

Point de contrôle 2 : Comment déboguer bInterval d'endpoint interrupt USB, taux de polling, latence HID, rapport

Traitez « Comment déboguer bInterval d'endpoint interrupt USB, taux de polling, latence HID, rapports d'entrée manqués, règles d'intervalle full-speed vs high-s » comme une porte d’acceptation distincte pour « Débogage bInterval d'endpoint interrupt USB ». Consignez l’état avant l’action, le premier changement visible et l’état final. Si le résultat diffère de l’objectif décrit, revenez au dernier point confirmé au lieu de poursuivre sur des hypothèses.

Point de contrôle 3 : Ce que signifie bInterval

Transformez « Ce que signifie bInterval » en critère réussite/échec reproductible. Indiquez ce qui doit être présent, absent et quelle reprise reste sûre. Conservez le projet ou la capture d’origine jusqu’à ce que la copie corrigée réussisse le même contrôle.

Point de contrôle 4 : Symptômes courants

Traitez « Symptômes courants » comme une porte d’acceptation distincte pour « Débogage bInterval d'endpoint interrupt USB ». Consignez l’état avant l’action, le premier changement visible et l’état final. Si le résultat diffère de l’objectif décrit, revenez au dernier point confirmé au lieu de poursuivre sur des hypothèses.

Point de contrôle 5 : Interprétation full-speed vs high-speed

Transformez « Interprétation full-speed vs high-speed » en critère réussite/échec reproductible. Indiquez ce qui doit être présent, absent et quelle reprise reste sûre. Conservez le projet ou la capture d’origine jusqu’à ce que la copie corrigée réussisse le même contrôle.

Point de contrôle 6 : Surproduction firmware

Traitez « Surproduction firmware » comme une porte d’acceptation distincte pour « Débogage bInterval d'endpoint interrupt USB ». Consignez l’état avant l’action, le premier changement visible et l’état final. Si le résultat diffère de l’objectif décrit, revenez au dernier point confirmé au lieu de poursuivre sur des hypothèses.

Point de contrôle 7 : Le polling hôte n'est pas le taux de lecture applicatif

Transformez « Le polling hôte n'est pas le taux de lecture applicatif » en critère réussite/échec reproductible. Indiquez ce qui doit être présent, absent et quelle reprise reste sûre. Conservez le projet ou la capture d’origine jusqu’à ce que la copie corrigée réussisse le même contrôle.

Point de contrôle 8 : Erreurs de descripteur bInterval

Traitez « Erreurs de descripteur bInterval » comme une porte d’acceptation distincte pour « Débogage bInterval d'endpoint interrupt USB ». Consignez l’état avant l’action, le premier changement visible et l’état final. Si le résultat diffère de l’objectif décrit, revenez au dernier point confirmé au lieu de poursuivre sur des hypothèses.

Point de contrôle 9 : Checklist de débogage

Transformez « Checklist de débogage » en critère réussite/échec reproductible. Indiquez ce qui doit être présent, absent et quelle reprise reste sûre. Conservez le projet ou la capture d’origine jusqu’à ce que la copie corrigée réussisse le même contrôle.

Point de contrôle 10 : Diagnostic final

Traitez « Diagnostic final » comme une porte d’acceptation distincte pour « Débogage bInterval d'endpoint interrupt USB ». Consignez l’état avant l’action, le premier changement visible et l’état final. Si le résultat diffère de l’objectif décrit, revenez au dernier point confirmé au lieu de poursuivre sur des hypothèses.

Matrice d’acceptation

Point Preuve à conserver Critère de réussite
Débogage bInterval d'endpoint interrupt USB État initial, une action et état obtenu Une seconde personne reproduit le résultat
Comment déboguer bInterval d'endpoint interrupt USB, taux de polling, latence HID, rapports d'entrée manqués, règles d'i État initial, une action et état obtenu Une seconde personne reproduit le résultat
Ce que signifie bInterval État initial, une action et état obtenu Une seconde personne reproduit le résultat
Symptômes courants État initial, une action et état obtenu Une seconde personne reproduit le résultat
Interprétation full-speed vs high-speed État initial, une action et état obtenu Une seconde personne reproduit le résultat
Surproduction firmware État initial, une action et état obtenu Une seconde personne reproduit le résultat

Isolation, reprise et transmission

Arrêtez-vous à la première limite en échec. Conservez source, projet, session ou capture, dupliquez avant toute modification destructive et changez une variable par essai. Rejouer un flux entier après plusieurs changements peut modifier le résultat sans expliquer pourquoi.

Distinguez absence de preuve et preuve d’absence. Une vue vide peut signaler mauvaise entrée, portée, filtre, permission, appareil, période ou état du projet. Vérifiez acquisition ou import avant d’interpréter décodeur, éditeur, rapport ou export.

Avant transmission, rouvrez l’artefact durable et inspectez début, point de décision et fin. Notez version, plateforme, configuration, attente, observation et reproduction minimale. Retirez ou masquez les données sensibles et confirmez l’autorisation du destinataire.

Questions et réponses

Quelle est la manière fiable la plus rapide de commencer ?

Utilisez le plus petit cas représentatif, écrivez le résultat attendu et ne changez qu’une variable. Validez le parcours de base avant d’ajouter filtres, effets, modifications, automatisation ou grande source.

Quelles preuves faut-il conserver ?

Gardez identité de l’entrée, version, plateforme, réglages, action exacte, première transition inattendue et sortie finale. Fermez puis rouvrez projet, session, rapport ou export avant de le considérer durable.

Quand faut-il répéter la procédure ?

Répétez-la après un changement pertinent d’application, système, pilote, firmware, modèle, source ou processus. Conservez le cas accepté précédent comme référence non modifiée.

Quand le résultat est-il transmissible ?

Lorsqu’une seconde personne autorisée identifie l’entrée, répète l’action, obtient le même résultat, comprend les limites et ouvre l’artefact sans état local non documenté.

Guides associés

Ces pages dans la même langue couvrent les étapes voisines sans changer le propriétaire canonique du sujet :

<!-- multilingual-blog-closeout:end -->