【问题标题】:Control USB port's power? [closed]控制 USB 端口的电源? [关闭]
【发布时间】:2010-12-27 20:51:57
【问题描述】:

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

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

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

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

【问题讨论】:

  • +1 for ... “我需要为一些很棒的事情做这件事”

标签: c# c++ usb drivers


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      话虽如此,你可能想看看@: http://sourceforge.net/projects/libusbdotnet/

      LP, 德让

      【讨论】:

      • 尼克,您是指以太网或电话插孔还是 RS232 端口?
      • RS232接口非常方便,可以翻转各种状态位来驱动LED。
      • 带有 SerialPort 组件,它是自 v2.0 (IIRC) 以来的 .NET 的一部分。简单的例子是@stackoverflow.com/questions/666805/…。 LP,德扬
      • 使用System.IO.Ports.SerialPort 类并将DtrEnable 属性设置为true 以打开RS232 连接器上的DTR 引脚。
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

        • 是的,如果您想要一个支持 USB 的可编程微控制器,请查找 Arduino,开源,存在不同版本,有些非常小。很容易上手,很好玩。
        【解决方案6】:

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

        【讨论】:

        • @尼克。我不确定我是否理解这个问题。设备将需要一个控制器(例如 PIC18F4550 或类似设备)。我敢肯定,您可以使用正确的电阻器将始终开启的 LED 从 5V 连接到 GND 以限制电流。
        【解决方案7】:

        可能可以通过执行“安全删除硬件”USB 设备时发生的任何事情来打开和关闭设备的电源,但我不能 100% 确定这会关闭电源,它可能只是向设备发送一个信号,告诉它它已断开连接,从而使其自行关闭。

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

        【讨论】:

        • 不,我不相信这会关闭电源。 “安全移除硬件”后,我的两个 USB 记忆棒仍然发光。当您选择此选项时,所有 Windows 都会将文件缓存刷新到设备,删除驱动器号并在完成时通知您。
        • 这也是 99% 设备的一次性交易。您必须重新插入设备才能重新枚举。
        【解决方案8】:

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

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

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

        【讨论】:

          【解决方案9】:

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

          【讨论】:

            【解决方案10】:

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

            【讨论】:

            • 已编辑:查找电流和功率之间的差异。
            猜你喜欢
            • 1970-01-01
            • 2021-03-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-18
            • 1970-01-01
            • 2010-12-11
            相关资源
            最近更新 更多