Condividi tramite


Sospensione selettiva nei driver USB (WDF)

Un driver di funzione USB supporta il rilevamento inattiva del runtime implementando la sospensione selettiva USB. Ecco il contenuto per gli sviluppatori di driver su come implementare la sospensione selettiva nei driver USB basati su Windows® Driver Foundation (WDF).

Informazioni sulla sospensione selettiva

La sospensione selettiva è la possibilità di spegnere e riprendere in seguito un dispositivo USB inattivo mentre il computer a cui è collegato rimane nello stato di lavoro (S0). Per un'operazione efficiente per l'energia, soprattutto nei PC mobili, tutti i dispositivi USB e i driver devono supportare la sospensione selettiva. L'alimentazione di un dispositivo quando è inattiva, ma mentre il sistema rimane nello stato S0, presenta i vantaggi significativi seguenti:

  • La sospensione selettiva salva l'alimentazione.
  • La sospensione selettiva può aiutare a ridurre i fattori ambientali, ad esempio il carico termica e il rumore.

Se l'hardware del dispositivo può essere disattivato mentre è inattivo, il driver deve supportare questa funzionalità. Il supporto di sospensione selettiva in un driver USB basato su Windows® Driver Foundation (WDF) richiede al massimo alcuni callback aggiuntivi oltre a quelli necessari per il supporto di base Plug and Play.

Ogni driver di funzione per un dispositivo USB deve implementare una risparmio energia aggressiva che sospende un dispositivo inattiva mentre il sistema è in esecuzione. Questo argomento descrive come implementare la sospensione selettiva in un driver basato su WDF. Se non si ha familiarità con WDF, vedere Windows Driver Kit (WDK) e Sviluppo driver con Windows Driver Foundation.

I dispositivi USB supportano il rilevamento inattiva del runtime tramite la sospensione selettiva USB. La sospensione selettiva consente di inserire un dispositivo inattiva in uno stato sospeso senza influire su altri dispositivi connessi allo stesso hub o, nel caso di un dispositivo multifunzione, senza influire sulle altre funzioni del dispositivo. Quando tutti i dispositivi o le funzioni sono stati sospesi, è possibile ridurre l'intero hub o il dispositivo a più funzioni.

Dal punto di vista hardware, la sospensione selettiva è uno stato fisico su una porta USB. Quando tutte le funzioni collegate alla porta sono inattive, la porta può immettere la sospensione selettiva.

Per soddisfare la specifica USB, tutti i dispositivi USB devono supportare la sospensione selettiva. Quando il bus USB è inattivo, il dispositivo deve essere in grado di spegnere. I driver dell'hub USB forniti da Microsoft implementano la sospensione selettiva a livello di hardware.

I driver di funzione USB devono implementare la sospensione selettiva per le singole funzioni del dispositivo tramite WDF, che comunica con i driver del bus e gestisce le richieste di controllo I/O del dispositivo che sospendono e riprendono le funzioni del dispositivo. WDF consente sia i driver in modalità kernel che in modalità utente di supportare la sospensione selettiva.

I dettagli del codice di sospensione selettiva USB di un driver di funzione dipendono dal fatto che il driver venga eseguito in modalità utente o in modalità kernel. Prendere in considerazione queste linee guida:

  • Usare il framework driver in modalità utente (UMDF) per implementare i driver USB ogni volta che è possibile. I driver in modalità utente sono meno probabilità di danneggiare i dati del sistema e sono più semplici da eseguire nel debug rispetto ai driver in modalità kernel.
  • Usare il framework driver in modalità kernel (KMDF) solo se i dati del driver vengono inviati tramite endpoint isochronous o richiedono altre funzionalità o risorse disponibili solo in modalità kernel.

Proprietà dei criteri di alimentazione, code di I/O e sospensione selettiva

Il proprietario di power policy (PPO) per uno stack di dispositivi è il driver che determina lo stato di alimentazione in cui deve trovarsi il dispositivo in qualsiasi momento. Un solo driver in ogni stack di dispositivi può essere il PPO. Il driver di funzione è in genere il PPO per il dispositivo.

Se il driver USB supporta la sospensione selettiva e viene sottoposto a livelli sopra l'PPO nello stack di dispositivi, il driver non deve usare code gestite da energia. Questo vale sia per i driver UMDF che per i driver KMDF. Se le richieste arrivano per le code gestite dall'alimentazione mentre il dispositivo è sospeso, l'intero stack di dispositivi può essere bloccato.

La figura 1 mostra il flusso di richieste di I/O a un driver USB tramite le code di I/O.

Diagramma di flusso delle richieste a un driver USB WDF.

Nella figura una richiesta arriva per un driver USB. Il framework aggiunge la richiesta alla coda appropriata.

Se la coda non è gestita, il framework presenta la richiesta al driver in base al tipo di invio configurato per la coda (sequenziale, parallela o manuale). Il driver gestisce quindi la richiesta.

Se la coda è gestita e il dispositivo non è sospeso, il framework presenta la richiesta al driver in base al tipo di invio configurato.

Tuttavia, se il dispositivo viene sospeso, le azioni del framework dipendono dal fatto che il driver sia l'PPO per lo stack di dispositivi. Se il driver è PPO, il framework comunica con i driver padre USB per attivare il dispositivo. Dopo aver ripreso il dispositivo, il framework presenta la richiesta al driver.

Se il driver non è PPO, il framework non esegue altre azioni perché solo il PPO può riprendere il dispositivo. La richiesta rimane nella coda. Lo stack di dispositivi si blocca se il PPO non riceve richieste che lo causano per riprendere il dispositivo.

Contenuto della sezione

Argomento Descrizione
Sospensione selettiva nei driver UMDF Questo argomento descrive come i driver di funzione UMDF supportano la sospensione selettiva USB.
Sospensione selettiva nei driver di funzione USB KMDF Questo argomento descrive come i driver di funzione KMDF supportano la sospensione selettiva USB.