Deaktivieren Sie das USB-Laden

Aus Gründen, die nichts mit der Akkulaufzeit zu tun haben, muss ich das Aufladen des Akkus deaktivieren, wenn ein USB-Host mit meinem Telefon verbunden ist (ein gerootetes Nexus 4). Wenn ich mich im Internet umschaue ( link1 , link2 ), sieht es so aus, als ob ich eine Systemdatei ändern sollte. Ich habe eine Reihe interessanter Dateien in /sys/class/power_supply/batteryund /sys/class/power_supply/usbgefunden, die möglicherweise die richtigen sind, um geändert zu werden, um das Deaktivieren des USB-Ladens zu erreichen (z . B. /sys/class/power_supply/usb/present 0/1).

Hat jemand so etwas versucht (das USB-Laden per Software steuern und solche Systemdateien ändern)? Was ist der beste Weg, um diese Systemdateien zu ändern? Soll ich die Adb-Shell oder ein anderes Tool verwenden?

Ich habe die App „root explore“ ausprobiert, um diese Dateien zu ändern, aber wenn ich eine Datei geändert habe (nach dem Ändern ihrer Berechtigungen), wurde sie automatisch auf ihren ursprünglichen Wert zurückgesetzt.

Dies kann zwar zur Frage beitragen oder auch nicht, aber ich bin neugierig, warum Sie das Aufladen über USB deaktivieren möchten.
Was ich hier habe, ähnelt eher einem eingebetteten System: ein Telefon (USB-ZUBEHÖR) und ein Stück Hardware (USB-HOST), die über USB verbunden sind. Der Telefonakku versorgt die angeschlossene Hardware über eine bestimmte Verbindung (Vdd). Der USB-HOST soll jedoch das Telefon über die VBUS-Leitung des USB versorgen (oder aufladen). Was ich vermeiden möchte, ist eine Ladeschleife zwischen Telefon und angeschlossener Hardware. Trotz der angeschlossenen Hardware ist der HOST das Android-Telefon, das das gesamte System versorgt. Hoffe meine Erklärung war für dich verständlich.
/sys ist ein virtuelles Dateisystem, in dem der Kernel Knöpfe und Schalter bereitstellt, um die Kernelkonfiguration zu ändern und nachzuschlagen. Sie können die Dateiberechtigungen nicht ändern. Ich vermute, Ihr Nexus-Telefon ist entsperrt und gerootet. Die Ladeschaltung basiert wahrscheinlich auf einem Maxim-Chip, der konfiguriert werden kann . Es sind geänderte Kernel verfügbar, die es ermöglichen, die Erkennung für das Laden von Strom zu überschreiben. Auch der umgekehrte Weg sollte möglich sein. Möglicherweise müssen Sie den Kernel jedoch patchen und neu kompilieren.
Franco Kernel für das Nexus 4 ermöglicht schnelles Aufladen, Quellen sind verfügbar. Vielleicht können Sie es sich ansehen und herausfinden, wie Sie es ausschalten können: github.com/franciscofranco

Antworten (10)

Ich habe gerade versucht und festgestellt, dass Sie eine Datei ändern müssen:
sys/class/power_supply/usb/device/charge

Der Standardinhalt ist „1“, was „Laden aktivieren“ bedeutet. Sie müssen ihn auf „0“ setzen, um „Laden deaktivieren“ zu können.

$ su

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

Ich habe es auf Nexus 4 getestet und es funktioniert erfolgreich.

Ich kann bestätigen, dass es echo 0 > /sys/class/power_supply/battery/charging_enabledbei mir funktioniert, auf einem Sony Z1 Compact mit CM11. Vielen Dank! :)
Bitte beachten Sie, dass die /sys-Schnittstelle virtuell ist und Neustarts nicht bestehen bleibt
adb shell dumpsys battery set ac 0; dumpsys battery set usb 0;
Diese Befehle sind interessant, aber sie wirken sich nicht wirklich auf den Ladevorgang aus! Sie könnten dies auch tun, dumpsys battery set level 42und das Android wird unabhängig vom tatsächlichen Batteriezustand davon ausgehen, dass es zu 42% aufgeladen ist. Tun Sie dumpsys battery reset, um zur Normalität zurückzukehren.
Außerdem frieren diese gefälschten Änderungen den gemeldeten Batteriestatus ein und werden in den Batteriestatistiken aufgezeichnet, was sie durcheinander bringen und zu falschen Vorhersagen über die verbleibende Zeit führen kann.

Ich bin mir nicht sicher, ob es mit dem Ladegerät Ihres speziellen Telefons funktioniert, aber bei Kabeln, die sowohl Strom als auch Daten übertragen, befinden sich häufig separate Kabel für Strom und Daten im Kabel.

Ich bin nicht besonders daran interessiert, mein Telefonladegerät zu zerreißen, um meine Idee zu bestätigen, aber Sie könnten versuchen, einen Teil des Kabels abzuisolieren, die Netzkabel im Kabel zu identifizieren und zu schneiden und es wieder mit Isolierband zu umwickeln.

Es gibt wahrscheinlich einen einfacheren Weg , dies zu tun, aber ich bin mir dessen nicht bewusst.

Es gibt im Allgemeinen 4 Pins in USB - 2 für 5 V Strom und 2 für Daten.
Wenn Sie Vbus und Ground unterbrechen, werden auch die Datenleitungen nicht mehr funktionieren. Die USB-Kabelverbindung wird von der Stromversorgung erkannt (siehe A-Anschluss, die Stromversorgungsstifte sind etwas länger, sodass sie zuerst angeschlossen werden).

