Вимкнути зарядку через USB


22

З якихось причин, не пов’язаних із часом автономної роботи, мені потрібно відключити зарядку акумулятора, коли до мого телефону підключено USB-хост (вкорінений Nexus 4). Поглянувши навколо в Інтернеті ( link1 , link2 ), схоже , я повинен змінити системний файл. Я знайшов низку цікавих файлів, розташованих у, /sys/class/power_supply/batteryі /sys/class/power_supply/usb, які можуть бути правильні для зміни, щоб досягти відключення зарядки usb (наприклад /sys/class/power_supply/usb/present 0/1).

Хтось пробував щось подібне (контролювати зарядку через usb за допомогою програмного забезпечення та змінювати такі системні файли)? Який найкращий спосіб змінити ці системні файли? Чи варто використовувати оболонку adb або інший інструмент?

Я спробував додаток "дослідити корінь", щоб змінити ці файли, проте коли я змінив файл (після зміни його дозволів), він автоматично зберігався до його початкового значення.


2
Хоча це може чи не сприяє питанню, мені цікаво, чому ви хочете відключити зарядку через USB.
dotVezz

У мене тут щось більше схоже на вбудовану систему: телефон (USB АКСЕСОРІЯ) та апаратне забезпечення (USB HOST), підключене через USB. Акумулятор телефону постачає додане обладнання через певне з'єднання (Vdd). Однак USB HOST повинен постачати (або заряджати) телефон через лінію VBUS USB. Чого я хочу уникати, це замикання між телефоном та приладдям обладнання. Незважаючи на те, що додається апаратне забезпечення хост, це Android-телефон, який постачає всю систему. Сподіваюся, моє пояснення було вам зрозумілим.
STiLLeN

2
/ sys - це віртуальна файлова система, де ядро ​​відкриває ручки та перемикачі для зміни та пошуку конфігурації ядра. Ви не можете змінити права доступу до файлів. Я здогадуюсь, ваш телефон Nexus розблокований і вкорінений. Схема зарядки, ймовірно, заснована на чіпі Maxim, який може бути налаштований. Є доступні змінені ядра, які дозволяють переосмислити виявлення для заряджання живлення. Зворотний також повинен бути можливим. Можливо, вам потрібно буде виправити і перекомпілювати ядро.
ce4

1
Franco Kernel для nexus 4 дозволяє швидко заряджатися, доступні джерела. можливо, ви можете подивитися і зрозуміти, як його вимкнути: github.com/franciscofranco
ce4

Відповіді:


7

Я щойно спробував і виявив, що вам потрібно змінити файл:
sys/class/power_supply/usb/device/charge

його вміст за замовчуванням - "1", що означає "включити зарядку", потрібно встановити його на "0", щоб "відключити зарядку"

$ su

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

Я тестував Nexus 4 і він працює успішно.


Я можу підтвердити, що це echo 0 > /sys/class/power_supply/battery/charging_enabledпрацює для мене на Sony Z1 Compact з CM11. Дуже дякую! :)
seanlano

Зауважте, що інтерфейс / sys є віртуальним і не зберігається перезавантаженням
kevinf


2

Я не впевнений, чи спрацює це із зарядним пристроєм вашого телефону, але часто з кабелями, що передають живлення та дані, всередині кабелю є окремі шнури для живлення та даних.

Мене не особливо цікавить розірвати зарядний пристрій для підтвердження своєї ідеї, але ви можете спробувати зняти частину кабелю, визначити та розрізати шнури живлення всередині кабелю та обернути їх електричною стрічкою.

Існує ймовірно спосіб простіше засіб зробити це, але я не знаю про це.


В USB загалом є 4 штирі - 2 для живлення 5 В і 2 для передачі даних.
NoBugs

