我使用的是具有USB主机端口的嵌入式设备。我想将iPhone连接到它并通过USB进行通信。我已经完成了这方面的开发并移植了连接到iPhone上usbmux的功能并且成功通信,但还有另一个问题。
所有开发都是在iPhone连接到连接到我的设备的有源USB集线器的情况下完成的,一旦我直接连接它,枚举后它开始耗尽我的嵌入式设备的电池并导致张力(电压)丢弃导致我的设备关闭。
我知道在枚举之后usb设备可以从usb端口抽取高达500 mA的电流,但我想知道是否有办法将其限制为100 mA(同时仍然注册了iPhone)。
我发现了有关控制数据引脚电压或usb端口vcc的各种问题,我明白这是不可能的,我正在寻找一种软件解决方案(虽然欢迎使用硬件解决方案)。
tl; dr:有没有办法在枚举后为iPhone供应低于500毫安的电量?我可以在软件中这样做吗?或者我需要硬件解决方案?我不想打开/关闭端口,只是限制iPhone的功耗。
注意:我使用的是Windows CE 6.0,如果它只能通过修改驱动程序或直接访问来完成,则没有问题。
P.S。另外,如果在* nix(或其他一些开源操作系统)中有一种方法可以查看源代码并将其移植到Windows CE,请告诉我。
答案 0 :(得分:2)
当设备共享其可用配置时(请参阅USB第9章),它指定了每种配置所需的功率。主持人应该查看所有可用的配置并选择它想要的配置。
然而,在实践中,这些事情并不顺利。
上次我看到这个时,Windows总是选择第一个配置。 MacOS始终选择最低功耗配置(或最高,我不记得了)。我从未看过WinCE或Linux。
如果您正在编写/修改驱动程序,则可以设置自己的规则以选择哪种配置,包括查找“自供电”的配置。然而,iPhone可能只有一个描述符总是要求500mA,总线供电。如果是这样的话,那么你几乎已经搞砸了,因为没有办法让iPhone知道它是不行的。
话虽如此,我相信所有iPhone配件实际上都是USB主机(而不是USB设备),并且考虑到它们并不总是供电,iPhone必须能够枚举自供电。
答案 1 :(得分:1)
我喜欢Russ Schultz的回答,但我想添加另一个答案: 不。
外围设备的描述符(在这种情况下为iPhone)包含bMaxPower。如果枚举此设备,则您也接受电源需求。如果您已经使用500 mA衰减器枚举了设备,则不可能仅提供更少的电流(例如300 mA)。如果这是您想要的。
如果设备提供了多种配置,Russ会提到您可以自由编写驱动程序,从而以较低的功耗选择配置。希望该设备将仅消耗所授予的功率。
许多外围设备都不在乎。大多数设备仅提供500 mA的一种配置。而且有很多设备消耗的能量超过了他们所说的...