Desativar o carregamento USB

22

Por alguns motivos não relacionados à vida útil da bateria, preciso desativar o carregamento da bateria quando um host USB estiver conectado ao meu telefone (um Nexus 4 com raiz). Examinando a Internet ( link1 , link2 ), parece que devo modificar um arquivo do sistema. Eu encontrei uma série de arquivos interessantes localizados em /sys/class/power_supply/batterye /sys/class/power_supply/usb, que poderiam ser os corretos para serem modificados para alcançar a desativação do carregamento por USB (por exemplo /sys/class/power_supply/usb/present 0/1).

Alguém já tentou algo assim (controlar o carregamento USB via software e modificar esses arquivos de sistema)? Qual é a melhor maneira de modificar esses arquivos do sistema? Devo usar o shell adb ou outra ferramenta?

Tentei o aplicativo "root explore" para modificar esses arquivos; no entanto, quando modifiquei um arquivo (depois de alterar suas permissões), ele foi automaticamente mantido de volta ao seu valor original.

STiLLeN
fonte
2
Embora isso possa ou não contribuir para a pergunta, estou curioso para saber por que você deseja desativar o carregamento por USB.
DotVezz 11/11
O que tenho aqui é algo mais semelhante a um sistema incorporado: um telefone (USB ACCESSORY) e uma peça de hardware (USB HOST), conectado via USB. A bateria do telefone fornece o hardware conectado por meio de uma conexão específica (Vdd). No entanto, o USB HOST deve fornecer (ou carregar) o telefone através da linha VBUS do USB. O que eu quero evitar é um ciclo de carga entre o telefone e o hardware conectado. Apesar do hardware conectado ser o HOST, é o telefone Android que fornece todo o sistema. Espero que minha explicação esteja clara para você.
Stillen
2
/ sys é um sistema de arquivos virtual em que o kernel expõe botões e opções para alterar e pesquisar a configuração do kernel. Você não pode alterar as permissões do arquivo. Acho que seu telefone Nexus está desbloqueado e enraizado. O circuito de carregamento provavelmente é baseado em um chip Maxim que pode ser configurado. Existem kernels alterados disponíveis que permitem anular a detecção de carregamento de energia. O inverso também deve ser possível. Você pode precisar corrigir e recompilar o kernel.
CE4
1
O Franco Kernel para o nexus 4 permite carregamento rápido, fontes estão disponíveis. talvez você pode ter um olhar para ele e descobrir como desligá-lo: github.com/franciscofranco
CE4

Respostas:

7

Eu apenas tentei e descobri que você precisa modificar um arquivo:
sys/class/power_supply/usb/device/charge

seu conteúdo padrão é '1', o que significa 'ativar cobrança', você precisa defini-lo como '0' para 'desativar a cobrança'

$ su

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

Eu testei no Nexus 4 e está funcionando com sucesso.

user3395818
fonte
Posso confirmar que echo 0 > /sys/class/power_supply/battery/charging_enabledfunciona para mim em um Sony Z1 Compact com CM11. Muito obrigado! :)
seanlano
Por favor note que a interface / sys é virtual e não persiste reboots
kevinf
3
adb shell dumpsys battery set ac 0; dumpsys battery set usb 0;
Nir Duan
fonte
2

Não tenho certeza se ele funcionará com o carregador de seu telefone específico, mas geralmente com cabos que transferem energia e dados, existem cabos separados dentro do cabo para energia e dados.

Não estou especialmente interessado em rasgar meu carregador de telefone para confirmar minha ideia, mas você pode tentar descascar parte do cabo, identificar e cortar os cabos de energia dentro do cabo e enrolá-lo novamente com fita isolante.

Provavelmente, existe uma maneira muito mais fácil de fazer isso, mas não estou ciente disso.


fonte
Geralmente, existem 4 pinos no USB - 2 para alimentação de 5v e 2 para dados.
NoBugs
1
Se você cortar o Vbus e o Ground, também interromperá o trabalho das linhas de dados. A conexão do cabo USB é detectada pela energia (consulte o conector A, os pinos de energia são um pouco mais longos para que eles se conectem primeiro).
Diidu
1

Tenho certeza de que não é algo que você possa alterar no software, pois o telefone seria carregado quando conectado a uma porta USB do computador. Você provavelmente precisaria sujar as mãos e fazer uma conexão curta ou duas no próprio telefone.

