Désactiver le chargement USB


22

Pour certaines raisons non liées à la durée de vie de la batterie, je dois désactiver la charge de la batterie lorsqu'un hôte USB est connecté à mon téléphone (un Nexus 4 enraciné). Jeter un oeil autour sur l'Internet ( link1 , lien2 ), il semble que je devrais modifier un fichier système. J'ai trouvé une série de fichiers intéressants situés dans /sys/class/power_supply/batteryet /sys/class/power_supply/usb, qui pourraient être les bons à modifier afin de désactiver la charge USB (par exemple /sys/class/power_supply/usb/present 0/1).

Quelqu'un at-il essayé quelque chose comme ça (contrôler la charge USB via un logiciel et modifier ces fichiers système)? Quelle est la meilleure façon de modifier ces fichiers système? Dois-je utiliser le shell adb ou un autre outil?

J'ai essayé l'application "root explore" afin de modifier ces fichiers, mais lorsque j'ai modifié un fichier (après avoir changé ses autorisations), il a été automatiquement conservé à sa valeur d'origine.


2
Bien que cela puisse ou non contribuer à la question, je suis curieux de savoir pourquoi vous souhaitez désactiver le chargement USB.
dotVezz

Ce que j'ai ici est quelque chose de plus similaire à un système embarqué: un téléphone (USB ACCESSORY) et un matériel (USB HOST), connectés via USB. La batterie du téléphone fournit le matériel connecté via une connexion spécifique (Vdd). Cependant, l'USB HOST est censé alimenter (ou charger) le téléphone via la ligne VBUS de l'USB. Ce que je veux éviter, c'est une boucle de charge entre le téléphone et le matériel connecté. Malgré le matériel attaché est l'hôte, c'est le téléphone Android qui fournit l'ensemble du système. J'espère que mon explication était claire pour vous.
STiLLeN

2
/ sys est un système de fichiers virtuel où le noyau expose des boutons et des commutateurs pour modifier et rechercher la configuration du noyau. Vous ne pouvez pas modifier les autorisations de fichier. Je suppose que votre téléphone Nexus est déverrouillé et enraciné. Le circuit de charge est probablement basé sur une puce Maxim qui peut être configurée. Il existe des noyaux modifiés qui permettent de remplacer la détection pour la charge de puissance. L'inverse devrait également être possible. Vous devrez peut-être cependant corriger et recompiler le noyau.
ce4

1
Franco Kernel pour le Nexus 4 permet une charge rapide, des sources sont disponibles. vous pouvez peut-être y jeter un coup d'œil et trouver comment l'éteindre: github.com/franciscofranco
ce4

Réponses:


7

Je viens d'essayer et j'ai constaté que vous devez modifier un fichier:
sys/class/power_supply/usb/device/charge

son contenu par défaut est '1' ce qui signifie 'activer la charge' vous devez le régler sur '0' pour 'désactiver la charge'

$ su

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

J'ai testé sur Nexus 4 et cela fonctionne avec succès.


Je peux confirmer que cela echo 0 > /sys/class/power_supply/battery/charging_enabledfonctionne pour moi, sur un Sony Z1 Compact avec CM11. Merci beaucoup! :)
seanlano

Veuillez noter que l'interface / sys est virtuelle et ne persiste pas lors des redémarrages
kevinf

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

2

Je ne sais pas si cela fonctionnera avec le chargeur de votre téléphone, mais souvent avec des câbles qui transfèrent à la fois l'alimentation et les données, il y a des cordons séparés à l'intérieur du câble pour l'alimentation et les données.

Je ne suis pas particulièrement intéressé à déchirer mon chargeur de téléphone pour confirmer mon idée, mais vous pouvez essayer de dénuder une partie du câble, d'identifier et de couper les cordons d'alimentation à l'intérieur du câble et de l'enrouler avec du ruban électrique.

Il existe probablement un moyen beaucoup plus simple de le faire, mais je n'en suis pas conscient.


Il y a 4 broches en USB généralement - 2 pour l'alimentation 5 V et 2 pour les données.
NoBugs

1
Si vous coupez Vbus et Ground, cela empêchera également les lignes de données de fonctionner. La connexion du câble USB est détectée à partir de l'alimentation (voir le connecteur A, les broches d'alimentation sont légèrement plus longues pour qu'elles se connectent en premier).
diidu

1

Je suis presque sûr que ce n'est pas quelque chose que vous pouvez changer dans le logiciel, car le téléphone se chargerait lorsqu'il serait branché sur le port USB d'un ordinateur. Vous auriez probablement besoin de vous salir les mains et de court-circuiter une ou deux connexions sur le téléphone lui-même.


