Wyłącz ładowanie USB

22

Z niektórych powodów niezwiązanych z żywotnością baterii muszę wyłączyć ładowanie baterii, gdy host USB jest podłączony do mojego telefonu (zrootowany Nexus 4). Rozglądając się po Internecie ( link1 , link2 ), wygląda na to, że powinienem zmodyfikować plik systemowy. Znalazłem szereg ciekawych plików znajdujących się w /sys/class/power_supply/batteryoraz /sys/class/power_supply/usb, że może być słuszne zostać zmodyfikowane w celu osiągnięcia wyłączenie USB do ładowania (np /sys/class/power_supply/usb/present 0/1).

Czy ktoś próbował czegoś takiego (kontrolować ładowanie USB za pomocą oprogramowania i modyfikować takie pliki systemowe)? Jaki jest najlepszy sposób modyfikacji tych plików systemowych? Czy powinienem używać powłoki adb lub innego narzędzia?

Próbowałem aplikacji „root explorer”, aby zmodyfikować te pliki, jednak kiedy zmodyfikowałem plik (po zmianie jego uprawnień), automatycznie przywrócono jego pierwotną wartość.

STYLIZACJA
źródło
2
Chociaż może to przyczynić się do pytania, ale nie jestem ciekawy, dlaczego chcesz wyłączyć ładowanie USB.
dotVezz,
Mam tutaj coś bardziej podobnego do systemu osadzonego: telefon (USB ACCESSORY) i element sprzętowy (USB HOST), podłączony przez USB. Bateria telefonu zasila podłączony sprzęt za pośrednictwem określonego połączenia (Vdd). Jednak USB HOST ma dostarczać (lub ładować) telefon przez linię VBUS USB. To, czego chcę uniknąć, to pętla ładowania między telefonem a podłączonym sprzętem. Mimo że dołączonym sprzętem jest HOST, to telefon z Androidem zasila cały system. Mam nadzieję, że moje wyjaśnienie było dla ciebie jasne.
STiLLeN
2
/ sys to wirtualny system plików, w którym jądro udostępnia pokrętła i przełączniki służące do zmiany i wyszukiwania konfiguracji jądra. Nie możesz zmienić uprawnień do plików. Myślę, że Twój telefon Nexus jest odblokowany i zrootowany. Obwód ładowania prawdopodobnie opiera się na układzie Maxim, który można skonfigurować. Dostępne są zmienione jądra, które umożliwiają zastąpienie wykrywania ładowania energii. Odwrotna powinna być również możliwa. Może być jednak konieczne załatanie i rekompilacja jądra.
ce4
1
Jądro Franco dla Nexusa 4 umożliwia szybkie ładowanie, dostępne są źródła. może możesz na to rzucić
ce4

Odpowiedzi:

7

Właśnie próbowałem i okazało się, że musisz zmodyfikować plik:
sys/class/power_supply/usb/device/charge

jego domyślna zawartość to „1”, co oznacza „włącz ładowanie”, musisz ustawić ją na „0”, aby „wyłączyć ładowanie”

$ su

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

Testowałem na Nexusie 4 i działa z powodzeniem.

użytkownik3395818
źródło
Mogę potwierdzić, że echo 0 > /sys/class/power_supply/battery/charging_enableddziała dla mnie, na Sony Z1 Compact z CM11. Dzięki wielkie! :)
seanlano
Należy pamiętać, że interfejs / sys jest wirtualny i nie utrzymuje się podczas
ponownego
3
adb shell dumpsys battery set ac 0; dumpsys battery set usb 0;
Nir Duan
źródło
2

Nie jestem pewien, czy będzie działać z ładowarką twojego telefonu, ale często z kablami, które przesyłają zarówno energię, jak i dane, wewnątrz kabla znajdują się osobne kable do zasilania i danych.

Nie jestem szczególnie zainteresowany podarciem ładowarki telefonu, aby potwierdzić mój pomysł, ale możesz spróbować zdjąć część kabla, zidentyfikować i przeciąć przewody zasilające wewnątrz kabla i owinąć go taśmą elektryczną.

Istnieje prawdopodobieństwo, że sposób łatwiejszy sposób na zrobienie tego, ale nie jestem tego świadomy.


źródło
Ogólnie w USB są 4 styki - 2 dla zasilania 5 V i 2 dla danych.
NoBugs
1
Przerwanie Vbus i uziemienia spowoduje również zatrzymanie linii danych. Wykryto połączenie kabla USB z zasilania (patrz złącze A, styki zasilania są nieco dłuższe, więc najpierw się połączą).
diidu
1

Jestem pewien, że nie jest to coś, co można zmienić w oprogramowaniu, ponieważ telefon ładowałby się po podłączeniu do portu USB komputera. Prawdopodobnie będziesz musiał ubrudzić sobie ręce i zewrzeć połączenie lub dwa na samym telefonie.

Mobilecrackers
źródło
Tak, można to również zrobić za pomocą oprogramowania. Spójrz na tę aplikację dla zrootowanego
STiLLeN
1