1
Якщо вирізати Vbus та Ground, це також зупинить роботу ліній даних. Підключення кабелю USB виявлено від живлення (див. A-роз'єм, штифти живлення трохи довші, тому вони підключуються спочатку).
діду

1

Я впевнений, що це не те, що ви можете змінити в програмному забезпеченні, оскільки заряджатимуться телефоном під час підключення до порту USB комп'ютерів. Можливо, вам, можливо, доведеться забруднити руки та короткий зв’язок або два на самому телефоні.


Так, це також можна зробити за допомогою програмного забезпечення. Подивіться на цю програму для вкоріненої зупинки
STiLLeN

1

Ви можете використовувати adb shell dumpsys battery set usb 0; // для відключення зарядки через USB та

adb shell dumpsys battery set usb 1; // для включення зарядки через USB


1
Це легко, але, на жаль, не відключає зарядку. Це лише робить його схожим на його відключення.
діду

0

Вирішити проблему можна апаратним шляхом, змінивши штифти на стороні роз'єму micro-USB. Один із очевидних способів - не підключати PIN-код №1 (VBUS), а інший спосіб - заземлити контакт №4 (ID), щоб зробити вигляд, що ваш хост (ПК) є пристроєм OTG. Якщо ви зробите це, вам доведеться відключити PIN-код №1 (VBUS), інакше один, якщо не обидва, ваші пристрої згорять.

Що стосується рішення командного рядка, вам просто потрібно знайти потрібні (залежні від пристрою) /sys/...файли, з якими можна грати. Але, як уже згадувалося, для їх зміни потрібні дозволи доступу на запис і root, і все, що ви зробите, триватиме лише до наступної перезавантаження або зміни периферійного USB.


2
Пропоноване апаратне рішення невірно. Практично на кожному телефоні Android є USB-пристрій, який отримує живлення від USB-хостів (наприклад, ноутбуків), таким чином працює в режимі аксесуарів. Якщо ви перерізаєте лінію VBUS, передача даних через USB перестає працювати. Я сам це перевірив. Я б сказав те саме і для іншого способу (ідентифікаційний штифт), хоча я не перевіряв цього. Ви маєте рацію щодо програмного рішення, проте не всі телефони Android мають /sys/...файли, необхідні для цього (Nexus 4 так, Nexus 5 ні). Іншим рішенням має стати зміна поведінки драйверів зарядки в ядро.
STiLLeN

0

Як і оп, мій Хост, який підключений через USB, також підключений як фіктивний акумулятор. Не можна просто використовувати USB-кабель і немає акумулятора, андроїд не завантажуватиметься, а також USB не забезпечує достатню кількість струму.

Ви не можете виправити це в програмному забезпеченні, оскільки Android буде використовувати Vbus під час завантаження. Якщо ви також не хочете зламати код завантажувача.

Схема зарядки повинна бути модифікована, щоб уникнути зарядки usb від циклу напруги акумулятора.

Я підтвердив, що на Galaxy S3 йому потрібна шина 5 В для ввімкнення даних (d + d-), що є частиною стандарту USB.

OTG може вирішити проблему електричним шляхом, але тоді правила головного клієнта не є правильними. Також цей телефон здатний OTG та заряджати (я використовую y-кабель + геймпад)

Редагувати посилання: https://forum.xda-developers.com/showthread.php?t=1863303


Буде оновлено, як тільки я
з’ясую

0

Я запитав свого колегу, хто є знавцем водія акумулятора. На нашому Нут Pro 2, ядро якого версія 4.4.21, вузол для зарядки акумулятора включення / вимикання: /sys/class/power_supply/battery/input_suspend.


0

Ви завжди можете використовувати діод вистрибний між штифтом 1 із сторони, що блокує, до аксесуара. таким чином контактний сигнал отримує сигнал 5 В, щоб зв’язок працював, але від Аксесуара до вашого телефону НЕ буде струму. або якщо ви хочете іншим способом, просто поставте діод в іншому напрямку.


-1

Ні, це неможливо на пристроях, які ще не вкоренилися. Він використовує Settings.System з ADB_ENABLED, але ADB_ENABLED - це налаштування безпечної системи, яке не може бути змінено програмою.

Так, це можна зробити на вкоріненому телефоні.

Потрібно додати дозвіл android.permission.WRITE_SECURE_SETTINGS. Я знаю, що ви б запитали, як це зробити: Ось посилання на подібний додаток: https://play.google.com/store/apps/details?id=com.jim2&hl=uk


1
Що ADB_ENABLEDстосується зарядки через USB? Чи дозволяє додаток, до якого ви посилаєтеся, відключити зарядку через USB?
Дан Хулм

Програма начебто дозволяє відключити зарядку usb після зміни налаштувань захисту.
Равіндра Сахай

"Щось"? Які кроки слід виконувати?
Дан Хулм
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.