32

有人知道如何控制某个 USB 端口上的 USB 引脚吗?我认为这在汇编程序中肯定是可能的,但是 C++ 或 C# 呢?

我希望能够使用 USB 电池作为 LED 或类似设备的电源。所以然后一个程序会打开它并关闭它使其闪烁。

我知道这听起来毫无意义,但我需要做一些很棒的事情。

我也知道它可能需要自定义驱动程序。

4

10 回答 10

9

您不能简单地切换 USB 端口上的引脚。时期。USB 是一种串行协议。连接器包含

  1. 力量。主机可以控制电源线,因为它可以在过载的情况下切断电源。这是由 USB 主机驱动程序完成的,即 PC 中主机适配器的驱动程序。这并不意味着您可能需要任何自定义设备驱动程序来用于不使用操作系统已提供驱动程序的任何设备类的硬件。
  2. 数据。数据通过串行协议发送,因此如果您使用 USB,则无法控制这些引脚。

如果你想获得一些 IO 端口,你需要更多的逻辑。您至少需要遵循 USB 协议的东西,这意味着某种微控制器(或特殊的 USB 设备控制器,如FTDI USB 控制器。FT232 和 FT245 特别好用)。对于基于低端微控制器的解决方案,AVR 控制器的 V-USB 驱动程序可能很有趣。

对于 PC 上的简单位敲击 IO 引脚,请使用并行端口。USB 确实不是制造出来的,也不适合那样做。

于 2009-12-17T23:35:41.553 回答
7

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

USB 2.0 名义上支持每端口电源切换:

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

可悲的是,作者报告说,虽然可能集线器的固件声称支持这一点,但制造商在电路板上偷工减料。

于 2012-02-08T13:17:18.333 回答
6

USB 不是微不足道的,所以我猜你在使用它时会遇到一些问题(错误)。使用标准串行端口,您会/much/更好(恕我直言),这些端口多年来一直用于类似的东西,有很多可用的示例。如果您的目标机器上没有可用的串行端口,您可以使用 USB-> 串行接口电缆。

话虽这么说,你可能想看看@:http: //sourceforge.net/projects/libusbdotnet/

LP,德扬

于 2009-12-17T23:18:33.000 回答
3

至少在 PC 芯片组上,没有软件控制 USB 端口的电源和接地引脚。这是由 USB 控制器在硬件中处理的。如果您想通过软件控制 TTL 电压,请考虑使用 USB 并行端口适配器。

于 2009-12-17T23:14:33.617 回答
3

我认为尝试打开和关闭 USB 电源并不是一个好方法:您的 USB 控制器可能能够做到这一点,但这不是“正常”的事情。

可能最简单的方法是使用类似 FTDI FT245 USB-> 并行芯片的东西。如果你只是想闪烁一些闪烁的灯,也许出去买一个标准的 USB -> 并行打印机电缆和接口......你会通过非常简单的软件控制获得 8 位输出,而且相当多更多的工作只需要一点点工作。

或者全力以赴,买一个内置 USB 的微控制器……可能性无穷无尽!

于 2009-12-17T23:23:33.780 回答
1

我认为您正在寻找 USB 设备。可以制作一个简单的充电器,方法是放置或升压调节器以提高 5v 或调节器驱动到较低的充电电压。打开或关闭它需要一个 USB 设备。

于 2009-12-17T23:12:33.837 回答
1

当您“安全删除硬件”USB设备时,可以通过执行任何操作来打开和关闭设备的电源,但我不能100%确定这会关闭电源,它可能只是向设备告诉它它已断开连接,这使其自行关闭。

您尝试做的最好的选择是构建一个实际与计算机通信的 USB 设备(可能通过自定义驱动程序,但您也可以使用标准驱动程序,如 HID 设备)。您可以让计算机向您的设备发送“开”或“关”(或任何其他您能想到的东西),它会按照您认为合适的方式解释信号(可能通过打开和关闭您正在谈论的那个 LED)。这并不像听起来那么难。您可以购买板载带有 USB 接口的微控制器,例如 Arduino,或一些高端 PIC。许多这类微控制器的制造商都有可用的文档来解释如何与它们进行 USB 接口。

于 2009-12-17T23:15:20.400 回答
1

您需要的是带有可编程 I/O 引脚(又名PIO)或 UART(RS232)的开发板。

最简单的方法是将 LED 连接到清除发送 (CTS) 和接地或 VCC。CTS 线上的输出将根据另一端是否接地来打开或关闭 LED。可以使用普通的 I/O 引脚,但它们用于 UART 中的串行数据传输。UART 通常从这些引脚构建一个 8 位字符;但直接通过 RTS(请求发送)和 CTS 值。

使用 PIO 时,您所要做的就是在变量中设置一个位并将该变量写入 PIO 集的地址。您可能还必须锁定这些位。一些 PIO 管脚会记住该值,直到下一个值被写入(称为锁存),其他 PIO 管脚会记住该值,只要它被写出。

于 2009-12-18T00:29:31.533 回答
0

对于实际的电源和接地引脚,没有办法做到这一点。您可能应该阅读Wikipedia USB 文章的这一部分。

于 2009-12-17T23:22:23.827 回答
-1

问题是控制 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 瓦的输出。

于 2012-06-20T19:08:20.873 回答