Partilhar via


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

A Microsoft fornece um driver compatível com a especificação USB Type-C® Connector System Software Interface (UCSI) para um transporte ACPI (Advanced Configuration and Power Interface). Se o seu projeto incluir um controlador incorporado com transporte ACPI, implemente o UCSI no BIOS/EC do seu sistema e carregue o controlador UCSI integrado (UcmUcsiCx.sys e UcmUcsiAcpiClient.sys).

Se o hardware compatível com UCSI usa um transporte diferente de ACPI, você precisa escrever um driver de cliente UCSI.

Drivers para suportar componentes USB Tipo-C para sistemas com controladores embutidos

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

Diagrama de componentes de software USB Type-C.

A comutação de função USB é tratada no firmware do sistema. A pilha de drivers do comutador de função USB não está carregada. Em outro sistema, o stack de drivers pode não ser carregado porque a função dupla não é suportada.

  • Drivers do lado do dispositivo USB

    Os drivers do lado do dispositivo USB atendem a função/dispositivo/periférico. A extensão de classe do controlador de função USB suporta o Media Transfer Protocol (MTP) e o carregamento de dispositivos usando carregadores BC 1.2. A Microsoft fornece drivers de cliente embutidos para controladores Synopsys USB 3.0 e ChipIdea USB 2.0. Você pode escrever um driver de cliente personalizado para seu controlador de função usando interfaces de programação de driver de cliente de controlador de função USB. Para obter mais informações, consulte Desenvolvendo drivers do Windows para controladores de função USB.

    O fornecedor de SoC pode fornecer-lhe o driver de filtro inferior da função USB para deteção de carregador. Se você estiver usando o driver de cliente Synopsys USB 3.0 ou ChipIdea USB 2.0 in-box, você pode implementar seu próprio driver de filtro.

  • Drivers USB do lado do host

    Os drivers USB no lado do host são um conjunto de drivers que funcionam com controladores de host USB compatíveis com EHCI ou XHCI. Se o driver de comutação de funções enumerar a função de host, os drivers são carregados. Se o controlador host não estiver em conformidade com as especificações, você poderá escrever um driver personalizado usando a interface de programação da extensão do controlador host USB. Para obter mais informações, consulte Desenvolvendo drivers do Windows para controladores host USB.

  • Gerenciador de conectores USB

    A Microsoft fornece um driver integrado UCSI no Windows (UcmUcsiCx.sys) que implementa as funcionalidades definidas na Especificação de Interface de Software do Sistema de Conectores Type-C USB. A especificação descreve as capacidades do UCSI. Ele explica os registros e estruturas de dados para designers de componentes de hardware, integradores de sistemas e desenvolvedores de drivers de dispositivo.

    Este driver destina-se a sistemas com controladores incorporados. Este driver é um cliente para o driver de extensão de classe do gestor 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 as 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:

  • OBTER_MODOS_ALTERNATIVOS
  • GET_CAM_SUPPORTED
  • GET_PDOS
  • SET_NOTIFICATION_ENABLE: O sistema ou controlador deve suportar as seguintes notificações em SET_NOTIFICATION_ENABLE:
    • Alteração das Capacidades do Fornecedor Suportadas
    • Mudança de nível de potência negociada
  • GET_CONNECTOR_STATUS: O sistema ou controlador deve suportar estas alterações de estado do conector em GET_CONNECTOR_STATUS:
    • Alteração das Capacidades do Fornecedor Suportadas
    • Mudança de nível de potência negociada

Para obter mais informações, consulte Implementação UCSI do BIOS da Intel.

UCM-UCSI dispositivo ACPI para UCSI 2.0 ou superior

A partir do Windows 11, versão 22H2 September Update, os drivers de dispositivo Windows UCM-UCSI ACPI suportam a especificação UCSI versão 2.0 e 2.1. A especificação UCSI 2.0 tem alterações significativas 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 que o UCSI PPM da especificação versão 2.0 ou superior implemente a seguinte função _DSM no dispositivo ACPIUCM-UCSI no firmware ACPI e retorne um valor diferente de zero para indicar que o UCSI OPM deve seguir a versão de especificação UCSI relatada.

  • Arg0: UUID = 6F8398C2-7CA4-11E4-AD36-631042B5008F
  • Arg1: ID da revisão = 0
  • Arg2: Índice de função = 5
  • Arg3: Embalagem vazia (não utilizada)

