Driver de Interface de Software do Sistema (UCSI) do Conector USB Tipo-C®
A Microsoft fornece um driver compatível com a especificação UCSI (Interface de Software do Sistema de Conector) USB Tipo-C® para um transporte ACPI (Interface Avançada de Configuração e Energia). Se o design incluir um controlador embutido com transporte ACPI, implemente UCSI no BIOS/EC do sistema e carregue o driver UCSI do sistema (UcmUcsiCx.sys e UcmUcsiAcpiClient.sys).
Se o hardware compatível com UCSI usar um transporte diferente do ACPI, você precisará escrever um driver cliente UCSI.
Drivers para suporte a componentes USB Tipo-C para sistemas com controladores embarcados
Aqui está um exemplo de um sistema com um controlador inserido.
No exemplo anterior, a alternância de função USB é tratada no firmware do sistema e a pilha de driver do Comutador de Função USB não é carregada. Em outro sistema, a pilha de driver pode não ser carregada porque não há suporte para dupla função.
Na imagem anterior,
Drivers do lado do dispositivo USB
Os drivers do lado do dispositivo USB atendem à função/dispositivo/periférico. A extensão de classe do controlador de função USB oferece suporte ao MTP (Protocolo de Transferência de Mídia) e ao carregamento com carregadores BC 1.2. A Microsoft fornece drivers de cliente incluídos no sistema para controladores Synopsys USB 3.0 e ChipIdea USB 2.0. Você pode escrever um driver de cliente personalizado para o controlador de função usando interfaces de programação de driver de cliente para o controlador de função USB. Para obter mais informações, consulte Desenvolvendo drivers do Windows para controladores de função USB.
O fornecedor do SoC pode fornecer o driver de filtro inferior da função USB para detecção de carregador. Você pode implementar seu próprio driver de filtro se estiver usando o driver de cliente Synopsys USB 3.0 ou ChipIdea USB 2.0.
Drivers do lado do host USB
Os drivers do lado do host USB são um conjunto de drivers que funcionam com controladores de host USB compatíveis com EHCI ou XHCI. Os drivers são carregados se o driver de troca de função enumerar a função de host. Se o controlador de host não estiver em conformidade com a especificação, você poderá escrever um driver personalizado usando a interface de programação de extensão do controlador de host USB (UCX) . Para obter mais informações, consulte Desenvolver drivers do Windows para controladores de host USB.
Nem todas as classes de dispositivos USB têm suporte no Windows 10 Mobile.
gerenciador de conectores USB
A Microsoft fornece um driver integrado UCSI com Windows (UcmUcsiCx.sys) que implementa os recursos definidos na Especificação da Interface de Software do Sistema de Conector USB Tipo-C. A especificação descreve os recursos do UCSI e explica os registros e estruturas de dados, para designers de componentes de hardware, construtores de sistemas e desenvolvedores de driver de dispositivo.
Esse driver destina-se a sistemas com controladores inseridos. Este driver é cliente do driver de extensão da classe do gerenciador de conectores USB fornecido pela Microsoft (Ucmcx.sys). O driver lida com tarefas como iniciar uma solicitação ao firmware para alterar os dados ou funções de energia e obter informações necessárias para fornecer mensagens de solução de problemas ao usuário.
Comandos UCSI exigidos pelo Windows
Consulte a especificação ucsi para comandos que são necessários em todas as implementações ucsi.
Além dos comandos marcados como Obrigatório, o Windows requer estes comandos:
- GET_ALTERNATE_MODES
- GET_CAM_SUPPORTED
- GET_PDOS
- SET_NOTIFICATION_ENABLE: o sistema ou controlador deve dar suporte às seguintes notificações em SET_NOTIFICATION_ENABLE:
- Alteração das funcionalidades do provedor suportadas
- Alteração de nível de energia negociada
- GET_CONNECTOR_STATUS: o sistema ou controlador deve dar suporte a essas alterações de status do conector no GET_CONNECTOR_STATUS:
- Alteração nas capacidades suportadas do provedor
- Alteração de nível de energia negociada
Para obter informações sobre as tarefas necessárias para implementar o UCSI no BIOS, consulte Implementação do INTEL BIOS do UCSI.
Dispositivo ACPI UCM-UCSI para UCSI 2.0 e superior
A partir do Windows 11, versão 22H2 atualização de setembro, os drivers de dispositivo ACPI do Windows UCM-UCSI dão suporte à especificação UCSI versão 2.0 e 2.1. A especificação UCSI 2.0 tem alterações importantes no mapeamento de memória de suas estruturas de dados, conforme definido na Especificação UCSI Tabela 3-1 Estruturas de Dados. Para manter a compatibilidade reversa, o Windows necessita do UCSI PPM de versão 2.0 ou superior da especificação para implementar a seguinte função _DSM sob o dispositivo ACPI UCM-UCSI no firmware ACPI e retornar um valor não zero para indicar que o UCSI OPM deve seguir a versão da especificação UCSI relatada.
- Arg0: UUID = 6F8398C2-7CA4-11E4-AD36-631042B5008F
- Arg1: ID revisão = 0
- Arg2: Índice de função = 5
- Arg3: pacote vazio (não usado)
Valor retornado:
Elemento | Tipo de objeto | Descrição |
---|---|---|
UsePpmReportedUcsiVersion | Inteiro (32 bits) | 0x00000000 (Padrão): Se a estrutura VERSION , conforme definido na Tabela 3-1 Estruturas de Dados da especificação UCSI , possuir valor igual ou superior a 2.0, o UCSI OPM ainda seguirá a especificação 1.2 do UCSI. Caso contrário, o UCSI OPM segue a especificação UCSI de acordo com o valor na estrutura de VERSION . |
Nota
Para dispositivos ACPI UCM-UCSI, essa é uma nova função em um método _DSM existente. Outras funções desse método _DSM devem ter sido implementadas de acordo com o documento Implementação do Intel BIOS do UCSI. A função 0, que retorna uma máscara de bits de todas as funções com suporte, também deve ser atualizada adequadamente.
Fluxo de exemplo para UCSI
Os exemplos dados nesta seção descrevem a interação entre o hardware/firmware USB Type-C, o driver UCSI e o sistema operacional.
Detecção de função DRP
- O hardware/firmware USB Type-C detecta um evento de conexão de dispositivo e o sistema DRP do Windows 10 inicialmente assume o papel de UFP.
- O firmware envia uma notificação indicando uma alteração no conector.
- O driver UCSI envia uma solicitação GET_CONNECTOR_STATUS.
- O firmware responde que seu Status de Conexão = 1 e o Tipo de Parceiro do Conector = DFP.
- Os drivers na pilha de funções USB respondem à enumeração.
- A extensão de classe do gerenciador de conectores USB reconhece que a pilha de funções USB está carregada, portanto, o sistema está no estado errado. Ele instrui o driver UCSI a enviar solicitações de Definir Função de Operação USB e Definir Função de Direção de Energia para o firmware.
- O hardware/firmware do USB Tipo-C inicia a operação de troca de função com o DFP.
Detectando uma condição de erro de incompatibilidade de carregador
O hardware/firmware USB Type-C detecta que um carregador está conectado e negocia um contrato de energia padrão. Ele também observa que o carregador não está fornecendo energia suficiente para o sistema.
O hardware/firmware do USB Tipo-C configura o bit de carregamento lento.
- O firmware envia uma notificação indicando uma alteração no conector.
- O driver UCSI envia uma solicitação GET_CONNECTOR_STATUS.
- O firmware responde com Status de Conexão = 1, Tipo de Parceiro do Conector=DFP e Status de Carregamento da Bateria = Slow/Trickle.
A extensão de classe do gerenciador de conectores USB envia uma notificação à interface do usuário para exibir a mensagem de solução de problemas de incompatibilidade do carregador.
Como testar o UCSI
Há muitas maneiras de testar a implementação do UCSI. Para testar comandos individuais na implementação do UCSI BIOS/EC, use UCSIControl.exe, que é fornecido no MUTT Software Pack. Para testar sua implementação completa do UCSI, use tanto os testes UCSI encontrados no Windows Hardware Lab Kit (HLK) quanto as etapas descritas nos Procedimentos de Interoperabilidade Manual Type-C.
UCSIControl.exe
Você pode testar comandos individuais na implementação do UCSI BIOS/EC usando UCSIControl.exe. Essa ferramenta permite que você envie comandos UCSI para o firmware por meio do driver UCSI. Ele requer que o driver esteja carregado e em execução e também tenha a interface de teste para o driver habilitada. Por padrão, essa interface não está habilitada para impedir que ela seja acessível a usuários não autorizados em um sistema de varejo.
Localize o nó do dispositivo no Gerenciador de Dispositivos (devmgmt.msc) chamado UCSI USB Connector Manager. O nó está na categoria controladores do Barramento Serial Universal .
Selecione e segure (ou clique com o botão direito do mouse) no dispositivo e selecione Propriedades e abra a guia Detalhes.
Na lista suspensa, selecione Caminho da Instância do Dispositivo e anote o valor da propriedade.
Abrir Editor do Registro (regedit.exe).
Navegue até o caminho da instância do dispositivo sob essa chave.
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\<device-instance-path>\Device Parameters
Crie um valor DWORD chamado TestInterfaceEnabled e defina o valor como 0x1.
Reinicie o dispositivo selecionando a opção Desabilitar no nó do dispositivo no Gerenciador de Dispositivos e selecionando Habilitar. Como alternativa, você pode reiniciar o computador.
Você pode exibir a ajuda executando UcsiControl.exe /?.
Aqui estão os comandos comuns:
Comando UCSI | comando UcsiControl.exe |
---|---|
Redefinição do PPM | UcsiControl.exe Enviar 0 1 |
Redefinição do conector | Reinicialização suave: UcsiControl.exe Enviar 0 10003 Redefinição por hardware: UcsiControl.exe Send 0 810003 |
Definir Habilitação de Notificação | Todas as notificações: UcsiControl.exe Enviar 0 ffff0005 Somente conclusão de comando: UcsiControl.exe Enviar 0 00010005 Nenhuma notificação: UcsiControl.exe Send 0 00000005 |
Obter funcionalidade | UcsiControl.exe Send 0 6 |
Obter funcionalidade do conector | UcsiControl.exe Enviar 0 10007 |
Definir UOM | DFP: UcsiControl.exe Send 0 810008 UFP: UcsiControl.exe Send 0 1010008 DRP: UcsiControl.exe Enviar 0 2010008 |
Definir UOR | DFP: UcsiControl.exe Send 0 810009 UFP: UcsiControl.exe Send 0 1010009 Aceitar: UcsiControl.exe Enviar 0 2010009 |
Definir PDR | Provedor: UcsiControl.exe Send 0 81000B Consumidor: UcsiControl.exe Send 0 101000B Aceitar: UcsiControl.exe Enviar 0 201000B |
Obter PDOs | Origem local: UcsiControl.exe Enviar 7 00010010 Coletor local: UcsiControl.exe Send 3 00010010 Origem remota: UcsiControl.exe Send 7 00810010 Coletor remoto: UcsiControl.exe Send 3 00810010 |
Obter status do conector | UcsiControl.exe Enviar 0 010012 |
Obter status de erro | UcsiControl.exe Send 0 13 |