Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Descreve a arquitetura da pilha de funções USB.
Num dispositivo USB, a pilha de funções USB refere-se a um grupo de drivers que são enumerados pelo Gestor de Plug and Play, quando a ACPI cria um objeto de dispositivo físico (PDO) para um dispositivo USB.
Em um único dispositivo de configuração, um dispositivo USB pode definir uma ou mais interfaces. Por exemplo, o Media Transfer Protocol (MTP) para transferir ficheiros de e para o dispositivo. Um dispositivo USB composto pode suportar várias interfaces em uma única configuração. A stack de funções USB cria PDOs para cada interface, e o Gerenciador Plug and Play (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 é conceptualizada na seguinte imagem:
Aplicações e Serviços
- Todas as solicitações de modo de usuário são enviadas para o driver de classe de modo kernel fornecido pela Microsoft GenericUSBFn.sys. Você pode criar um serviço de modo de usuário que se comunique com GenericUSBFn.sys enviando códigos de controle de E/S (IOCTLs), conforme definido em genericusbfnioctl.h. Para obter mais informações sobre essas IOCTLs, consulte Comunicando-se com GenericUSBFn.sys a partir de um serviço de modo de 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 de modo kernel, ou pode ser um serviço de modo de 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 de classe de função USB (UFX)
A extensão de classes de funções USB (UFX) é uma extensão oferecida pelo sistema para o Kernel-Mode Driver Framework (KMDF). USB é um barramento padrão e tem algumas funcionalidades e capacidades obrigatórias. A UFX é responsável pela implementação da lógica de função USB que é comum a todos os controladores de função USB e pelo tratamento e/ou envio de solicitações de drivers de classe de função USB. Em particular, a UFX lida com o processo de enumeração do dispositivo e processamento de transferências de controle padrão. Para realizar algumas dessas operações, a UFX precisa conhecer as capacidades do ônibus. Essas capacidades são reportadas ao UFX quando a interface da extensão de classe é criada.
UFX expõe IOCTLs padrão que as camadas superiores (classe de função USB, driver e serviços de modo de usuário) podem usar para enviar solicitações para o controlador. Além disso, a UFX notifica as camadas superiores sobre as solicitações padrão recebidas do host.
Driver do cliente de função USB
UFX fornece uma interface abstrata que funciona consistentemente em diferentes controladores. No entanto, os controladores têm capacidades diferentes, com limitações como o número de terminais, os tipos de terminais, baixo consumo de energia, despertar remoto. Por exemplo, alguns controladores suportam DMA, enquanto outros não. Alguns controladores implementam fluxos no hardware, enquanto outros controladores esperam que o driver manipule fluxos. Por estas razões, apenas a funcionalidade comum é tratada no UFX. Transferências, gerenciamento de energia, suporte de fluxo e outros recursos que variam de controlador para controlador são manipulados pelo driver do cliente.
O driver do cliente de função USB é responsável pela implementação de 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 (redefinir, suspender, retomar), deteção de anexação/desanexação, deteção de porta/carregador. O driver do cliente também é responsável por lidar com o gerenciamento de energia e eventos PnP.
O driver de cliente de função é escrito como driverKernel-Mode Driver Framework (KMDF) 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.
USB driver de filtro inferior
Um driver de filtro de nível inferior USB suporta a deteção de carregadores se o controlador de função usar os drivers internos Synopsys e ChipIdea. O driver do filtro gerencia o carregamento USB a partir da deteção da porta USB. Deve publicar um GUID para cada tipo de carregador suportado e uma lista das propriedades desse carregador. Se um carregador específico for configurável, o driver de filtro USB inferior define uma lista de PropertyIDs suportados e seus tipos de valor correspondentes que podem ser enviados para ele, para configurar o carregador. O controlador também notifica o conjunto de baterias quando pode iniciar o carregamento e a quantidade máxima de corrente que o dispositivo pode consumir. Para drivers do cliente que não sejam os da Synopsys e ChipIdea, a lógica de carregamento pode ser implementada no driver do cliente.
Um driver de classe de função envia uma solicitação para o UFX usando interfaces de programação para suportar carregadores proprietários.