Valor de retorno:

Elemento Tipo de objeto Descrição
UsePpmReportedUcsiVersion Inteiro (32-bit) 0x00000000 (Padrão): Se a VERSION estrutura conforme definida na especificação UCSI Tabela 3-1 Estruturas de Dados tiver o valor 2.0 ou superior, UCSI OPM ainda segue a especificação UCSI 1.2. Caso contrário, o UCSI OPM segue a especificação UCSI de acordo com o valor na estrutura VERSION.

Observação

Para dispositivos ACPI UCM-UCSI, esta função é nova dentro de um método _DSM existente. Outras funções deste método _DSM devem ter sido implementadas de acordo com a implementação do BIOS Intel do documento UCSI . A função 0, que retorna uma máscara de bits de todas as funções suportadas, também deve ser atualizada em conformidade.

Exemplo de fluxo para UCSI

Os exemplos nesta seção descrevem a interação entre o hardware/firmware do Type-C USB, o driver UCSI e o sistema operacional.

Deteção de função DRP

  1. O hardware/firmware Type-C USB deteta um evento de conexão de dispositivo. O sistema DRP do Windows 10 assume inicialmente 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 o seu estado de conexão é 1 e o 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 gestor de conectores USB reconhece que a pilha de funções USB está carregada, logo, o sistema encontra-se num estado incorreto. Instruir o driver UCSI a enviar as solicitações Set USB Operation Role e Set Power Direction Role para o firmware.

  4. O hardware/firmware USB Type-C inicia a operação de troca de função com o DFP.

Detetar uma condição de erro de incompatibilidade do carregador

  1. O hardware/firmware USB Type-C detecta que um carregador está ligado e negoceia um contrato de energia predefinido. 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 de conector = DFPe Status de carregamento da bateria = Slow/Trickle.
  3. A extensão de classe do gerenciador de conectores USB envia uma 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á muitas maneiras de testar sua implementação UCSI. Para testar comandos individuais na implementação do UCSI BIOS/EC, use UCSIControl.exe, que é fornecido no pacote de software Microsoft USB Test Tool (MUTT). Para testar sua implementação UCSI completa, use os testes UCSI que podem ser encontrados no Windows Hardware Lab Kit (HLK) e as etapas no Type-C Manual Interop Procedures.

UCSIControl.exe

Você pode testar comandos individuais em sua implementação UCSI BIOS/EC usando UCSIControl.exe. Esta ferramenta permite enviar comandos UCSI para o firmware através do driver UCSI. Requer que o driver seja carregado e executado. Você também tem a interface de teste para o driver ativada. Por padrão, essa interface não está habilitada para impedir que seja acessível a usuários não autorizados em um sistema de varejo.

  1. Localize o nó do dispositivo no Gestor de Dispositivos (devmgmt.msc) chamado UCSI USB Connector Manager. O nó encontra-se na categoria Controladores Universal Serial Bus.

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

  3. Selecione Device Instance Path no menu suspenso e registe o valor desta 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. Para reiniciar o dispositivo, no nó do dispositivo no Gestor de dispositivos, selecione Desativar e, em seguida, selecione Ativar. Como alternativa, você pode reiniciar o PC.

Você pode visualizar a ajuda executando UcsiControl.exe /?.

Aqui estão os comandos comuns:

Comando UCSI UcsiControl.exe comando
Redefinição do PPM UcsiControl.exe Enviar 0 1
Redefinição do conector Soft reset: UcsiControl.exe Enviar 0 10003

Hard reset: UcsiControl.exe Enviar 0 810003
Definir Ativação de Notificação Todas as notificações: UcsiControl.exe Enviar 0 ffff0005

Somente conclusão do comando: UcsiControl.exe Enviar 0 00010005

Sem notificação: UcsiControl.exe Enviar 0 00000005
Obter capacidade UcsiControl.exe Enviar 0 6
Obter funcionalidades 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 Fornecedor: UcsiControl.exe Send 0 81000B

Consumidor: UcsiControl.exe Enviar 0 101000B

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

Pia do banheiro local: UcsiControl.exe Enviar 3 00010010

Fonte remota: UcsiControl.exe Enviar 7 00810010

Pia remota: UcsiControl.exe Enviar 3 00810010
Obter estado do conector UcsiControl.exe Enviar 0 010012
Obter estado de erro UcsiControl.exe Enviar 0 13