TLDR
当我在USB首选项中连接两个USB手机时,我可以通过“充电连接设备”选项热交换电源角色。

我如何在两个Android手机之外复制这个功能(例如,当我连接我自己的定制第三方硬件时)?我知道我将不得不在第三方硬件端实现或使用一些USB堆栈硬件/固件,但我不确定到底需要什么标准。例如,数字键编写了一篇很好的文章,描述了各种USB规范。因此,对于Android电源交换可比性,我需要USBPD3.0,还是USB类型-C1.2可以工作,或者USBBC1.2,等等?
此外,我想要一个官方确认的链接,即Android附件并不是当前处理从外部设备为安卓手机供电的方式,尽管官方开发文档提出了一些建议。相反,USB-PD,或其他一些USB类型的C标准,Android仍然是数据主机,而外部设备作为电源是目前的标准做法。到目前为止,我还没有在Android文档中找到任何关于这方面的信息,我觉得非常奇怪的是,他们自2012年以来就没有更新过的东西仍然作为唯一的方法出现在官方文档中。
这个USB交换功能似乎不在我可以找到的Android文档中列出,但是您可以找到负责热交换电源角色的源代码这里
详细背景
我有一个项目,我需要通过外部电池供电的MCU为Android手机供电。根据android文档上的usb连接,我应该让我的单片机作为主机,并实现安卓开放附件协议(AOA)。
寻找如何做到这一点被证明是一个相当深的兔子洞,但简而言之,我发现像FTDI这样的制造商为处理AOA协议制造专用集成电路,但他们的例子自2012年以来就没有更新过,而且AOA是硬编码的,因此今后对该协议的任何更改都需要制造新的硬件。
我也做过一些IOIO板回购(从安卓方面),但是看看PIC24F上使用的固件,看起来原来的开发人员创建了一个定制的USB栈来实现AOA,并在回购wiki中发表了一些关于这是多么困难的评论。
最后,我找到了在MAX3421E上实现AOA的repo。看来,这可能已经停止或与2011/2012年度围绕AOA的其他项目有关,比如现在已经过时的阿迪诺ADK。
它总结说,任何围绕AOA或"ADK“的东西似乎都是完全由用户或第三方驱动的,并且没有得到Android/Google的官方支持。例如,在文档中有一个链接可以查看ADK的“源代码”,但是这个链接将您重定向回相同的文档(而不是源代码)。实际上,我从一个12岁的孩子在Instructable页面上找到了上面提到的源代码,并链接到官方回购。您可以自由地查看这段代码,但是它是旧的,不适用于当前的Android构建系统,您会发现USB_Host_Shield_2.0项目组织得更好,更容易理解,这是基于我所理解的硬件的。
Android似乎对此提供的支持如此之少,它似乎在2011年推出一年后的2012年就被抛弃了。因此,我在寻找一种更有前途的解决方案,从外部控制器为Android设备提供动力。从我所能告诉现代的方法来说,这就是使用USB控制器,允许独立于数据角色中选择电源角色。例如,如果我用USB电缆连接到Android手机,那么插头/电缆的方向将决定主机/附件角色,默认电源是附件。(即从前面的屏幕截图来看,这是主机,因为"USB控制器通过“设置为”此设备“,而电源是相反的电话,因为这里禁用了”充电连接设备“(并在另一个设备上启用)。
发布于 2022-06-20 06:50:59
我会发布一个潜在的答案,尽管我希望有一些官方的答案来推翻我的假设和猜测。
从处理此功能的源代码中可以看出,{POWER_ROLE_NONE、POWER_ROLE_SINK、POWER_ROLE_SOURCE}有三个强大的角色。
在这些导入之后,我可以看到这里清楚地区分了power角色和数据角色。
如果我插入电话到USB端口不支持USB,这个“充电连接设备”选项消失。当将手机连接到USB充电器时,它也不会出现.因此,我假设连接的设备必须显示这是一个双重角色UFP \ DFP,这样这个选项才会出现。
如果有人可以在此添加任何正式文档,以及USB标准(3.0、3.1、3.2、4.0等)这是必要的,这与这个功能所支持的Android版本有什么关系,等等,这将覆盖这个答案。
https://stackoverflow.com/questions/72683044
复制相似问题