Mobilecrackers
fonte
Sim, isso também pode ser feito via software. Veja este aplicativo para o stopCharge
STiLLeN
1

Você pode usar o conjunto de baterias adb shell dumpsys usb 0; // para desativar o carregamento USB e

conjunto de bateria adb shell dumpsys usb 1; // para ativar o carregamento USB

Himanshu Rautela
fonte
1
Isso é fácil, mas infelizmente não desativa o carregamento. Apenas faz parecer que está desativado.
Diidu
0

Você pode resolver o problema no hardware, modificando os pinos no lado do conector micro-USB. Uma maneira óbvia é não conectar o Pin # 1 (VBUS) e a outra maneira é aterrar o Pin # 4 (ID) para fingir que seu host (PC) é um dispositivo OTG. Se você fizer isso, precisará desconectar o Pin # 1 (VBUS), caso contrário um dos seus dispositivos, se não os dois, será queimado.

Quanto à solução de linha de comando, você apenas precisa encontrar os /sys/...arquivos certos (dependentes do dispositivo) para jogar. Mas, como já mencionado, você precisa de acesso de gravação e permissões de root para alterá-las, e tudo o que fizer só durará até a próxima reinicialização ou alteração do periférico USB.

not2qubit
fonte
2
A solução de hardware sugerida está incorreta. Quase todos os telefones Android disponíveis no mercado têm um dispositivo USB que recebe a fonte de alimentação de hosts USB (por exemplo, laptops), funcionando assim no modo Acessório. Se você cortar a linha VBUS, a comunicação de dados USB deixará de funcionar. Eu testei isso sozinho. Eu diria o mesmo da outra maneira (pino de identificação), embora não o tenha testado. Você está certo sobre a solução de software, no entanto, nem todos os telefones Android têm os /sys/...arquivos necessários para isso (Nexus 4 sim, Nexus 5 não). Outra solução deve ser a alteração do comportamento do driver de carregamento no kernel.
Stillen
0

Semelhante à operação, meu host conectado via USB também é conectado como uma bateria fictícia. Não é possível simplesmente usar o cabo USB e nenhuma bateria, o Android não inicializa nem o USB fornece corrente suficiente.

Você não pode consertar isso no software, pois o Android usará o Vbus durante a inicialização. A menos que você também queira hackear o código do gerenciador de inicialização.

O circuito de carregamento precisa ser modificado para evitar o carregamento por USB ou o loop de tensão da bateria.

Eu confirmei no Galaxy S3 que requer um barramento de 5V para permitir que os dados (d + d-) façam parte do padrão USB.

OTG pode resolver o problema eletricamente, mas as regras do cliente host não estão corretas. Além disso, este telefone é capaz de carregar OTG e carregar (eu uso o cabo y + gamepad)

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

kevinf
fonte
Atualizará uma vez que eu descobrir o carregamento circuito muda
kevinf
0

Perguntei ao meu colega, especialista em driver de bateria. Em nosso Nut Pro 2, cuja versão do kernel é 4.4.21, o nó para carregamento da bateria on / off é: /sys/class/power_supply/battery/input_suspend.

Bao Haojun
fonte
0

você sempre pode usar um diodo shottky entre o pino 1 com o lado de bloqueio voltado para o acessório. Dessa forma, o pino recebe um sinal de 5V para que a comunicação funcione, mas NÃO haverá corrente fluindo do acessório para o seu telefone. ou, se desejar, coloque o diodo na direção diferente.

user300447
fonte
-1

Não, não é possível em dispositivos que ainda não estão enraizados. Ele usa o Settings.System com ADB_ENABLED, mas ADB_ENABLED é uma configuração de sistema seguro que não pode ser alterada por um aplicativo.

Sim, isso pode ser feito no telefone raiz.

É necessário adicionar uma permissão android.permission.WRITE_SECURE_SETTINGS. Sei que você deve estar se perguntando como fazer isso: Aqui está o link para um aplicativo semelhante: https://play.google.com/store/apps/details?id=com.jim2&hl=pt-BR

Ravindra Sahay
fonte
1
O que tem ADB_ENABLEDa ver com o carregamento USB? O aplicativo vinculado permite desativar o carregamento por USB?
Dan Hulme
O aplicativo permite que você desative o carregamento USB depois de alterar as configurações seguras de gravação.
Ravindra Sahay
"Meio que"? Quais são os passos a seguir?
Dan Hulme