Możesz użyć zestawu baterii adb shell dumpsys usb 0; // do wyłączenia ładowania USB i

adb shell zestaw zrzutu baterii usb 1; // do włączenia ładowania USB

Himanshu Rautela
źródło
1
Jest to łatwe, ale niestety nie wyłącza ładowania. To tylko sprawia, że ​​wygląda na to, że jest wyłączone.
diidu
0

Możesz rozwiązać problem sprzętowo, modyfikując styki po stronie złącza micro-USB. Jednym oczywistym sposobem jest nie podłączenie styku nr 1 (VBUS), a drugim sposobem jest uziemienie styku nr 4 (ID), aby udawać, że twój host (PC) jest urządzeniem OTG. Jeśli to zrobisz, możesz mieć do odłączenia Pin # 1 (VBUS) w przeciwnym wypadku jeden, jeśli nie oba, z urządzeń będzie sparzyć.

Jeśli chodzi o rozwiązanie z linii poleceń, musisz tylko znaleźć odpowiednie (zależne od urządzenia) /sys/...pliki do gry. Ale jak już wspomniano, potrzebujesz dostępu do zapisu i uprawnień roota, aby je zmienić, a cokolwiek zrobisz, będzie trwać tylko do następnego ponownego uruchomienia lub zmiany urządzeń peryferyjnych USB.

not2qubit
źródło
2
Sugerowane rozwiązanie sprzętowe jest nieprawidłowe. Prawie każdy telefon z Androidem jest urządzeniem USB, które pobiera zasilanie z hostów USB (np. Laptopów), a zatem działa w trybie akcesoriów. Po odcięciu linii VBUS komunikacja danych USB przestaje działać. Sam to przetestowałem. Powiedziałbym to samo w drugą stronę (identyfikator PIN), mimo że go nie testowałem. Masz rację co do rozwiązania programowego, jednak nie wszystkie telefony z Androidem mają /sys/...niezbędne pliki (Nexus 4 tak, Nexus 5 nie). Innym rozwiązaniem powinna być zmiana zachowania sterownika ładowania na jądro.
STiLLeN
0

Podobnie jak w przypadku mojego hosta, który jest podłączony przez USB, jest również podłączony jako atrapa baterii. Nie można po prostu użyć kabla USB i bez baterii, Android nie uruchamia się, a USB nie zapewnia wystarczającej ilości prądu.

Nie można tego naprawić w oprogramowaniu, ponieważ Android będzie używał Vbus podczas rozruchu. Chyba że chcesz również zhakować kod programu ładującego.

Obwód ładowania należy zmodyfikować, aby uniknąć ładowania USB w stosunku do pętli napięcia akumulatora.

Potwierdziłem na Galaxy S3, że wymaga magistrali 5V, aby umożliwić przesyłanie danych (d + d-), to część standardu USB.

OTG może rozwiązać problem elektrycznie, ale wtedy reguły klienta hosta są nieprawidłowe. Również ten telefon może OTG i ładować (używam kabla Y + gamepad)

Edytuj odniesienie: https://forum.xda-developers.com/showthread.php?t=1863303

kevinf
źródło
Zaktualizuje się, gdy
odkryję
0

Zapytałem mojego kolegę, który jest ekspertem w dziedzinie sterowników akumulatorów. Na naszej Nut Pro 2, którego jądro jest w wersji 4.4.21, węzeł do ładowania akumulatora on / off jest: /sys/class/power_supply/battery/input_suspend.

Bao Haojun
źródło
0

zawsze możesz użyć strzelającej diody między stykiem 1, stroną blokującą w stronę akcesorium. w ten sposób pin otrzymuje sygnał 5 V, więc komunikacja działa, ale z akcesoriów do Twojego telefonu nie będzie prądu. lub jeśli chcesz inaczej, po prostu umieść diodę w innym kierunku.

użytkownik300447
źródło
-1

Nie, nie jest to możliwe na urządzeniach, które nie są jeszcze zrootowane. Używa Settings.System z ADB_ENABLED, ale ADB_ENABLED jest Bezpiecznym Ustawieniem Systemowym, którego aplikacja nie może zmienić.

Tak, można to zrobić na zrootowanym telefonie.

Konieczne jest dodanie uprawnienia android.permission.WRITE_SECURE_SETTINGS. Wiem, że pytasz, jak to zrobić: Oto link do podobnej aplikacji: https://play.google.com/store/apps/details?id=com.jim2&hl=pl

Ravindra Sahay
źródło
1
Co to ADB_ENABLEDma wspólnego z ładowaniem USB? Czy aplikacja, którą łączysz, pozwala wyłączyć ładowanie USB?
Dan Hulme
Aplikacja pozwala wyłączyć ładowanie USB po zmianie bezpiecznych ustawień zapisu.
Ravindra Sahay
„Kinda”? Jakie kroki należy wykonać?
Dan Hulme