Oui, cela peut également se faire via un logiciel. Regardez cette application pour le Nexus 4 enraciné stopCharge
STiLLeN

1

Vous pouvez utiliser l'adb shell dumpsys battery set usb 0; // pour désactiver le chargement USB et

adb shell dumpsys batterie set usb 1; // pour activer le chargement USB


1
C'est facile, mais malheureusement, cela ne désactive pas la charge. Cela donne seulement l'impression qu'il est désactivé.
diidu

0

Vous pouvez résoudre le problème au niveau matériel en modifiant les broches du côté du connecteur micro-USB. Une façon évidente est de ne pas connecter la broche n ° 1 (VBUS) et l'autre manière est de mettre à la terre la broche n ° 4 (ID) pour prétendre que votre hôte (PC) est un appareil OTG. Si vous faites cela, vous devez déconnecter la broche n ° 1 (VBUS) sinon un, sinon les deux, de vos appareils seront brûlés.

Quant à la solution en ligne de commande, il vous suffit de trouver les bons /sys/...fichiers (dépendants du périphérique) avec lesquels jouer. Mais comme déjà mentionné, vous avez besoin d'un accès en écriture et d'autorisations root pour les modifier, et quoi que vous fassiez, cela ne durera que jusqu'au prochain redémarrage ou changement de périphérique USB.


2
La solution matérielle suggérée est incorrecte. Presque tous les téléphones Android sont équipés d'un périphérique USB qui est alimenté par des hôtes USB (par exemple des ordinateurs portables), fonctionnant ainsi en mode accessoire. Si vous coupez la ligne VBUS, la communication de données USB cesse de fonctionner. Je l'ai testé moi-même. Je dirais la même chose dans l'autre sens (broche d'identification) même si je ne l'ai pas testé. Vous avez raison sur la solution logicielle, mais tous les téléphones Android ne disposent pas des /sys/...fichiers nécessaires pour le faire (Nexus 4 oui, Nexus 5 non). Une autre solution devrait être la modification du comportement du pilote de charge dans le noyau.
STiLLeN

0

Semblable à l'op, mon hôte qui est connecté via USB est également connecté comme une batterie factice. Vous ne pouvez pas simplement utiliser un câble USB et aucune batterie, Android ne démarre pas et l'USB ne fournit pas suffisamment de courant.

Vous ne pouvez pas résoudre ce problème dans le logiciel car Android utilisera Vbus lors du démarrage. Sauf si vous souhaitez également pirater le code du chargeur de démarrage.

Le circuit de charge doit être modifié pour éviter la charge USB par rapport à la boucle de tension de la batterie.

J'ai confirmé sur Galaxy S3 qu'il nécessite un bus 5V pour activer les données (d + d-), cela fait partie de la norme USB.

OTG pourrait résoudre le problème électriquement mais les règles du client hôte ne sont pas correctes. De plus, ce téléphone peut OTG et se charger (j'utilise un câble en Y + une manette de jeu)

Modifier la référence: https://forum.xda-developers.com/showthread.php?t=1863303


Mettra à jour une fois que j'aurai
compris les

0

J'ai demandé à mon collègue, qui est un expert en pilote de batterie. Sur notre Nut Pro 2, dont la version du noyau est 4.4.21, le nœud de charge de la batterie marche / arrêt est: /sys/class/power_supply/battery/input_suspend.


0

vous pouvez toujours utiliser une diode shottky entre la broche 1 avec le côté de blocage vers l'accessoire. de cette façon, la broche 1 reçoit un signal 5v pour que la communication fonctionne, mais il n'y aura AUCUN courant circulant de l'accessoire vers votre téléphone. ou si vous le souhaitez dans l'autre sens, placez simplement la diode dans la direction différente.


-1

Non, ce n'est pas possible sur les appareils qui ne sont pas encore enracinés. Il utilise Settings.System avec ADB_ENABLED, mais ADB_ENABLED est un paramètre de système sécurisé qui ne peut pas être modifié par une application.

Oui, cela peut être fait sur un téléphone rooté.

Il est nécessaire d'ajouter une autorisation android.permission.WRITE_SECURE_SETTINGS. Je sais que vous me demanderiez comment faire: voici le lien pour une application similaire: https://play.google.com/store/apps/details?id=com.jim2&hl=en


1
Qu'est-ce que cela a ADB_ENABLEDà voir avec la charge USB? L'application que vous liez permet-elle de désactiver le chargement USB?
Dan Hulme

L'application vous permet de désactiver la charge USB après avoir modifié les paramètres de sécurité d'écriture.
Ravindra Sahay

"Un peu"? Quelles sont les étapes à suivre?
Dan Hulme
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.