Управление питанием USB-порта?

Кто-нибудь знает, как управлять выводами USB на определенном порту USB? Я думаю, что это определенно возможно на ассемблере, но как насчет C++ или C#?

Я хочу иметь возможность использовать аккумулятор USB в качестве источника питания для светодиода или что-то в этом роде. Затем программа включала и выключала его, заставляя его мигать.

Я знаю, это звучит бессмысленно, но мне нужно сделать это для чего-то потрясающего.

Я также знаю, что для этого может потребоваться специальный драйвер.


person Kristina Brooks    schedule 17.12.2009    source источник
comment
+1 за ... мне нужно сделать это для чего-то потрясающего   -  person CheeseConQueso    schedule 23.02.2010


Ответы (10)


USB не является тривиальным, поэтому я думаю, у вас будут некоторые проблемы (неправильное) его использование. Вам было бы /намного/ лучше (ИМХО) со стандартными последовательными портами, которые веками использовались для подобных вещей, и имеется множество примеров. Если на целевой машине нет доступного последовательного порта, вы можете использовать кабель USB->Последовательный интерфейс.

При этом вы, вероятно, захотите взглянуть @: http://sourceforge.net/projects/libusbdotnet/

ЛП, Деян

person Dejan Stanič    schedule 17.12.2009
comment
Ник, вы имеете в виду Ethernet, телефонную розетку или порт RS232? - person John D.; 18.12.2009
comment
Порт RS232 очень легко, и вы можете переключать различные биты состояния для управления светодиодами. - person NickZoic; 18.12.2009
comment
С компонентом SerialPort, который является частью .NET начиная с версии 2.0 (IIRC). Прямым примером является @ stackoverflow.com/questions/666805/. ЛП, Деян - person Dejan Stanič; 18.12.2009
comment
Используйте класс System.IO.Ports.SerialPort и установите для свойства DtrEnable значение true, чтобы включить контакт DTR на разъеме RS232. - person devstuff; 18.12.2009

Вы не можете просто переключать контакты на USB-порту. Период. USB - это последовательный протокол. Соединитель содержит

  1. Сила. Хост может управлять линиями электропередач, поскольку он может отключить питание в случае перегрузки. Это то, что делает хост-драйвер USB, то есть драйвер хост-адаптера на ПК. Это не означает, что вам может понадобиться какой-либо пользовательский драйвер устройства для оборудования, которое не использует ни один из классов устройств, которые ОС уже поставляет с драйверами.
  2. Данные. Данные отправляются через последовательный протокол, поэтому нет возможности управлять этими контактами, если вы используете USB.

Если вы хотите получить несколько портов ввода-вывода, вам нужно больше логики. Вам нужно как минимум что-то, что соответствует протоколу USB, что означает какой-то микроконтроллер (или специальный контроллер USB-устройства, такой как FTDI USB-контроллеры. С FT232 и FT245 особенно приятно работать). Для бюджетного решения на основе микроконтроллера драйвер V-USB для контроллеров AVR может быть интересно.

Для легкого переключения выводов ввода-вывода на ПК используйте параллельный порт. USB действительно не создан и не подходит для этого.

person bluebrother    schedule 17.12.2009

Согласно http://www.gniibe.org/development/ac-power-control-by-USB-hub/index

USB 2.0 номинально поддерживает переключение питания на порт:

Hub Descriptor:
[...]
  wHubCharacteristic 0x0089
    Per-port power switching
[...]

К сожалению, автор сообщает, что, хотя прошивка некоторых концентраторов утверждает, что поддерживает это, производители срезали углы на печатной плате.

person android.weasel    schedule 08.02.2012

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

person Andy Ross    schedule 17.12.2009

Я думаю, что пытаться включать и выключать питание USB - не лучший способ сделать это: возможно, ваш USB-контроллер может это сделать, но это не будет «нормальным» делом.

Вероятно, самый простой способ - использовать что-то вроде FTDI FT245 USB-> параллельный чип. Если вы просто пытаетесь мигать мигающими огнями, возможно, купите стандартный кабель USB -> параллельный принтер и интерфейс к нему ... вы получите 8-битный вывод с очень простым программным управлением и довольно много. больше с только немного работы.

Или сделайте все возможное и приобретите микроконтроллер со встроенным USB... возможности безграничны!

