This is an old revision of the document!
Table of Contents
Общие принципы работы SuperVOOC
Ток
SuperVOOC отличается от других протоколов зарядки тем, что увеличивает скорость зарядки не за счёт повышения напряжения, а за счёт увеличения тока. Увеличение тока требует качественного кабеля, поэтому SuperVOOC использует собственные кабели со встроенным чипом, который подтвержает телефону и зарядке готовность пропускать большие токи. Компании Oneplus/Oppo/Realme выпустили больше количество версий кабелей, у части имеется маркировка на манжете USB A разъема с указанием допустимого тока, а у других присутствует только ревизия - одна буква или вообще отсутствует маркировка. Несмотря на то, что сейчас прикладываются 10-12A кабели, никто не наблюдал потребление больше 8A.
Напряжение
За счет повышения тока SuperVOOCу не требуется регулятор напряжения, поэтому на выходе зарядки напряжение совпадает с напряжением, которое требуется аккумулятору. У флагманов была сделана еще одна доработка: двойная батарея, у которой каждая часть может заряжаться независимо, удваивая скорость. За счёт этого на телефон подается буквально удвоенное напряжение.
Используемые инструменты
Для измерения протокола SuperVOOC я использую:
- USB-тестер ChargerLab KM003C. Он умеет определять и пропускать SuperVOOC. Дальше его показания будут считаться объективными данными, снимаемыми с зарядки. Из тестера берется два параметра:
- Ток зарядки
- Напряжение зарядки
- Внутренний лог телефона, который я получаю на десктоп через поднятый по сети adb с помощью команды adb logcat. Из лога можно извлечь несколько категорий записей.
- Записи healthd. Это встроенный в Android менеджер аккумулятора, который логгирует процесс зарядки. Важно, что этот уровень использует низкоуровневый сервис от вендора, поэтому он видит несколько приукрашенную картинку. Например, он получает напряжение, приведенное к одной ячейке, видимо среднее значение от напряжения двух ячеек. В этом логе есть следующие параметры:
- Уровень зарядки l
- напряжение в mv v
- Температура t
- enum с здоровьем аккумулятора (здоров/убит) h
- emum со статусом аккумулятора (заряжается/разряжается) st
- ток аккумулятора как ток потребления - ток зарядки . Отрицательное значение соответствует зарядке. с
- максимальное значение заряженности в микро(!)ампер-часа. На самом деле похоже на константу fc
- число полных циклов зарядки за всё время жизни аккумулятора cc
- однобуквенный статус зарядки (проводная зарядка/usb-порт/беспроводная зарядка) chg
- Записи charge_time от сервиса vendor.oplus.hardware.charger-V7-service. Он знает истинную картину зарядки, разделяет зарядку по фазам SuperVOOC и CDP/DCP (стандартные USB 5V2A), а также ведет двойную бухгалтерию процентов заряженности soc (честный state of charge) и ui_soc (то, что отдается в healthd) и такую же двойную бугалтерию по времени до завершения зарядки (time to full charge): ttf и ui_ttf.
- У сервиса vendor.oplus.hardware.charger-V7-service есть еще записи типа read content, но их содержимое пока не расшифровано
Наличие нескольких источников разной степени доверия приводят к тому, что данные нужно сопоставлять между собой и становятся видны допустимые неточности в замерах и отметках времени. Так, при сопоставлении времен logcat и тестера приходилось сдвигать показания на секунды, после чего оказывалось, что точность отметок плывет.
