Driver UCSI (interface de software do sistema de conector USB Type-C®)

A Microsoft fornece um driver em conformidade com a especificação UCSI (interface do sistema de conector DO TIPO C®) USB para transporte acpi. Se o design incluir um controlador inserido com transporte ACPI, implemente UCSI no BIOS/EC do sistema e carregue o driver UCSI in-box (UcmUcsiCx.sys e UcmUcsiAcpiClient.sys).

Se o hardware compatível com UCSI usar um transporte diferente do ACPI, você precisará escrever um driver de cliente UCSI.

Drivers para dar suporte a componentes USB Tipo C para sistemas com controladores inseridos

Aqui está um exemplo de um sistema com um controlador inserido.

Diagrama de componentes de software usb tipo C.

No exemplo anterior, a troca de função USB é tratada no firmware do sistema e a pilha do 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 a função dupla.

Na imagem anterior,

  • Drivers do lado do dispositivo USB

    Os drivers do lado do dispositivo USB são o serviço de função/dispositivo/periférico. A extensão de classe do controlador de função USB dá suporte a MTP (Media Transfer Protocol) e carregamento usando carregadores BC 1.2. A Microsoft fornece drivers de cliente in-box para controladores Synopsys USB 3.0 e ChipIdea USB 2.0. Você pode escrever um driver de cliente personalizado para o controlador de funções usando interfaces de programação de driver de cliente do 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 serão carregados se o driver de comutador 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 UCX (extensão do controlador de host USB). Para obter informações, consulte Desenvolvendo drivers do Windows para controladores de host USB.

    Nem todas as classes de dispositivos USB têm suporte em Windows 10 Mobile.

  • Gerenciador de conectores USB

    A Microsoft fornece um driver em caixa UCSI com Windows (UcmUcsiCx.sys) que implementa os recursos definidos na Especificação da Interface de Software do Sistema 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. Esse driver é um cliente para o driver de extensão de classe do gerenciador de conectores USB fornecido pela Microsoft (Ucmcx.sys). O driver lida com tarefas como iniciar uma solicitação para o firmware para alterar os dados ou as 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 obter comandos que são necessários em todas as implementações de UCSI.

Além dos comandos marcados como Obrigatórios, 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 no SET_NOTIFICATION_ENABLE:
    • Alteração dos recursos do provedor com suporte
    • 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 dos recursos do provedor com suporte
    • 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 BIOS intel do UCSI.

Dispositivo ACPI UCM-UCSI para UCSI 2.0 e superior

A partir Windows 11, versão 22H2 atualização de setembro, os drivers de dispositivo ACPI UCM-UCSI do Windows dão suporte à especificação UCSI versão 2.0 e 2.1. A especificação ucsi 2.0 tem alterações interruptivas 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 com versões anteriores, o Windows requer o UCSI PPM da especificação versão 2.0 ou superior para implementar a seguinte função _DSM no dispositivo ACPI UCM-UCSI no firmware ACPI e retornar um valor diferente de zero para indicar que o UCSI OPM deve seguir a versão de especificação de UCSI relatada.

  • Arg0: UUID = 6F8398C2-7CA4-11E4-AD36-631042B5008F
  • Arg1: ID de 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 VERSION estrutura, conforme definido na especificação UCSI Tabela 3-1 Estruturas de Dados, tiver o valor 2.0 ou superior, o UCSI OPM ainda seguirá a especificação UCSI 1.2. Caso contrário, o UCSI OPM segue a especificação UCSI de acordo com o valor na VERSION estrutura.

Observação

Para dispositivos ACPI UCM-UCSI, essa é uma nova função em um método _DSM existente. Outras funções desse método _DSM deveriam ter sido implementadas de acordo com a implementação do INTEL BIOS do documento 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.

Exemplo de fluxo para UCSI

Os exemplos fornecidos 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

  1. O hardware/firmware USB Tipo C detecta um evento de anexação de dispositivo e o sistema DRP do sistema Windows 10 inicialmente se torna a função UFP.
    1. O firmware envia uma notificação indicando uma alteração no conector.
    2. O driver UCSI envia uma solicitação de GET_CONNECTOR_STATUS.
    3. O firmware responde que seu Status de Conexão = 1 e Tipo de Parceiro do Conector = DFP. ​
  2. Os drivers na pilha de funções USB respondem à enumeração.
  3. A extensão de classe do gerenciador de conectores USB reconhece que a pilha de funções USB foi carregada e, portanto, o sistema está no estado errado. Ele instrui o driver UCSI a enviar Definir função de operação USB e definir solicitações de função de direção de energia para o firmware.
  4. O hardware/firmware USB Type-C inicia a operação de troca de função com o DFP.

