Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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:
Aplicativos e serviços
- Todas as solicitações do modo de usuário são enviadas para o driver de classe do modo kernel fornecido pela Microsoft GenericUSBFn.sys. Você pode criar um serviço de modo de usuário que se comunica com GenericUSBFn.sys enviando códigos de controle de E/S (IOCTLs) conforme definido em genericusbfnioctl.h. Para obter mais informações sobre esses IOCTLs, consulte Comunicação com o GenericUSBFn.sys a partir de um serviço em modo usuário
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.