禁用USB充电


22

由于某些与电池寿命无关的原因,当我将USB主机连接到手机(植根的Nexus 4)时,我需要禁用电池充电。环顾互联网(link1link2),看来我应该修改系统文件。我在/sys/class/power_supply/battery和中找到了一系列有趣的文件/sys/class/power_supply/usb,这些文件可能是要实现USB充电禁用的正确修改文件(例如/sys/class/power_supply/usb/present 0/1)。

有没有人尝试过这样的事情(通过软件控制USB充电并修改此类系统文件)?修改这些系统文件的最佳方法是哪种?我应该使用adb shell还是其他工具?

我尝试使用“ root Explore”应用程序来修改这些文件,但是,当我修改文件(更改其权限后)时,该文件会自动恢复为原始值。


2
尽管这可能会或可能不会助长问题,但我很好奇您为什么要禁用USB充电。
dotVezz

我在这里拥有的东西与嵌入式系统更相似:通过USB连接的电话(USB ACCESSORY)和硬件(USB HOST)。手机电池通过特定的连接(Vdd)为连接的硬件供电。但是,USB HOST应该通过USB的VBUS线为手机供电(或充电)。我要避免的是电话与所连接硬件之间的收费循环。尽管连接的硬件是主机,但提供整个系统的是Android手机。希望我的解释对您清楚。
STiLLeN

2
/ sys是一个虚拟文件系统,内核在其中公开旋钮和开关以更改和查找内核配置。您无法更改文件权限。我猜您的连结手机已解锁并已扎根。充电电路可能是基于Maxim的芯片,该芯片上可以进行配置。有可用的已更改内核,这些内核可以覆盖充电检测。相反也应该是可能的。不过,您可能需要修补并重新编译内核。
ce4 2013年

1
nexus 4的Franco Kernel允许快速充电,有可用的信号源。也许您可以看一下并弄清楚如何将其关闭:github.com/franciscofranco
ce4 2013年

Answers:


7

我刚刚尝试过,发现您需要修改文件:
sys/class/power_supply/usb/device/charge

其默认内容为“ 1”,表示“启用充电”,您需要将其设置为“ 0”以“禁用充电”

$ su

$ echo 0 > /sys/class/power_supply/usb/device/charge

我在Nexus 4上进行了测试,并且可以正常运行。


我可以确认echo 0 > /sys/class/power_supply/battery/charging_enabled在配备CM11的Sony Z1 Compact上可以使用。非常感谢!:)
seanlano 2015年

请注意,/ SYS接口是虚拟的,不会持续重新启动
kevinf

3
adb shell dumpsys battery set ac 0; dumpsys battery set usb 0;

2

我不确定它是否可以与您的特定手机的充电器配合使用,但是通常使用既可以传输电源又可以传输数据的电缆,电缆内部有单独的电源线和数据线。

我对拆下手机充电器以确认我的想法并不特别感兴趣,但是您可以尝试剥去电缆的一部分,识别并切断电缆中的电源线,然后用胶带将其包起来。

可能有一种更简单的方法可以执行此操作,但是我不知道。


USB中通常有4个引脚-2个用于5v电源,2个用于数据。
NoBugs 2014年

1
如果您切断了Vbus并将其接地,也会使数据线停止工作。从电源检测到USB电缆连接(请参阅A连接器,电源引脚稍长一些,因此它们将首先连接)。
diidu

1

我敢肯定,这不是您可以更改的软件,因为插入计算机USB端口后手机会充电。您可能需要弄脏双手,并在手机上短接一两个连接。


是的,也可以通过软件来完成。在此应用中查看扎根的Nexus 4 stopCharge
STiLLeN 2014年

1

您可以使用adb shell dump usb set usb 0; //用于禁用USB充电和

亚行外壳dumpsys电池组USB 1; //用于启用USB充电


1
这很容易,但是不幸的是它不会禁用充电。它只会使其看起来像被禁用。
diidu '17

0

您可以通过修改micro-USB连接器侧的引脚来解决硬件问题。一种明显的方法是不连接Pin#1(VBUS),另一种方法是将Pin#4(ID)接地以假装主机(PC)是OTG设备。如果这样做,则必须断开Pin#1(VBUS)的连接,否则将烧毁其中一个(如果不是两个)设备。

至于命令行解决方案,您只需要找到正确的/sys/...文件(取决于设备)即可使用。但是,正如已经提到的,您需要写访问权限和root权限才能更改它们,而您所做的任何操作都将持续到下一次重新启动或更改USB外设。


2
建议的硬件解决方案不正确。几乎每一个Android手机都配有一个USB设备,该设备从USB主机(例如笔记本电脑)获取电源,因此可以在附件模式下工作。如果您切断VBUS线路,则USB数据通信将停止工作。我已经自己测试过了。即使我没有测试,我也会以其他方式(ID引脚)说同样的话。您对软件解决方案的看法是正确的,但是并非所有的Android手机都具有/sys/...这样做所需的文件(Nexus 4是,Nexus 5是)。另一个解决方案应该是将计费驱动程序的行为更改为内核。
STlLN14年

0

与op相似,通过USB连接的Host也作为虚拟电池连接。不能简单地使用USB电缆并且没有电池,android无法启动,usb也不能提供足够的电流。

您无法在软件中修复此问题,因为Android会在引导过程中使用Vbus。除非您也想破解引导加载程序代码。

需要修改充电电路,以避免USB充电vs电池电压环路。

我在Galaxy S3上确认它需要5V总线才能启用数据(d + d-),这是USB标准的一部分。

OTG可以用电气解决问题,但是主机客户端规则不正确。此外,这款手机还可以OTG充电(我使用y电缆+游戏手柄)

编辑参考:https : //forum.xda-developers.com/showthread.php?t=1863303


一旦我确定充电电路发生变化
就会

0

我问了我的电池驱动专家的同事。在我们的Nut Pro 2(内核版本为4.4.21)上,用于打开/关闭电池充电的节点为:/sys/class/power_supply/battery/input_suspend


0

您总是可以在针脚1之间使用散装二极管,其阻挡面朝附件。这样一来,插脚会收到5v信号,因此通信正常,但不会有电流从配件流向您的手机。或者,如果您希望这样做,只需将二极管放在不同的方向即可。


-1

不,在尚未植根的设备上是不可能的。它使用带有ADB_EN​​ABLED的Settings.System,但是ADB_EN​​ABLED是一个安全系统设置,应用程序无法更改。

是的,可以在有根电话上完成。

需要添加权限android.permission.WRITE_SECURE_SETTINGS。我知道您会问我该怎么做:以下是类似应用程序的链接:https : //play.google.com/store/apps/details? id = com.jim2 &hl= zh-CN


1
什么已经ADB_ENABLED得到了与USB充电呢?您链接的应用是否允许禁用USB充电?
丹·赫尔姆

应用程序kinda允许您在更改写入安全设置后禁用USB充电。
拉文德拉·萨哈

“金田”?遵循哪些步骤?
Dan Hulme
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.