Выключите USB-устройство в программном обеспечении в Windows - PullRequest
27 голосов
/ 01 января 2009

Я хотел бы включить / выключить USB-устройство через программное обеспечение в Windows.

Я занимаюсь разработкой небольшого силового микроконтроллера USB. Этот чип вернется к исходному поведению в цикле питания и позволит загружать код. Поскольку мой код приведет к сбою устройства, когда что-то пойдет не так - игнорируя все команды USB, - я должен физически отключить устройство от системы.

Я хочу заниматься разработкой удаленно, а не присутствовать физически.

До сих пор я пытался использовать «devcon» для отключения частей стека USB. Хотя это переводит концентраторы в D3 (должно быть отключено!), На устройство все еще подается питание.

Существуют ли какие-либо существующие решения или приемы SetupAPI, которые могут помочь?

Ответы [ 5 ]

3 голосов
/ 06 февраля 2014

Некоторые USB-концентраторы имеют возможность отключать питание своих нижестоящих устройств.

"Возможно ли включить порты на USB-концентраторе из Ubuntu?" https://askubuntu.com/questions/149242/is-it-possible-to-power-up-ports-on-a-usb-hub-from-ubuntu Который указывает на некоторый источник c для hub-ctrl.c

См .: http://www.gniibe.org/development/ac-power-control-by-USB-hub/index

Я проверил это на Ubuntu с USB-модулем Dream-Cheeky, и он, похоже, выключил питание - хотя при повторном включении устройство запомнило (!) Состояние включения / выключения светодиодов ??? - Этого не произошло, когда я отключил и снова подключил USB-кабель к светодиоду ...

Похоже, кто-то смотрел на компиляцию для Windows, но я не смог найти результат, извините.

3 голосов
/ 01 января 2009

Поскольку он предназначен для разработки / тестирования, а не для производства, я бы рекомендовал использовать solid-state_relay в качестве части второго устройства и использовать его для циклического включения питания USB-соединения.

3 голосов
/ 19 мая 2012

Вы можете сделать с аппаратным реле и управлять им через программное обеспечение: http://pintant.cat/2012/05/12/power-off-usb-device/ (конечно, будет использоваться 2 порта USB :-) один для устройства, один для реле).

2 голосов
/ 24 июня 2016

Это простое решение для Windows, если вы купите этот внешний USB-концентратор . Он имеет недокументированную функцию, которая включает и отключает питание всех подключенных USB-устройств всякий раз, когда концентратор «включен» в диспетчере устройств Windows. Вы можете сделать это вручную:

  1. Запустить «Диспетчер устройств»
  2. Развернуть "Контроллеры универсальной последовательной шины"
  3. Открыть свойства для соответствующего «Универсального USB-концентратора»
  4. Выберите вкладку «Драйвер»
  5. Нажмите кнопку «Отключить»
  6. Нажмите кнопку «Включить». Концентратор ненадолго отключит подачу питания на все 4 порта USB, а затем включит его снова.

Это также можно сделать программно из любого приложения Windows, работающего с привилегиями администратора. Вот пример на C # .

Я успешно использовал эту технику для отключения питания USB-устройств, которые были «заблокированы». Он наверняка превосходит физически отключенные устройства, особенно на удаленных или беспилотных ПК.

0 голосов
/ 01 января 2009

К сожалению, на стандартных ПК это невозможно.

Чипсеты USB-хоста не имеют возможности полного отключения питания. Есть некоторые сигналы, которые вы можете сделать в USB 2.0 или 3.0, чтобы попросить устройство перейти в спящий режим, но порт будет обеспечивать питание, даже когда компьютер выключен. (Это такие устройства, как iPod и тому подобное, которые могут заряжаться при необходимости.)

...