Debug USB Device Qualifier e Other Speed Configuration
Come diagnosticare descrittori USB Device Qualifier, Other Speed Configuration, differenze tra high-speed e full-speed ed errori di mismatch nei descrittori.
I dispositivi USB che supportano sia full-speed sia high-speed devono descrivere come si comportano all'altra velocità. Gli utenti cercano "USB Device Qualifier descriptor", "Other Speed Configuration descriptor", "high speed device enumerates as full speed", "USB descriptor mismatch" e "device works on USB 2.0 but fails on hub" quando lo stesso prodotto si comporta in modo diverso a seconda di porta, cavo, hub o controller host.
Bus Scope è utile perché la diagnosi richiede di confrontare richieste di descrittori, velocità effettiva, dimensioni dei pacchetti endpoint, descrittori di configurazione e decisioni dell'host durante l'enumerazione.
Che cos'è il descrittore Device Qualifier
Il descrittore Device Qualifier descrive come un dispositivo capace di high-speed opererebbe all'altra velocità. Se il dispositivo sta funzionando in high-speed, il qualifier informa l'host sul comportamento full-speed. Se sta funzionando in full-speed, può descrivere la capacità high-speed.
Campi importanti includono:
- Versione USB.
- Classe dispositivo.
- Sottoclasse.
- Protocollo.
- Dimensione massima del pacchetto per endpoint zero.
- Numero di configurazioni.
Se questo descrittore è mancante, malformato o incoerente, l'enumerazione può comunque riuscire su un host e fallire su un altro.
Other Speed Configuration
Il descrittore Other Speed Configuration descrive i dettagli della configurazione alla velocità opposta. Dimensioni dei pacchetti endpoint, intervalli di polling e assunzioni di banda possono differire.
Pattern di guasto comuni:
- La configurazione full-speed dichiara dimensioni endpoint sensate solo in high-speed.
- La configurazione high-speed dimentica un'interfaccia.
- Il conteggio del descrittore other-speed non corrisponde alla configurazione reale.
- Il firmware restituisce uno STALL quando l'host si aspetta un descrittore.
- L'host accetta il dispositivo ma collega il driver sbagliato.
- Il dispositivo funziona attraverso un hub e fallisce attraverso un altro.
Questi problemi sono difficili da vedere dai log applicativi.
Dispositivo high-speed enumerato come full-speed
Un caso di supporto frequente è "dispositivo USB high-speed rilevato come full-speed". Può dipendere da qualità del cavo, topologia dell'hub, integrità del segnale, comportamento chirp del firmware, progettazione elettrica o problemi nei descrittori.
Le evidenze a pacchetto aiutano a separare i livelli:
- La negoziazione high-speed è avvenuta?
- L'host ha chiesto il Device Qualifier?
- Il dispositivo ha restituito byte di descrittore validi?
- I descrittori endpoint corrispondevano alla velocità selezionata?
- L'host ha resettato e riprovato?
- Il dispositivo si è poi enumerato di nuovo a una velocità diversa?
Se la traccia mostra che il dispositivo non ha mai raggiunto high-speed, correggere i descrittori potrebbe non bastare. Se la traccia mostra enumerazione high-speed ma descrittori other-speed non validi, il firmware è un sospetto più forte.
Mismatch della dimensione pacchetto endpoint tra velocità
I descrittori endpoint possono differire tra configurazioni full-speed e high-speed. Un endpoint bulk può essere da 64 byte in full-speed e da 512 byte in high-speed.
Sintomi di guasto:
- I trasferimenti falliscono solo su porte high-speed.
- I trasferimenti falliscono solo attraverso un vecchio hub full-speed.
- La dimensione del buffer firmware corrisponde a una velocità ma il descrittore ne dichiara un'altra.
- Il driver host invia trasferimenti più grandi di quelli attesi dal firmware.
- Il dispositivo restituisce short packet su confini inattesi.
Questo si collega direttamente al debug di wMaxPacketSize.
Dispositivi compositi
I dispositivi compositi rendono più fragili i descrittori other-speed. Un dispositivo può esporre HID, CDC, interfacce vendor-specific, mass storage e interfacce di aggiornamento firmware. L'albero other-speed deve restare coerente.
I bug includono:
- Interface Association Descriptor mancante a una velocità.
- Numeri di interfaccia diversi tra velocità.
- Indirizzi endpoint che cambiano in modo inatteso.
- Un'interfaccia ha un descrittore other-speed valido e un'altra no.
- Windows collega un driver diverso dopo la nuova enumerazione.
Per prodotti con firmware personalizzato, questo è un tipico errore di copia e incolla.
STALL può essere valido o sospetto
Alcune richieste di descrittore possono legittimamente andare in STALL per dispositivi che non supportano la capacità richiesta. Ma per dispositivi capaci di high-speed, fallimenti ripetuti intorno a Device Qualifier o Other Speed Configuration meritano attenzione.
Il report dovrebbe conservare:
- Tipo di richiesta.
- Tipo di descrittore.
wValue.wIndex.wLength.- Dati restituiti.
- Stato STALL o timeout.
Bus Scope dovrebbe rendere leggibili questi trasferimenti di controllo invece di costringere gli ingegneri a decodificare manualmente i byte grezzi.
Checklist di debug
Usa questo workflow:
- Acquisisci dal collegamento fisico.
- Registra la velocità effettivamente negoziata.
- Ispeziona il Device Descriptor.
- Ispeziona il descrittore Device Qualifier.
- Ispeziona il descrittore Other Speed Configuration.
- Confronta le dimensioni dei pacchetti endpoint tra velocità.
- Controlla numeri di interfaccia e indirizzi endpoint.
- Prova porta diretta, hub e dock USB-C.
- Confronta il comportamento di enumerazione su Windows e Linux.
- Conserva fallimenti e retry delle richieste di descrittore.
Diagnosi finale
I bug in USB Device Qualifier e Other Speed Configuration sono problemi di coerenza dei descrittori. Spiegano perché un dispositivo può funzionare a una velocità, fallire a un'altra o comportarsi diversamente dietro hub e dock.
Bus Scope aiuta ad acquisire l'evidenza esatta dell'enumerazione: richieste di descrittori, byte other-speed, dimensioni endpoint, STALL, reset e conseguenze sul driver binding.