Detectando uma condição de erro de incompatibilidade de carregador

  1. O hardware/firmware USB Tipo 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.

  2. O hardware/firmware USB Type-C define o bit de carregamento lento.

    1. O firmware envia uma notificação indicando uma alteração no conector.
    2. O driver UCSI envia uma solicitação de GET_CONNECTOR_STATUS.
    3. O firmware responde com Status de Conexão = 1, Tipo de Parceiro do Conector=DFP e Status de Carregamento da Bateria = Lento/Gota.
  3. A extensão de classe do gerenciador de conectores USB envia notificação para a interface do usuário para exibir a mensagem de solução de problemas de incompatibilidade do carregador.

Como testar o UCSI

Há várias maneiras de testar sua implementação do UCSI. Para testar comandos individuais na implementação do UCSI BIOS/EC, use UCSIControl.exe, que é fornecido no Pacote de Software MUTT. Para testar sua implementação completa do UCSI, use os testes UCSI que podem ser encontrados no Kit de Laboratório de Hardware do Windows (HLK) e as etapas nos Procedimentos de Interoperabilidade Manual do Tipo C.

UCSIControl.exe

Você pode testar comandos individuais em sua implementação de BIOS/EC ucsi usando UCSIControl.exe. Essa ferramenta permite que você envie comandos UCSI para o firmware por meio do driver UCSI. Ele exige que o driver seja carregado e executado e também tenha a interface de teste para o driver habilitado. 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.

  1. Localize o nó do dispositivo em Gerenciador de Dispositivos (devmgmt.msc) chamado UCSI USB Connector Manager. O nó está na categoria Controladores do Barramento Serial Universal .

  2. Selecione e segure (ou clique com o botão direito do mouse) no dispositivo e selecione Propriedades e abra a guia Detalhes .

  3. Selecione Caminho da Instância do Dispositivo na lista suspensa e anote o valor da propriedade.

  4. Abra o Editor do Registro (regedit.exe).

  5. Navegue até o caminho da instância do dispositivo sob essa chave.

    <HKEY_LOCAL_MACHINE\System\CurrentControlSet\Enum\device-instance-path>\Device Parameters

  6. Crie um valor DWORD chamado TestInterfaceEnabled e defina o valor como 0x1.

  7. Reinicie o dispositivo selecionando a opção Desabilitar no nó do dispositivo em Gerenciador de Dispositivos e, em seguida, 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 de PPM UcsiControl.exe Enviar 0 1
Redefinição do conector Redefinição reversível: UcsiControl.exe Enviar 0 10003

Redefinição forçada: UcsiControl.exe enviar 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

Sem notificação: UcsiControl.exe Enviar 0 00000005
Obter Funcionalidade UcsiControl.exe Enviar 0 6
Obter funcionalidade do conector UcsiControl.exe Enviar 0 10007
Definir UOM DFP: UcsiControl.exe enviar 0 810008

UFP: UcsiControl.exe enviar 0 1010008

DRP: UcsiControl.exe enviar 0 2010008
Definir UOR DFP: UcsiControl.exe enviar 0 810009

UFP: UcsiControl.exe enviar 0 1010009

Aceitar: UcsiControl.exe Enviar 0 2010009
Definir PDR Provedor: UcsiControl.exe Enviar 0 81000B

Consumidor: UcsiControl.exe Enviar 0 101000B

Aceitar: UcsiControl.exe Enviar 0 201000B
Obter PDOs Origem local: UcsiControl.exe enviar 7 00010010

Coletor Local: UcsiControl.exe Enviar 3 00010010

Origem Remota: UcsiControl.exe Enviar 7 00810010

Coletor Remoto: UcsiControl.exe Enviar 3 00810010
Obter status do conector UcsiControl.exe enviar 0 010012
Obter Status do Erro UcsiControl.exe Enviar 0 13