【发布时间】:2010-12-27 20:51:57
【问题描述】:
有人知道如何控制某个 USB 端口上的 USB 引脚吗?我认为这在汇编程序中肯定是可能的,但是 C++ 或 C# 呢?
我希望能够将 USB 电池用作 LED 或类似设备的电源。所以然后一个程序会打开它并关闭它使其闪烁。
我知道这听起来毫无意义,但我需要做一些很棒的事情。
我也知道它可能需要自定义驱动程序。
【问题讨论】:
-
+1 for ... “我需要为一些很棒的事情做这件事”
有人知道如何控制某个 USB 端口上的 USB 引脚吗?我认为这在汇编程序中肯定是可能的,但是 C++ 或 C# 呢?
我希望能够将 USB 电池用作 LED 或类似设备的电源。所以然后一个程序会打开它并关闭它使其闪烁。
我知道这听起来毫无意义,但我需要做一些很棒的事情。
我也知道它可能需要自定义驱动程序。
【问题讨论】:
您不能简单地切换 USB 端口上的引脚。时期。 USB 是一种串行协议。连接器包含
如果你想获得一些 IO 端口,你需要更多的逻辑。您至少需要遵循 USB 协议的东西,这意味着某种微控制器(或特殊的 USB 设备控制器,如 FTDI USB 控制器。FT232 和 FT245 尤其适合使用)。对于基于低端微控制器的解决方案,V-USB driver for AVR controllers 可能会很有趣。
对于 PC 上的简单位敲击 IO 引脚,请使用并行端口。 USB 确实不是制造出来的,也不适合那个。
【讨论】:
根据http://www.gniibe.org/development/ac-power-control-by-USB-hub/index
USB 2.0 名义上支持每端口电源切换:
Hub Descriptor:
[...]
wHubCharacteristic 0x0089
Per-port power switching
[...]
遗憾的是,作者报告说,虽然集线器的固件可能声称支持这一点,但制造商在电路板上偷工减料。
【讨论】:
USB 并非微不足道,所以我猜你在使用它时会遇到一些问题(错误)。使用标准串行端口,你会/much/更好(恕我直言),这些端口已经用于类似的东西很长时间了,有很多可用的例子。如果您的目标机器上没有可用的串行端口,您可以使用 USB->串行接口电缆。
话虽如此,你可能想看看@: http://sourceforge.net/projects/libusbdotnet/
LP, 德让
【讨论】:
System.IO.Ports.SerialPort 类并将DtrEnable 属性设置为true 以打开RS232 连接器上的DTR 引脚。
至少在 PC 芯片组上,没有软件控制 USB 端口的电源和接地引脚。这是由 USB 控制器在硬件中处理的。如果您想通过软件控制 TTL 电压,请考虑使用 USB 并行端口适配器。
【讨论】:
我认为尝试打开和关闭 USB 电源并不是一个好方法:您的 USB 控制器可能能够做到这一点,但这不是“正常”的事情.
可能最简单的方法是使用 FTDI FT245 USB->并行芯片之类的东西。如果你只是想闪烁一些闪烁的灯,也许出去买一个标准的 USB -> 并行打印机电缆和接口......你会通过非常简单的软件控制获得 8 位输出,而且相当多只需一点工作即可获得更多。
或者全力以赴,买一个带有内置 USB 的微控制器……可能性无穷无尽!
【讨论】:
我认为您正在寻找 USB 设备。可以制作一个简单的充电器,方法是放置或升压调节器以提高 5v 或调节器驱动到较低的充电电压。打开或关闭它需要一个 USB 设备。
【讨论】:
可能可以通过执行“安全删除硬件”USB 设备时发生的任何事情来打开和关闭设备的电源,但我不能 100% 确定这会关闭电源,它可能只是向设备发送一个信号,告诉它它已断开连接,从而使其自行关闭。
最好的办法是构建一个与计算机实际通信的 USB 设备(可能通过自定义驱动程序,但您也可以使用标准驱动程序,如 HID 设备)。您可以让计算机向您的设备发送“开”或“关”(或任何您能想到的任何东西),它会按照您认为合适的方式解释信号(可能通过打开和关闭您正在谈论的 LED)。这并不像听起来那么难。您可以购买板载带有 USB 接口的微控制器,例如 Arduino,或一些高端 PIC。许多这类微控制器的制造商都提供了说明如何与它们进行 USB 接口的文档。
【讨论】:
您需要的是带有可编程 I/O 引脚(又名 PIO)或 UART (RS232) 的开发板。
最简单的方法是将 LED 连接到清除发送 (CTS) 和接地或 VCC。 CTS 线上的输出将根据另一端是否接地来打开或关闭 LED。 可以使用普通的 I/O 引脚,但它们用于 UART 中的串行数据传输。 UART 通常从这些引脚构建一个 8 位字符;但直接通过 RTS(请求发送)和 CTS 值。
使用 PIO 时,您只需在变量中设置一个位并将该变量写入 PIO 集的地址即可。您可能还必须锁定这些位。一些 PIO 管脚会记住该值,直到下一个值被写入(称为锁存),而另一些 PIO 管脚会记住该值,只要它被写出。
【讨论】:
对于实际的电源和接地引脚,没有办法做到这一点。您可能应该阅读维基百科 USB 文章的this 部分。
【讨论】:
问题是控制 USB 的电流强度 大多数答案都没有考虑到 USB 的 mA 变化及其对电压的影响。
常见的 USB 1.0 和 2.0 输出等于 500 mA 或 0.5 A。500mA 乘以 5 伏等于 2.5 瓦的功率。
1 A 将为您提供全部 5 瓦的电量,而 USB 2.0 可通过 ASUS Ai 充电器输出 1.2 A 或 1200 mA 为您提供 6 瓦的输出。
【讨论】: