Deshabilitar carga USB

22

Por algunas razones no relacionadas con la duración de la batería, necesito desactivar la carga de la batería cuando un host USB está conectado a mi teléfono (un Nexus 4 rooteado). Echando un vistazo en internet ( link1 , link2 ), parece que debería modificar un archivo del sistema. He encontrado una serie de archivos interesantes ubicados en /sys/class/power_supply/batteryy /sys/class/power_supply/usb, que podrían ser los correctos para ser modificados con el fin de lograr la desactivación de carga usb (por ejemplo /sys/class/power_supply/usb/present 0/1).

¿Alguien ha intentado algo así (controlar la carga del usb a través del software y modificar dichos archivos del sistema)? ¿Cuál es la mejor manera de modificar esos archivos del sistema? ¿Debo usar el adb shell u otra herramienta?

Probé la aplicación "root explore" para modificar esos archivos, sin embargo, cuando modifiqué un archivo (después de cambiar sus permisos), se mantuvo automáticamente de nuevo a su valor original.

ESTILO
fuente
2
Si bien esto puede o no contribuir a la pregunta, tengo curiosidad sobre por qué desea desactivar la carga USB.
dotVezz
Lo que tengo aquí es algo más similar a un sistema integrado: un teléfono (ACCESORIO USB) y una pieza de hardware (USB HOST), conectado a través de USB. La batería del teléfono suministra el hardware conectado a través de una conexión específica (Vdd). Sin embargo, se supone que el USB HOST suministra (o carga) el teléfono a través de la línea VBUS del USB. Lo que quiero evitar es un ciclo de carga entre el teléfono y el hardware conectado. A pesar de que el hardware conectado es el HOST, es el teléfono Android el que suministra todo el sistema. Espero que mi explicación sea clara para ti.
STiLLeN
2
/ sys es un sistema de archivos virtual donde el kernel expone botones y conmutadores para alterar y buscar la configuración del kernel. No puede cambiar los permisos del archivo. Supongo que tu teléfono Nexus está desbloqueado y rooteado. El circuito de carga probablemente se basa en un chip Maxim que se puede configurar. Hay núcleos alterados disponibles que permiten anular la detección para la carga de energía. Lo contrario también debería ser posible. Sin embargo, es posible que deba parchear y volver a compilar el núcleo.
ce4
1
Franco Kernel para el nexus 4 permite una carga rápida, las fuentes están disponibles. tal vez puedas echarle un vistazo y descubrir cómo apagarlo: github.com/franciscofranco
ce4

Respuestas:

7

Acabo de intentar y descubrí que necesitas modificar un archivo:
sys/class/power_supply/usb/device/charge

su contenido predeterminado es '1', que significa 'habilitar la carga', debe establecerlo en '0' para 'deshabilitar la carga'

$ su

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

Probé en Nexus 4 y está funcionando con éxito.

usuario3395818
fuente
Puedo confirmar que echo 0 > /sys/class/power_supply/battery/charging_enabledfunciona para mí, en un Sony Z1 Compact con CM11. ¡Muchas gracias! :)
seanlano
Tenga en cuenta que la interfaz / sys es virtual y no persiste los reinicios
kevinf
3
adb shell dumpsys battery set ac 0; dumpsys battery set usb 0;
Nir Duan
fuente
2

No estoy seguro de si funcionará con el cargador de su teléfono en particular, pero a menudo con cables que transfieren energía y datos, hay cables separados dentro del cable para energía y datos.

No estoy especialmente interesado en romper el cargador de mi teléfono para confirmar mi idea, pero podría intentar quitar parte del cable, identificar y cortar los cables de alimentación dentro del cable y envolverlo nuevamente con cinta aislante.

Es probable que haya una manera más fácil de hacerlo, pero no lo sé.


fuente
En general, hay 4 pines en USB: 2 para alimentación de 5v y 2 para datos.
NoBugs
1
Si corta Vbus y Ground, también detendrá el funcionamiento de las líneas de datos. La conexión del cable USB se detecta desde la alimentación (consulte el conector A, los pines de alimentación son un poco más largos, por lo que se conectarán primero).
Diidu
1

Estoy bastante seguro de que no es algo que pueda cambiar en el software, ya que el teléfono se cargaría cuando se conecta a un puerto USB de la computadora. Probablemente necesite ensuciarse las manos y cortar una o dos conexiones en el teléfono.

Galletas Móviles
fuente
Sí, también se puede hacer mediante software. Mire esta aplicación para Nexus 4 arraigado stopCharge
STiLLeN
1

Puede usar el conjunto de baterías adb shell dumpsys usb 0; // para deshabilitar la carga USB y

adb shell dumpsys batería set usb 1; // para habilitar la carga USB

Himanshu Rautela
fuente
1
Esto es fácil, pero desafortunadamente no desactiva la carga. Solo hace que parezca que está deshabilitado.
Diidu
0

Puede resolver el problema en el hardware modificando los pines en el lado del conector micro-USB. Una forma obvia es no conectar el pin n. ° 1 (VBUS) y la otra forma es conectar a tierra el pin n. ° 4 (ID) para simular que su host (PC) es un dispositivo OTG. Si hace eso, debe desconectar el Pin # 1 (VBUS), de lo contrario, uno, si no ambos, de sus dispositivos se quemarán.

En cuanto a la solución de línea de comandos, solo tiene que encontrar los /sys/...archivos correctos (dependientes del dispositivo) para jugar. Pero como ya se mencionó, necesita acceso de escritura y permisos de root para cambiarlos, y haga lo que haga solo durará hasta el próximo reinicio o cambio del periférico USB.

not2qubit
fuente
2
La solución de hardware sugerida es incorrecta. Casi todos los teléfonos Android que existen tienen un dispositivo USB que obtiene la fuente de alimentación de los hosts USB (por ejemplo, computadoras portátiles), por lo que funciona en modo Accesorio. Si corta la línea VBUS, la comunicación de datos USB deja de funcionar. He probado esto yo mismo. Yo diría lo mismo para el otro lado (PIN de identificación) a pesar de que no lo probé. Tiene razón sobre la solución de software, sin embargo, no todos los teléfonos Android tienen los /sys/...archivos necesarios para hacerlo (Nexus 4 sí, Nexus 5 no). Otra solución debería ser el cambio del comportamiento del controlador de carga en el núcleo.
STiLLeN
0

Similar a la operación, mi Host que está conectado a través de USB también está conectado como una batería ficticia. No puede simplemente usar un cable USB y no tener batería, Android no arranca, ni el usb proporciona suficiente corriente.

No puede solucionar esto en el software, ya que Android usará Vbus durante el arranque. A menos que también quieras hackear el código del gestor de arranque.

El circuito de carga debe modificarse para evitar la carga usb frente al bucle de voltaje de la batería.

Confirmé en Galaxy S3 que requiere un bus de 5V para habilitar los datos (d + d-) es parte del estándar USB.

OTG podría resolver el problema eléctricamente, pero las reglas del cliente host no son correctas. Además, este teléfono puede OTG y carga (uso cable y + gamepad)

Editar referencia: https://forum.xda-developers.com/showthread.php?t=1863303

kevinf
fuente
Se actualizará una vez que
descubra los
0

Le pregunté a mi colega, experto en controladores de batería. En nuestro tuerca Pro 2, cuya versión del núcleo es 4.4.21, el nodo de carga de la batería de encendido / apagado es: /sys/class/power_supply/battery/input_suspend.

Bao Haojun
fuente
0

siempre puede usar un diodo shottky entre el pin 1 con el lado de bloqueo hacia el accesorio. de esa manera, el pin uno recibe una señal de 5v para que la comunicación funcione, pero NO habrá corriente que fluya del accesorio a su teléfono. o si lo desea de otra manera, simplemente coloque el diodo en la dirección diferente.

user300447
fuente
-1

No, no es posible en dispositivos que aún no están rooteados. Utiliza Settings.System con ADB_ENABLED, pero ADB_ENABLED es una configuración de sistema seguro que una aplicación no puede cambiar.

Sí, se puede hacer en un teléfono rooteado.

Es necesario agregar un permiso android.permission.WRITE_SECURE_SETTINGS. Sé que estaría preguntando cómo hago eso: aquí está el enlace para una aplicación similar: https://play.google.com/store/apps/details?id=com.jim2&hl=en

Ravindra Sahay
fuente
1
¿Qué tiene ADB_ENABLEDque ver con la carga USB? ¿La aplicación que vinculas permite desactivar la carga USB?
Dan Hulme
La aplicación le permite desactivar la carga usb después de modificar la configuración segura de escritura.
Ravindra Sahay
"Un poco"? ¿Cuáles son los pasos a seguir?
Dan Hulme