Compartilhar via


Drivers USB do lado do dispositivo no Windows

Descreve a arquitetura da pilha de funções USB.

Em um dispositivo USB, a pilha de funções USB refere-se a um grupo de drivers que são enumerados pelo Plug and Play Manager, quando o ACPI cria um PDO (objeto de dispositivo físico) do dispositivo USB.

Em um único dispositivo de configuração, um dispositivo USB pode definir uma ou mais interfaces. Por exemplo, o PROTOCOLO MTP (Media Transfer Protocol) para transferir arquivos de e para o dispositivo. Um dispositivo USB composto pode dar suporte a várias interfaces em uma única configuração. A pilha de funções USB cria PDOs para cada interface, e o Gerenciador de PnP carrega o driver de classe que cria o objeto de dispositivo de função (FDO) para essa interface.

A pilha de funções USB é conceitualizada nesta imagem:

pilha de funções usb.

Aplicativos e serviços

Driver de classe de função USB

Um driver de classe de função USB implementa a funcionalidade de uma interface específica (ou grupo de interfaces) no dispositivo USB. MTP e IpOverUsb são exemplos de drivers de classe fornecidos pelo sistema. O driver de classe pode ser implementado puramente como um driver em modo kernel ou pode ser um serviço em modo usuário emparelhado com o driver de classe fornecido pelo sistema GenericUSBFn.sys.

Um driver de classe de função envia solicitações para o controlador usando o driver de classe de função USB para interfaces de programação UFX.

Extensão da classe de função USB (UFX)

A extensão de classe de função USB (UFX) é uma extensão fornecida pelo sistema para o Kernel-Mode Driver Framework (KMDF). O USB é um barramento padrão e tem algumas funcionalidades e capacidades necessárias. A UFX é responsável por implementar a lógica de função USB que é comum a todos os controladores de função USB e por processar e/ou encaminhar solicitações de drivers de classe da função USB. Em particular, a UFX manipula o processo de enumeração do dispositivo e do processamento de transferências de controle padrão. Para executar algumas dessas operações, a UFX precisa saber sobre os recursos do barramento. Esses recursos são relatados à UFX quando a interface de extensão de classe é estabelecida.

A UFX expõe IOCTLs padrão que as camadas superiores (o driver da classe de função USB e os serviços em modo de usuário) podem usar para enviar solicitações ao controlador. Além disso, a UFX notificará as camadas superiores sobre as solicitações padrão recebidas do host.

Driver de cliente de função USB

A UFX fornece uma interface abstraída que funciona consistentemente em diferentes controladores. No entanto, os controladores têm capacidades diferentes, com limitações como o número e os tipos de pontos de extremidade, baixa potência e ativação remota. Por exemplo, determinados controladores dão suporte a DMA, enquanto outros não. Alguns controladores implementam fluxos no hardware, enquanto outros controladores esperam que o driver manipule fluxos. Por esses motivos, apenas a funcionalidade comum é tratada na UFX. Transferências, gerenciamento de energia, suporte a fluxo e outros recursos que variam de controlador para controlador são tratados pelo driver cliente.

O driver do cliente da função USB é responsável por implementar operações específicas do controlador. Isso inclui a implementação de transferências de dados de ponto final, alterações de estado do dispositivo USB (redefinição, suspensão, retomada), detecção de conexão/desconexão, detecção de porta/carregador. O driver cliente também é responsável por lidar com o gerenciamento de energia e eventos PnP.

O driver de função do cliente é escrito como Kernel-Mode Driver Framework (KMDF) driver usando o driver de classe de função USB para interfaces de programação UFX.

A Microsoft fornece drivers de cliente de função in-box (UfxChipidea.sys, Ufxsynopsys.sys) para controladores ChipIdea e Synopsys.

Driver de filtro inferior USB

Um driver de filtro inferior USB suporta a detecção de carregadores se o controlador de função usar os drivers embutidos Synopsys e ChipIdea. O driver de filtro gerencia o carregamento USB a partir da detecção de porta USB. Ele deve publicar um GUID para cada tipo de carregador compatível e uma lista das propriedades desse carregador. Se um carregador específico for configurável, o driver de filtro USB inferior definirá uma lista de PropertyIDs com suporte e seus tipos de valor correspondentes que podem ser enviados para ele, para configurar o carregador. O driver também notifica o conjunto de baterias quando ele pode começar a carregar e a quantidade máxima de corrente que o dispositivo pode consumir. Para drivers clientes que não sejam os da Synopsys e da ChipIdea, a lógica de carregamento pode ser implementada no driver cliente.

Um driver de classe de função envia uma solicitação à UFX usando interfaces de programação para dar suporte a carregadores proprietários.