Eu tenho um equipamento que se comunica através de uma porta COM e é alimentado pela porta USB. Meu problema é que, quando o PC é reiniciado, a energia é mantida, mas a comunicação com a porta COM é interrompida. A única maneira de reiniciar é remover e inserir o cabo USB.
Estou desenvolvendo um aplicativo Delphi que desliga a alimentação USB. Eu tentei usar o devcon para fazer isso:
devcon.exe disable *ID*
devcon.exe enable *ID*
devcon.exe restarts *ID*
Mas apenas interrompe a comunicação com a porta COM. A energia USB é mantida.
Existe uma maneira de desligar a porta USB, para que o equipamento também se desligue?
Qualquer dica será muito útil.
Respostas:
Para a maioria dos PCs, a porta USB VBUS nas portas ROOT não possui comutadores de hardware superiores para controlar o VBUS, portanto, não há como ativar / desativar o VBUS por software. O VBUS é conectado quase diretamente ao PS do sistema, ao barramento + 5VSB (em espera), portanto, mesmo se o PC estiver desligado, o VBUS permanece. Isso é feito dessa maneira para que um teclado ou mouse possa ativar o PC. (Os laptops são um pouco diferentes, depende). Portanto, você tem três opções:
(1) Use um bom hub (certificado e caro) com portas com switches do lado superior para conectar-se aos seus dispositivos COM. Quando o PC é reiniciado, o novo ciclo de enumeração do hub USB terá o estado USB_RESET e os comutadores superiores serão desligados e ligados novamente. Pode não ser fácil encontrar esse tipo de hub, já que os fabricantes geralmente têm opções de preenchimento em seus PCBs para usar interruptores laterais altos (adicionando custo) ou ignorá-los com polifusível reconfigurável (barato) no ponto de montagem.
(2) Use uma fonte de energia controlada separada como este comutador SPDT controlado por USB entre a porta USB e o seu equipamento.
(3) Corrija o equipamento da porta COM e / ou o driver host para implementar o protocolo "redefinir / inicializar".
fonte