person NickZoic    schedule 17.12.2009
comment
Да, поищите Arduino, если вам нужен программируемый микроконтроллер с поддержкой USB, с открытым исходным кодом, существуют разные версии, некоторые очень маленькие. Очень легко начать и весело провести время. - person Dale; 20.12.2009

Я думаю, что вы ищете USB-устройство. Можно сделать простое зарядное устройство, установив повышающий регулятор, чтобы повысить напряжение на 5 В, или регулятор, чтобы снизить зарядное напряжение. Для его включения или выключения потребуется USB-устройство.

person kenny    schedule 17.12.2009
comment
@Ник. Я не уверен, что понимаю вопрос. Для устройства потребуется контроллер (например, PIC18F4550 или аналогичный). Я уверен, что вы можете подключить постоянно включенный светодиод от 5 В к GND с правильным резистором для ограничения тока. - person kenny; 18.12.2009

Возможно можно включать и выключать питание устройства, делая то, что происходит, когда вы "безопасно извлекаете аппаратное обеспечение" USB-устройства, но я не уверен на 100%, что это выключает питание, это может просто послать сигнал устройству о том, что оно отключено, что заставит его отключиться.

Лучшим вариантом для того, что вы пытаетесь сделать, является создание USB-устройства, которое фактически взаимодействует с компьютером (возможно, через специальный драйвер, но вы, вероятно, также можете использовать стандартный драйвер, такой как HID-устройство). Вы бы заставили компьютер отправлять «вкл» или «выкл» (или что-то еще, что вы можете придумать) на ваше устройство, которое интерпретировало бы сигналы по вашему усмотрению (возможно, включая и выключая тот светодиод, о котором вы говорили). Это не так сложно, как кажется. Вы можете купить микроконтроллеры с интерфейсами USB на борту, такие как Arduino, или некоторые из высокопроизводительных PIC. У многих производителей микроконтроллеров такого типа есть документы, объясняющие, как выполнить с ними интерфейс USB.

person rmeador    schedule 17.12.2009
comment
Нет, я не верю, что это отключает питание. Обе мои флешки продолжают светиться после безопасного удаления оборудования. Все, что Windows делает, когда вы выбираете это, сбрасывает кэш файлов на устройство, удаляет букву диска и сообщает вам, когда это завершено. - person Paul Lammertsma; 18.12.2009
comment
И это также одноразовая сделка для 99% устройств. Вы должны повторно вставить устройство, чтобы перенумеровать его. - person devstuff; 18.12.2009

Что вам нужно, так это либо макетная плата с программируемыми контактами ввода-вывода (также известная как PIO), либо UART (RS232).

Самый простой способ — подключить светодиод к сигналу готовности к отправке (CTS) и заземлению или VCC. Выход на линии CTS включает или выключает светодиод в зависимости от того, подключен ли другой конец к земле или нет. Обычные контакты ввода/вывода можно использовать, но они предназначены для последовательной передачи данных в UART. UART обычно создает 8-битный символ из этих контактов; но передает значения RTS (запрос на отправку) и CTS напрямую.

При использовании PIO все, что вам нужно сделать, это установить бит в переменной и записать эту переменную по адресу набора PIO. Возможно, вам также придется зафиксировать биты. Некоторые контакты PIO будут помнить значение до тех пор, пока не будет записано следующее значение (называемое защелкой), другие запоминают значение до тех пор, пока оно записано.

person Thomas Matthews    schedule 18.12.2009

Невозможно сделать это для фактического контакта питания и заземления. И вам, вероятно, следует прочитать эту часть статьи о USB в Википедии.

person John D.    schedule 17.12.2009

Вопрос заключается в контроле силы тока USB, в большинстве ответов не учитывалась разница в мА USB и ее влияние на вольты.

Общий выход USB 1.0 и 2.0 равен 500 мА или 0,5 А. 500 мА, умноженные на 5 вольт, составляют мощность 2,5 Вт.

1 А даст вам полные 5 Вт, а USB 2.0 может управляться ASUS Ai Charger для вывода 1,2 А или 1200 мА, чтобы дать вам выходную мощность 6 Вт.

person mtelesha    schedule 20.06.2012
comment
Отредактировано: поиск разницы между током и мощностью. - person Michael-O; 03.09.2012