Как подать и отключить питание на USB-порт?

Тема в разделе "WASM.WIN32", создана пользователем Avil, 15 ноя 2004.

  1. Avil

    Avil New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2004
    Сообщения:
    4
    Здравствуйте.

    Кто-нибудь может подсказать, как можно это сделать? Ситуация такая: есть некое устройство, которое включается программно. Раньше оно висело на COM-порту, но встал вопрос о переключении на USB. Включалось оно замыканием ком-порта самого на себя. Пока порт замкнут, устройство работает. Разомкнут - не работает. Все. Более никакого общения с этим устройством нет. Вопрос соответствия уровня напряжения на этих портах не стоит, он уже решен. Надо просто программно подавать напряжение на USB-порт и отключать его при необходимости. Причем под виндой. И как это сделать? Можете помочь? Сроки поджимают.
     
  2. Avil

    Avil New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2004
    Сообщения:
    4
    Еще раз здравствуйте. Может, кто-нибудь может подсказать, где надо искать эту информацию. Та литература, что продается в нашем городе, полностью обходит вопросы по USB (чего уж говорить о программировании). Из Москвы заказать невозможно. Срок доставки - месяц, без гарантии. Интернет модемный, весь его не перероешь. А срок на работу очень маленький. Все дело в том, что программа уже переписана под виндоус. Одно из устройств с успехом заведено на клавиатуру. Второе же требует для своего включения 12 вольт. Здесь в дело вступают реле типа РЭС-15, которые можно включать от 5-ти вольт. А ведь такое питание и подается по USB. Реле уже замыкают цепь нужного устройства. Схема сложновата, но как еще можно управлять программно таким устройством с учетом того, что нужно на один компьютер повесить 5-6 таких агрегатов? На клавиатуре токи маленькие. Ком-портов мало. На LPT в данной ситуации тоже не посадишь. Какие либо дополнительные порты? Вряд ли. Остается USB. Но очень нужна информация, с помощью которой можно запрограммировать порты на этой шине.
     
  3. Volynkin

    Volynkin New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2004
    Сообщения:
    30
    Avil



    Читай сей документ, там все есть.

    http://www.usb.org/developers/whitepapers/wdm_pm11.pdf



    Вот только у меня такое чувство, что тебе не удастся контролировать питание каждого устройства в отдельности. Если ты отключаешь, то сразу весь рут хаб...
     
  4. Tellur

    Tellur New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2004
    Сообщения:
    21
    Адрес:
    Новокузнецк
    По-моему делать так - садизм над компьютером. Я бы лучше собрал небольшую схемку (буквально на паре микросхем) и подключил бы ее к COM или LPT порту. Придумав простенький "протокол" передачи данных, а далее - хоть релюшки, хоть транзисторы (что помощьнее) вешай
     
  5. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Avil



    USB - это сложная кухня. Реле ты туда

    вряд ли повесишь - нужен как минимум микропроцессор.

    А если будет микропроцессор, то опять же лучше

    вешать на COM или LPT. Использовать же

    USB, как управляемый источник 5в ?! Может и можно,

    но тогда это точно в wasm.electronics

    и специализированные форумы. К сожалению

    я тоже не имею времени сейчас искать : попроси

    кого-нибудь сходить на telesys.ru в

    форум Микропроцессоры и там поискать и спросить.

    Если выкрою время, то спрошу сам.
     
  6. letopisec

    letopisec New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2004
    Сообщения:
    228
    отключить питание на USB не получится никак, кажется. Есть микруха

    от ftdi называется ft232 кажется, на неё есть дрова

    http://www.ftdichip.com . Представляет собой

    мост RS232 - USB. То есть берёшь её поключаешь к USB,

    а с другой стороны микроконтроллер с внутренним UART.

    Программулиной с хоста посылаешь отключить/включить - мк

    ловит команду и выдаёт на ключ соотв. уровень.
     
  7. Avil

    Avil New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2004
    Сообщения:
    4
    Большое спасибо. В принципе, понятно, что так просто это не сделать. По проводу сборки контроллеров - у нас в городе это не так просто. Радиомагазины вымерли как класс. Кое что достать, конечно, можно, но не просто и не быстро. Кроме того, уж очень давно я не паял ничего сложнее выключателя. :) А уж контроллеры... Ну, кажись, выбора нет. Пока сделаю 2 на ком порты, благо так уже работало, хоть и под DOS. Потом буду думать.

    Еще раз всем БОЛЬШОЕ СПАСИБО. Есть информация для размышления.
     
  8. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Avil



    http://osdev.ru/files/Hard/USB1.0Specs.zip (1.1M)



    Вот что я выкопал в этой доке:



    11.12.2.2 Clear Port Feature

    This request resets a value reported in the port status.
    Код (Text):
    1. bmRequestType   bRequest    wValue           wIndex wLength Data
    2. 00100011B   CLEAR_ FEATURE  Feature Selector Port   Zero    None
    The port number must be a valid port number for that hub, greater than zero.

    Clearing a feature disables that feature; refer to Table 11-13 for the feature selector definitions. If the feature selector is associated with a change indicator, clearing that indicator acknowledges the change. Changes in connection, enable, suspend, reset, and over-current status are acknowledged using this request.

    Clearing the PORT_SUSPEND feature causes a host-initiated resume on the specified port. Clearing the PORT_ENABLE feature causes the port to be disabled. Clearing the PORT_POWER feature causes the port to be powered off, subject to the constraints due to the hub’s method of power switching. If a hub uses gang power switching, all ports must be requested to power off before any of the ports actually power off.



    Кроме этого, в другом разделе написано что далеко не каждый хаб поддерживает управление питанием портов. Только вот как объяснить винде, когда нужно, а когда не нужно отключать питание портов? Но на уровне драйверов решение наверно существует.
     
  9. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    Tellur



    И ето правильно !!!!!!!!



    Volynkin

    Александр, что у Вас за аська такая странная, я уже 4 месяца не могу ничё с этим номером сделать !
     
  10. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    valterg



    Зачем микропроцессор ?? Лучше сразу дековскую альфу или айбиемофский меинфрем ! :)))
     
  11. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    letopisec





    Да , на ето дело есть такая гадость ф полном смысле, как ACPI. Скоро будет статья на сайте. Ох и действительно чёрт знает что нагородили .... !:)
     
  12. Volynkin

    Volynkin New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2004
    Сообщения:
    30
    CARDINAL

    Аську я свою сменил недавно, ошибся номером на форуме... исправлено.
     
  13. Avil

    Avil New Member

    Публикаций:
    0
    Регистрация:
    15 ноя 2004
    Сообщения:
    4
    Black_mirror

    Спасибо, читаю.



    CARDINAL

    Садизм не садизм, а что в голову приходит при таких возможностях, то и пытаюсь сделать. Ведь винда же как-то управляет питанием USB устройств? Причем каждым портом по отдельности. Значит это возможно. Если это можно сделать программным способом, то зачем городить контроллер при отсутствии квалификации и компонентов?
     
  14. Trashy

    Trashy New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2004
    Сообщения:
    44
    Адрес:
    Russia
    Не всё так просто.

    1)Питание вырубить можно, либо у самого устройства либо попросив HUB. Но для этого нужно послать запрос IRP. А для этого нужно MS-DOSимя которое создаётся при загрузке драйвера. А для этого нужен дривер устройства. Но для наличия объекта-устройства нужно ответить на виндовские запросы, то бишь нужно само устройство(физическое)... А у вас такового нет. Так, что винда будет контролировать только потребляемый ток.

    2)HUB. Имя узнаём SetupDixxx. Открываем. Лезем в MSDN и читаем все реквэсты.

    Например это:
    Код (Text):
    1. IOCTL_INTERNAL_USB_CYCLE_PORT
    2. Operation
    3. This I/O request simulates a device unplug and re-plug on the port associated with the PDO. This IOCTL must be sent at an IRQL of PASSIVE_LEVEL.
    4.  




    Сам не пробовал, но полагаю, что это так...