Sie können adb shell dumpsys battery set usb 0 verwenden; // zum Deaktivieren des USB-Ladens und

adb shell dumpsys batteriesatz usb 1; // zum Aktivieren des USB-Ladens

Das ist einfach, deaktiviert aber leider nicht den Ladevorgang. Es sieht nur so aus, als wäre es deaktiviert.

Ich bin mir ziemlich sicher, dass Sie die Software nicht ändern können, da das Telefon aufgeladen wird, wenn es an einen USB-Anschluss des Computers angeschlossen wird. Sie müssten sich wahrscheinlich die Hände schmutzig machen und ein oder zwei Verbindungen am Telefon selbst kurzschließen.

Ja, das geht auch per Software. Sehen Sie sich diese App für gerootete Nexus 4 stopCharge an

Sie können immer eine Shottky-Diode zwischen Pin 1 mit der Sperrseite zum Zubehör verwenden. Auf diese Weise erhält der Stift ein 5-V-Signal, sodass die Kommunikation funktioniert, aber es fließt KEIN Strom vom Zubehör zu Ihrem Telefon. oder wenn Sie es anders wollen, platzieren Sie die Diode einfach in die andere Richtung.

Sie können das Problem in der Hardware beheben, indem Sie die Pins auf der Seite des Micro-USB-Anschlusses ändern. Eine naheliegende Möglichkeit besteht darin, Pin Nr. 1 (VBUS) nicht anzuschließen, und die andere Möglichkeit besteht darin, Pin Nr. 4 (ID) zu erden, um vorzugeben, dass Ihr Host (PC) ein OTG-Gerät ist. Wenn Sie das tun, müssen Sie Pin # 1 (VBUS) trennen, da sonst eines Ihrer Geräte, wenn nicht beide, verbrannt werden.

Was die Kommandozeilenlösung betrifft, müssen Sie nur die richtigen (geräteabhängigen) /sys/...Dateien finden, mit denen Sie spielen können. Aber wie bereits erwähnt, benötigen Sie Schreibzugriff und Root-Berechtigungen, um diese zu ändern, und was auch immer Sie tun, es dauert nur bis zum nächsten Neustart oder Wechsel des USB-Peripheriegeräts.

Die vorgeschlagene Hardwarelösung ist falsch. Fast jedes Android-Telefon da draußen ist ein USB-Gerät, das die Stromversorgung von USB-Hosts (z. B. Laptops) erhält und somit im Zubehörmodus arbeitet. Wenn Sie die VBUS-Leitung unterbrechen, funktioniert die USB-Datenkommunikation nicht mehr. Ich habe das selbst getestet. Ich würde dasselbe für den anderen Weg (ID-Pin) sagen, obwohl ich es nicht getestet habe. Sie haben Recht mit der Softwarelösung, aber nicht alle Android-Telefone verfügen über die /sys/...erforderlichen Dateien (Nexus 4 ja, Nexus 5 nein). Eine andere Lösung sollte das Ändern des Ladetreiberverhaltens in den Kernel sein.

Ähnlich wie bei der OP wird auch mein über USB angeschlossener Host als Dummy-Akku angeschlossen. Kann nicht einfach USB-Kabel und keinen Akku verwenden, Android bootet nicht und USB liefert auch nicht genug Strom.

Sie können dies nicht in der Software beheben, da Android Vbus während des Bootens verwendet. Es sei denn, Sie möchten auch den Bootloader-Code hacken.

Die Ladeschaltung muss modifiziert werden, um zu vermeiden, dass das USB-Laden im Vergleich zur Batteriespannungsschleife erfolgt.

Ich habe bestätigt, dass auf dem Galaxy S3 ein 5-V-Bus erforderlich ist, um Daten (d + d-) zu aktivieren. Dies ist Teil des USB-Standards.

OTG könnte das Problem elektrisch lösen, aber dann sind die Host-Client-Regeln nicht korrekt. Auch dieses Telefon kann OTG und laden (ich benutze Y-Kabel + Gamepad)

Referenz bearbeiten: https://forum.xda-developers.com/showthread.php?t=1863303

Wird aktualisiert, sobald ich herausgefunden habe, dass sich die Ladeschaltung geändert hat

Ich fragte meinen Kollegen, der Experte für Batterietreiber ist. Auf unserem Nut Pro 2, dessen Kernel-Version 4.4.21 ist, ist der Knoten zum Ein-/Ausschalten des Akkuladens: /sys/class/power_supply/battery/input_suspend.

So auch hier auf meinem Xiaomi Redmi K20 Pro mit 4.14.

Nein, auf Geräten, die noch nicht gerootet sind, ist dies nicht möglich. Es verwendet Settings.System mit ADB_ENABLED, aber ADB_ENABLED ist eine Secure-System-Einstellung, die nicht von einer Anwendung geändert werden kann.

Ja, es kann auf einem gerooteten Telefon durchgeführt werden.

Es muss eine Berechtigung android.permission.WRITE_SECURE_SETTINGS hinzugefügt werden. Ich weiß, dass Sie fragen würden, wie ich das mache: Hier ist der Link für eine ähnliche App: https://play.google.com/store/apps/details?id=com.jim2&hl=en

Was hat ADB_ENABLEDdas mit USB-Laden zu tun? Ermöglicht die von Ihnen verlinkte App das Deaktivieren des USB-Ladens?
Die App ermöglicht es Ihnen, das Aufladen über USB zu deaktivieren, nachdem Sie die schreibgeschützten Einstellungen geändert haben.
"Irgendwie"? Welche Schritte sind zu befolgen?