Driver lato dispositivo USB in Windows

Descrive l'architettura dello stack di funzioni USB.

In un dispositivo USB, lo stack di funzioni USB fa riferimento a un gruppo di driver enumerati dal gestore Plug and Play, quando ACPI crea un oggetto dispositivo fisico (PDO) del dispositivo USB.

In un singolo dispositivo di configurazione, un dispositivo USB può definire una o più interfacce. Ad esempio, media transfer protocol (MTP) per il trasferimento di file da e verso il dispositivo. Un dispositivo USB composito può supportare più interfacce in una singola configurazione. Lo stack di funzioni USB crea PDO per ogni interfaccia e PnP Manager carica il driver di classe che crea l'oggetto dispositivo funzione (FDO) per tale interfaccia.

Lo stack di funzioni USB è concettualizzato in questa immagine:

stack di funzioni usb.

Applicazioni e servizi

Driver della classe di funzioni USB

Un driver della classe di funzione USB implementa la funzionalità di un'interfaccia specifica (o gruppo di interfacce) nel dispositivo USB. MTP e IpOverUsb sono esempi di driver di classe forniti dal sistema. Il driver di classe può essere implementato esclusivamente come driver in modalità kernel oppure può essere un servizio in modalità utente associato al driver di classe fornito dal sistema GenericUSBFn.sys.

Un driver della classe di funzione invia richieste al controller usando il driver della classe di funzione USB alle interfacce di programmazione UFX.

Estensione della classe di funzione USB (UFX)

L'estensione della classe di funzione USB (UFX) è un'estensione fornita dal sistema a Kernel-Mode Driver Framework (KMDF). USB è un bus standard e dispone di alcune funzionalità e funzionalità necessarie. UFX è responsabile dell'implementazione della logica della funzione USB comune a tutti i controller di funzione USB e alla gestione e/o all'invio di richieste da driver di classe di funzione USB. In particolare, UFX gestisce il processo di enumerazione del dispositivo ed elaborazione dei trasferimenti di controllo standard. Per eseguire alcune di queste operazioni, UFX deve conoscere le funzionalità del bus. Queste funzionalità vengono segnalate a UFX quando viene stabilita l'interfaccia di estensione della classe.

UFX espone IOCTL standard che i livelli superiori (driver di classe di funzione USB e servizi in modalità utente) possono usare per inviare richieste al controller. Inoltre, UFX invia una notifica ai livelli superiori sulle richieste standard ricevute dall'host.

Driver client di funzioni USB

UFX fornisce un'interfaccia astratta che funziona in modo coerente tra controller diversi. Tuttavia, i controller hanno funzionalità diverse, con limitazioni come il numero di endpoint, i tipi di endpoint, la bassa potenza, la riattivazione remota. Ad esempio, alcuni controller supportano DMA, mentre altri non lo supportano. Alcuni controller implementano flussi nell'hardware, mentre altri controller prevedono che il driver gestisca i flussi. Per questi motivi, solo le funzionalità comuni vengono gestite in UFX. Trasferimenti, risparmio energia, supporto del flusso e altre funzionalità che variano da controller a controller vengono gestiti dal driver client.

Il driver client di funzione USB è responsabile dell'implementazione di operazioni specifiche del controller. Questi includono l'implementazione dei trasferimenti di dati degli endpoint, modifiche dello stato del dispositivo USB (reimpostazione, sospensione, ripresa), rilevamento di collegamento/scollegamento, rilevamento porta/caricatore. Il driver client è anche responsabile della gestione dell'alimentazione e degli eventi PnP.

Il driver del client di funzione viene scritto come driver KmDF (Kernel-Mode Driver Framework ) usando il driver della classe di funzione USB per le interfacce di programmazione UFX.

Microsoft fornisce driver client di funzioni in-box (UfxChipidea.sys, Ufxsynopsys.sys) per i controller ChipIdea e Synopsys.

Driver filtro inferiore USB

Un driver di filtro inferiore USB supporta il rilevamento dei caricatori se il controller di funzione usa i driver Synopsys e ChipIdea in-box. Il driver di filtro gestisce la ricarica USB a partire dal rilevamento delle porte USB. t deve pubblicare un GUID per ogni tipo di caricatore supportato e un elenco delle proprietà del caricatore. Se un caricatore specifico è configurabile, il driver di filtro USB inferiore definisce un elenco di propertyID supportati e i relativi tipi di valore che possono essere inviati, per configurare il caricatore. Il driver notifica anche allo stack di batteria quando può iniziare a ricaricare e la quantità massima di corrente che il dispositivo può disegnare. Per i driver client diversi da Synopsys e ChipIdea, la logica di ricarica può essere implementata nel driver client.

Un driver della classe di funzione invia una richiesta a UFX usando interfacce di programmazione per supportare i caricatori proprietari.