Una forma eficiente de desactivar los puertos USB de forma selectiva

-1

(Editado y expandido de la pregunta original para mayor claridad)

Las interfaces USB como medio para controlar el hardware externo desde una computadora de escritorio o portátil son omnipresentes; hay muchos miles de modelos de hardware disponibles, que varían en precio desde 10 -1 a 10 6 USD. Es razonable exigir que la línea de voltaje de + 5V CC pueda desconectarse de la computadora host, pero esto no está garantizado de ninguna manera en todas las PC / portátiles que ejecutan todos los sistemas operativos extendidos.

Estoy buscando tener una verdadera solución multiplataforma para poder cargar selectivamente los puertos USB desde y hacia el software, por períodos de tiempo totalmente arbitrarios. Esto no se debe a que yo esté haciendo prototipos o empate, y tampoco es mi primera incursión en la electrónica haciendo que un LED parpadee y se apague; Necesito una solución confiable a largo plazo.

Estoy buscando una solución eficiente que minimice:

  • costo
  • tiempo de implementación
  • Otros problemas generales, como el volumen o la cantidad de cables finales

Basándome en los comentarios, he clasificado mis opciones de la siguiente manera:

Opción 1

Compre un divisor USB dedicado, con un software exclusivo multiplataforma, como el Yepkit YKUSH hub :

  • $42
  • Tiempodecompilacióndelsoftwarenegligente+algúntiempopara"empaquetar"
  • Compacto y limpio

Opción 2

Compre un concentrador USB programable :

  • $300
  • Pocotiempoparaimplementarelcontroldesoftwaredelíneadecomandos
  • encajaprofesionalmente

Enestemomento,mesentiríatentadoaobtenerunconcentradorUSBde4vías,unirsuslíneasdealimentaciónatravésdeunreléseparadocontroladoporarduino(yaquetengounarduinoquenuncadebeestarsinalimentación).

Opción3

Compreunconcentradorbastantecompatiblecon uhubctl . Luego, ejecute Linux o programe una forma de hacerlo funcionar en Windows. Una máquina virtual también sería un dolor de cabeza, ya que los programas en Windows tendrán problemas para interactuar con los programas de Linux dentro de la máquina virtual.

  • ~ $ 20
  • Mucho tiempo para implementar software multiplataforma
  • hub USB profesional

Opción 4

Compre un concentrador USB y un relé normalmente cerrado de 5V, controlado por e.g. un arduino para cortar la alimentación al concentrador USB según sea necesario:

  • ~ $ 25
  • Largo tiempo para soldar y ordenar conexiones + poco tiempo para implementar el cambio en el código arduino
  • Hada fea debido a cables de empalme

(Sorprendentemente no se sugiere en las respuestas dado que este es un sitio de Ingeniería Eléctrica)

    

3 respuestas

2

En Windows, puede simular un evento de desconexión utilizando la utilidad devcon proporcionado por Microsoft. Úselo como se describe en esta respuesta . Sin embargo, esto no significa necesariamente que la alimentación se apague.

En otras plataformas (Linux, Mac) puede usar mi utilidad uhubctl . Funcionará y en realidad apagará la alimentación de cada puerto de forma selectiva para cualquier concentrador USB que admita el control de alimentación por puerto (verifique la lista de compatibilidad para los dispositivos probados). La buena noticia es que uhubctl es compatible con USB 3 y muchos concentradores USB 3 son compatibles con el control de alimentación por puerto.

    
respondido por el mvp
2

Es ciertamente posible en algunos casos, pero depende del hardware que estés ejecutando.

Algunos conjuntos de chips USB permiten el "control de alimentación por puerto" (el nombre de esta función parece cambiar de un fabricante a otro). Su millaje puede variar porque esta función parece ser una parte opcional de la especificación USB3.

Aquí hay una lista no oficial y probablemente incompleta de chips que admiten esta función: enlace

Uhubctl es un programa basado en Linux que te permite activar y desactivar los puertos USB en conjuntos de chips compatibles. Funciona para puertos individuales en tarjetas adaptadoras PCIe a USB también. Puede ejecutarse desde la línea de comandos o desde un script de shell y usted solo designa qué puerto desea activar o desactivar.

Si su hardware contiene uno de los chips compatibles (y el fabricante optó por implementarlo en su placa base / tarjeta PCIe), esa es una opción que me funciona de forma nativa en Linux.

    
respondido por el Wossname
2

Primero, no todas las PC de escritorio tienen control de potencia de puerto individual, en realidad muy pocos lo tienen. Tendrá mejor suerte con los centros externos, aunque también será un desafío.

En segundo lugar, la función de puerto, alimentación, conexión, restablecimiento, habilitación, etc. de los puertos USB son pasos integrados del protocolo USB y se implementan a nivel del kernel. Habilitar la alimentación del puerto es la primera función estándar para cualquier puerto concentrador raíz (o normal), y apagarlo no está en el protocolo USB estándar. Por lo tanto, necesitará el código fuente del controlador usb para implementar nuevas llamadas y funciones personalizadas. Si esto está teóricamente disponible para Linux / Android, es altamente problemático en Windows.

Sin embargo, si esto es para probar funciones USB básicas individuales bajo control manual y no se necesita / no se requiere la funcionalidad de clase USB "normal", existe un paquete de software independiente llamado " USB3CV "- verificador de comandos , disponible en USB.ORG, que reemplaza la pila USB estándar de Windows y permite ejecutar comandos de puertos individuales a través de una interfaz gráfica. De nuevo, esto supone que el hardware (concentrador USB) tiene controladores de alimentación de puerto individuales, lo que es difícil de conseguir en primer lugar.

Si necesita una funcionalidad de pila USB normal pero desea ejercer un apagado sistemático (VBUS apagado / desconectado) de los dispositivos USB conectados, su mejor opción es obtener un concentrador con control de alimentación de puerto individual y cortar los cables de control para tu controlador Arduino.

Una vez más, todo depende de cuál sea el propósito de tu ejercicio, podría haber algunas advertencias en el proceso de desconexión.

ADICIÓN: en el entorno USB clásico con puertos Tipo A, la conmutación de alimentación del puerto individual es OPCIONAL y, por lo general, no debe esperarse de los productos disponibles en el mercado. Sin embargo, para todos los dispositivos con conectores descendentes tipo C, el control de alimentación del puerto individual es OBLIGATORIO según las especificaciones del USB 3.2. Por lo tanto, Type-C es el camino a seguir (en el futuro).

    
respondido por el Ale..chenski

Lea otras preguntas en las etiquetas