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ść.


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.


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


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.


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.


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


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.


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


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.


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.


-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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.