Rockchip · AI & Linux Hub

Linux и загрузка

Полное руководство измерителя заряда RK818/RK816: зарядка, DTS, калибровка и диагностика

Полное руководство измерителя заряда RK818/RK816: зарядка, DTS, калибровка и диагностика — V2.2.0

· ArmSoM Editorial · Rockchip source documentation · 19 мин чтения

Китайский оригинал V2.2.0; ядра 3.10 / 4.4 / 4.19. Сохранена область технического предисловия: понятия, функции, конфигурация и диагностика модулей. Английского PDF во входных материалах нет; четыре языка полностью основаны на китайском оригинале и используют его технические рисунки, если они есть. Только платформенный справочник ArmSoM: сверяйте PMIC, SoC, SDK/BSP, ядро, питание и батарею конкретной платы. Аппаратных испытаний не было; поддержка всех плат не заявляется.

Код, параметры и журналы — примеры производителя, не измерения ArmSoM. Изменение питания, зарядного тока, напряжения или тепловой защиты может вызвать отключение, повреждение или опасность батареи. Не копируйте настройки вслепую; не отключайте тепловую защиту при обычной работе. Противоречия сохранены без угадывания констант; см. запись сверки. Оригинал содержит слитные OCV 38163836/39714002, compatible без точек с запятой/с фигурными кавычками и 21IRQ_TYPE_LEVEL_LOW. Также спорны bat_res в омах при 120, число NTC/диапазон, design_qmax 4100 против ×1.1 и направление parameter3 temperature_chrg_table. Это оригинальные, не готовые безопасные или компилируемые настройки.

ArmSoM Docs · Rockchip kernel

1. Обзор RK818/RK816 измеритель заряда

RK818/RK816 — высокопроизводительный PMIC с несколькими мощными DCDC и LDO, одним линейным ключом, выходом USB 5V и boost, импульсной зарядкой, интеллектуальным управлением путями питания, счётчиком кулонов, RTC и настраиваемым порядком включения. Здесь рассматриваются импульсная зарядка, пути питания и измеритель заряда (счётчик кулонов).

  1. Управление зарядкой включает ограничение входного тока, подзарядку малым током, зарядку постоянным током/напряжением, завершение зарядки и защиту по превышению времени зарядки.

  2. Интеллектуальное управление путями питания регулирует выходное напряжение для питания системы одновременно с зарядкой батареи. При ограничении входного тока мощность сначала поступает системе, а остаток — батарее. Если нагрузка превышает ограниченную входную мощность либо вход отключён, автоматически включается ключ батарея–система, и батарея обеспечивает дополнительную мощность.

  3. Измеритель заряда (счётчик кулонов) использует запатентованный алгоритм производителя и характеристики заряда/разряда батареи для измерения заряда и передачи данных системному чипу по I2C. Предусмотрены также зарядка переразряженных батарей малым током, измерение температуры батареи, таймер безопасности и тепловая защита чипа.

2. Принципы измерения заряда

  1. Три основных принципа:

(1) Кривая напряжения холостого хода/доли заряда (OCV-SOC) определяется прежде всего материалами и технологией батареи. По утверждению оригинала температура и старение влияют мало, поэтому SOC-OCV после изготовления практически неизменна.

(2) Поляризация при работе мешает вычислять OCV по напряжению выводов. Пригодное OCV получают только без поляризации, например после длительного выключения или работы малым током; затем по OCV определяют SOC.

(3) Счётчик кулонов измеряет вошедший/вышедший заряд. При известной полной ёмкости легко найти SOC, но накапливается большая ошибка, а ёмкость меняется с температурой и старением. Поэтому высокая точность сохраняется лишь кратковременно, и полную ёмкость нужно периодически обновлять.

Хорошие измерители объединяют оценку OCV и подсчёт кулонов для текущей остаточной ёмкости.

  1. Подсчёт кулонов

Последовательно у выводов батареи устанавливают измерительный резистор. Ток создаёт V_delta, по которому рассчитывают ток батареи. Оригинал заявляет отслеживание изменений заряда с точностью до 1%. Учёт напряжения и температуры уменьшает влияние старения и других факторов.

  1. Подготовка сигнала тока

Ток измеряют резистором 20 или 10 миллиом. Смещение от источника постоянного тока переводит отрицательный сигнал в положительный диапазон; операционный усилитель усиливает его до диапазона Vref, а ADC оцифровывает.

  1. Измерение напряжения

Делитель с коэффициентом 0.5 переводит напряжение батареи в диапазон Vref, затем ADC выдаёт цифровое значение.

  1. Измерение среднего тока

Цифровая часть суммирует скорректированный ток в многоразрядном аккумуляторе 256 раз в секунду. В конце секунды деление суммы на 256 даёт средний ток.

  1. Обновление счётчика кулонов

При каждом обновлении среднего тока автоматически выполняется одно накопление.

3. Важные понятия

Напряжение OCV: напряжение холостого хода. PMIC измеряет его при последовательности включения, когда нагрузка очень мала и близка к разомкнутой цепи; оригинал считает его точным. После выключения минимум на 30 минут поляризация считается практически устранённой; OCV используют для поиска в ocv_table, обновления заряда и коррекции счётчика кулонов.

ocv_table: у каждой батареи своя характеристика. Диапазон 0%–100% разбит на 21 точку с шагом 5%, каждой соответствует OCV. Таблица напряжение–заряд служит для коррекции при первом запуске после подключения батареи, после длительного выключения и сна. Пример:

ocv_table = <3400 3599 3671 3701 3728 3746 3762  ......  4088 4132 4183>;

Соответствие: 3400mv → 0%, 3599mv → 5%, 3671mv → 10%, …, 4183mv → 100%.

Максимальные входной и зарядный токи: максимальный разрешённый программой ток адаптера — «максимальный входной ток». Для 5V/2A обычно задают 2A, либо, например, 1.8A. Управление путями RK818/816 сначала питает систему, остаток идёт в батарею. Максимальный разрешённый остаточный ток в батарею — «максимальный зарядный ток».

Ограничение входного тока: суммарный запрос системы и батареи превышает максимум, входной мощности недостаточно. Иначе говоря, батарею невозможно заряжать максимальным током при требуемых условиях. Это один из трёх критериев завершения наряду с конечными напряжением и током.

Режим relax: при очень малой нагрузке (пока только ожидание второго уровня), если ток остаётся ниже порога заданное программой время, измеритель входит в relax — приближение холостого хода.

Напряжение relax: в этом режиме набор напряжений измеряется каждые 8 минут. Из-за малой нагрузки ожидания второго уровня его считают близким к OCV. После пробуждения при определённых условиях драйвер использует его и ocv_table для коррекции счётчика.

finish: при завершении зарядки регистр формирует сигнал finish. Только получив его, программа признаёт аппаратное завершение зарядки и запускает соответствующую корректировку отображаемого заряда.

Тепловая защита чипа:

Это обратная связь самозащиты PMIC. Выше заданной температуры аппаратно постепенно уменьшается входной ток, снижая нагрузку и нагрев. Программа не участвует, фиксированного соотношения температуры и тока нет; в крайних условиях зарядка может остановиться.

Условия завершения: ток достиг конечного значения, напряжение достигло конечного значения, ограничения входного тока нет. Формируется сигнал, зарядка прекращается, батарея считается полной. Проверка ограничения отличает настоящее снижение зарядного тока от малого тока из-за большой нагрузки системы.

4. Драйверы и menuconfig

4.1 Функции драйвера измерителя

  1. Учёт и отображение заряда батареи.

  2. Настройка тока/напряжения по батарее и типу зарядного устройства; один/два зарядных порта.

  3. Питание OTG напряжением 5V.

  4. Измерение температуры батареи.

4.2 ядро 3.10

Драйвер RK818 и символы конфигурации:

CONFIG_BATTERY_RK818
drivers/power/rk818_battery.c           // 负责处理电量显⽰ + 充电器检测、充电电压、电流设置

Драйвер RK816 и символы конфигурации:

CONFIG_BATTERY_RK816
drivers/power/rk816_battery.c           // 负责处理电量显⽰ + 充电器检测、充电电压、电流设置

4.3 ядро 4.4

Драйверы RK818 и символы конфигурации (из-за большого объёма функций разделены на два драйвера):

CONFIG_BATTERY_RK818
CONFIG_CHARGER_RK818
drivers/power/rk818_battery.c           // 负责处理电量显⽰
drivers/power/rk818_charger.c           // 负责处理充电器检测、充电电压、电流设置

Драйвер RK816 и символы конфигурации:

CONFIG_BATTERY_RK816
drivers/power/rk816_battery.c           // 负责处理电量显⽰ + 充电器检测、充电电压、电流设置

4.4 ядро 4.19

Драйвер RK818 и символы конфигурации:

CONFIG_BATTERY_RK818
CONFIG_CHARGER_RK818
drivers/power/supply/rk818_battery.c    // 负责处理电量显⽰
drivers/power/supply/rk818_charger.c    // 负责处理充电器检测、充电电压、电流设置

Драйвер RK816 и символы конфигурации:

CONFIG_BATTERY_RK816
drivers/power/supply/rk816_battery.c    // 负责处理电量显⽰ + 充电器检测、充电电压、电流设置

5. Конфигурация DTS

5.1 ядро 3.10

Узлы RK816 и RK818 в основном одинаковы, различаются отдельные свойства. Ниже полный пример battery для RK818, помещаемый внутри узла RK818. ntc_table, ntc_degree_from, dc_det_gpio и dc_det_adc необязательны; остальные обязательны.

battery {
    compatible = "rk818-battery"  // 如果是rk816,则改成"rk816-battery"
    ocv_table = <3400 3599 3671 3701 3728 3746 3762
                 3772 3781 3792 38163836 3866 3910
                 3942 39714002 4050 4088 4132 4183>;
    ntc_table = <43662 41676 39793 38005 36308 34696 33164
                 31709 30326 29011 27760 26570 25438 24361
                 23335 22358 21427 20540 19695 18890 18121
                 17389 16690 16022  14778 14197 13642 13113
                 12606 12122 11659 11216 10793 10388 10000
                 9629 9273 8933 8607 8295>;
    ntc_degree_from = <1 10>;
    design_capacity = <4000>;
    design_qmax = <4100>;
    bat_res = <120>;
    max_input_current = <2000>;
    max_chrg_current = <1800>;
    max_chrg_voltage = <4200>;
    sleep_enter_current = <300>;
    sleep_exit_current = <300>;
    sleep_filter_current = <100>;   // rk818不需要这个属性
    power_off_thresd = <3400>;
    zero_algorithm_vol = <3850>;
    energy_mode = <0>;
    fb_temperature = <105>;
    max_soc_offset = <60>;
    monitor_sec = <5>;
    virtual_power = <0>;
    power_dc2otg = <1>;
    dc_det_gpio = <&gpio0 GPIO_C1 GPIO_ACTIVE_LOW>;
    dc_det_adc = <1>;   // rk818不需要这个属性,rk816才可能需要
};

5.2 ядро 4.4

Конфигурация DTS RK818

  1. battery: обязательно. Полный узел ниже помещается внутрь RK818; данные используют дочерние драйверы battery и charger. ntc_table, ntc_degree_from, temperature_chrg_table и dc_det_gpio необязательны, остальные обязательны.
battery {
    compatible = “rk818-battery”
    ocv_table = <3400 3599 3671 3701 3728 3746 3762
                3772 3781 3792 38163836 3866 3910
                3942 39714002 4050 4088 4132 4183>;
    ntc_table = <43662 41676 39793 38005 36308 34696 33164
                 31709 30326 29011 27760 26570 25438 24361
                 23335 22358 21427 20540 19695 18890 18121
                 17389 16690 16022  14778 14197 13642 13113
                 12606 12122 11659 11216 10793 10388 10000
                 9629 9273 8933 8607 8295>;
    ntc_degree_from = <1 10>;
    temperature_chrg_table = <0 10 1000 1>, <0 20 1200 2>, <1 30 1400 5>, <0 40
700 3>;
    design_capacity = <4000>;
    design_qmax = <4100>;
    bat_res = <120>;
    max_input_current = <2000>;
    max_chrg_current = <1800>;
    max_chrg_voltage = <4200>;
    sleep_enter_current = <300>;
    sleep_exit_current = <300>;
    power_off_thresd = <3400>;
    zero_algorithm_vol = <3850>;
    energy_mode = <0>;
    fb_temperature = <105>;
    sample_res = <10>;
    max_soc_offset = <60>;
    monitor_sec = <5>;
    virtual_power = <0>;
    power_dc2otg = <1>;
    dc_det_gpio = <&gpio0 GPIO_C1 GPIO_ACTIVE_LOW>;
};
  1. charger: необязательно. Без зарядки Type-C конфигурация не нужна. При Type-C добавьте под корневым узлом RK818 ссылку extcon = <&fusbn>, где n=0,1,… соответствует аппаратуре. rk818_charger.c регистрирует по ней цепочку уведомлений Type-C для определения типа зарядного устройства. Пример:
rk818: pmic@1c {
    compatible= "rockchip,rk818";
    status= "okay";
    reg= <0x1c>;
    clock-output-names= "xin32k", "wifibt_32kin";
    interrupt-parent= <&gpio1>;
    interrupts = <21IRQ_TYPE_LEVEL_LOW>;
    pinctrl-names= "default";
    pinctrl-0= <&pmic_int_l>;
    rockchip,system-power-controller;
    rk818,support_dc_chg= <1>;/*1: dc chg; 0:usb chg*/
    wakeup-source;
    extcon = <&fusb0>;      // 重要!!!
    #clock-cells= <1>;

    battery {
            ...........
            ...........
    };
};

DTS RK816: см. RK818 выше. Отличие: нужен только узел battery, без конфигурации charger.

5.3 ядро 4.19

См. конфигурацию ядра 4.4.

5.4 Описание параметров DTS

Описание ниже относится ко всем версиям ядра, но поддерживаемые свойства смотрите в примерах соответствующей версии.

ocv_table: таблица напряжение холостого хода–заряд, 21 напряжение для 0%–100% с шагом 5%. Данные предоставляет изготовитель батареи либо измеряет подразделение Rockchip Shenzhen; обратитесь к соответствующим инженерам.

ntc_table:

Таблица сопротивлений NTC батареи в омах. Заполняется для измерения температуры; одно значение соответствует одной температуре, шаг слева направо 1°C. Если измерение не нужно, удалите свойство. Пример охватывает -10°C…30°C.

ntc_degree_from / ntc_degree_from_v2: начальная температура ntc_table[0] в °C, задаётся вместе с ntc_table.

  • Ядра 3.10/4.4: ntc_degree_from, два поля — знак (1 минус, 0 плюс) и модуль. Примеры оригинала ntc_degree_from = <1, 10> означают -10°C, <0, 10> — 10°C.
  • Ядро 4.19: одно поле ntc_degree_from_v2; ntc_degree_from_v2 = <(-10)> — -10°C, <10> — 10°C.

temperature_chrg_table / temperature_chrg_table_v2: одна или несколько групп температура/ток зарядки. Вне диапазонов используются max_input_current и max_chrg_current. Ненужное свойство удалите. Функция добавлена позднее: проверьте, разбирает ли её фактический драйвер.

Ядро 4.4 использует temperature_chrg_table, только RK818. Формат: temperature_chrg_table = <parameter1 parameter2 parameter3 parameter4>, .... parameter1 — знак (1 минус, 0 плюс); parameter2 — модуль температуры; parameter3 — ток; parameter4 — отклонение температуры. Оригинал утверждает, что положительный parameter3 задаёт отклонение вверх, отрицательный — вниз (см. замечание о противоречии). Пример temperature_chrg_table = <0 10 1000 2>, <1 30 1400 5>;: <0 10 1000 2> — [10, 12], 1000mA; <1 30 1400 5> — [-35, -30], 1400mA.

Ядро 4.19 использует temperature_chrg_table_v2 для RK818/RK816. Формат <parameter1 parameter2 parameter3>: нижняя температура, верхняя температура, ток. Пример temperature_chrg_table_v2 = <(-40) 10 850>, <22 33 1000>, <40 55 1400>;: [-40, 10] → 850mA; [22, 33] → 1000mA; [40, 55] → 1400mA.

design_capacity: измеренная доступная ёмкость. Для номинальных 4000mah при измеренных 3850mah введите 3850.

design_qmax: максимальная ёмкость, один из критериев программной коррекции ошибок. Задайте номинальную ёмкость ×1.1.

bat_res: внутреннее сопротивление батареи, в оригинале единица — ом. Важно для алгоритма разряда; измеряется вместе с ocv_table, не пропускайте.

max_input_current: максимальный входной ток, ступени (mA):

RK818: <450, 80, 850, 1000, 1250, 1500, 1750, 2000, 2250, 2500, 2750, 3000>
RK816: <450, 80, 850, 1000, 1250, 1500, 1750, 2000>

Вторая ступень — 80, не 800! В обычной работе ступень 80mA обычно не выбирают.

max_chrg_current: максимальный зарядный ток, ступени (mA):

RK818: <1000, 1200, 1400, 1600, 1800, 2000, 2250, 2400, 2600, 2800, 3000>
RK816: <1000, 1200, 1400, 1600, 1800, 2000, 2250, 2400>

max_chrg_voltage: максимальное зарядное напряжение, порог завершения полного заряда. Ступени (mV):

RK818: <4050, 4100, 4150, 4200, 4250, 4300, 4350>
RK816: <4050, 4100, 4150, 4200, 4250, 4300, 4350>

sleep_enter_current: условие входа в relax; сейчас 300, не менять.

sleep_exit_current: условие выхода; сейчас 300, не менять.

sleep_filter_current: фильтрация недостоверного тока relax; сейчас 100, не менять.

power_off_thresd — внимательно: желаемое напряжение выключения в mV. Это мгновенное VSYS, не vbat, хотя измеритель считывает vbat! Между vbat и VSYS системы стоит MOS-транзистор около 50 миллиом плюс сопротивление дорожек, поэтому ориентиром является VSYS. При одинаковом vbat больший ток снижает VSYS; при одинаковом VSYS большему току соответствует больший vbat. Rockchip не рекомендует VSYS ниже 3.4v из-за нестабильности последующего VCC_IO (обычно 3.3v). Если максимальная последующая линия от VSYS рассчитана на 3.0v, порог выключения может быть ниже 3.4v.

zero_algorithm_vol: порог mV для совместного алгоритма разряда по напряжению и счётчику кулонов. Ниже него используются оба. Рекомендация оригинала: 3850mv для батарей 4.2v, 3950mv для 4.3v и выше.

energy_mode:

Одним важна плавность кривой, другим полный разряд; совместить трудно. 1 предпочитает использование всего заряда, 0 — плавность (например, при заданных 3.4v выключение иногда происходит на 3.5v). Драйвер уже балансирует эти цели; рекомендуется 0. Если испытания показывают неприемлемый порог, попробуйте 1 либо обратитесь к сопровождающему драйвера.

fb_temperature: порог тепловой защиты чипа, четыре ступени (°C):

< 85, 95, 105, 115>

В оригинале для VR выбрано 115, для остальных — 105. Значение 0 отключает тепловую обратную связь и упомянуто только для поиска неисправностей (исходная ссылка «1.5 Анализ проблем»). При нормальной эксплуатации отключать её категорически нельзя.

sample_res — внимательно: измерительное сопротивление со стороны батареи в миллиомах. По нему счётчик определяет ток; задайте фактически установленное. Поддерживаются только 20mR (по умолчанию) и 10mR (нужна поддержка драйвера). Ядра 4.4/4.19 для RK818/RK816 поддерживают оба. Для 3.10 нужны коммиты:

fdc31b1 power: rk818-battery: support different ohm sample resistor
0f23c4b power: rk816-battery: support different ohm sample resistor

Обычно используется 20mR. При 10mR диапазон max_chrg_current удваивается:

// rk816
10mR: [2000, 2400, 2800, 3200, 3600, 4000, 4500, 4800]
20mR: [1000, 1200, 1400, 1600, 1800, 2000, 2250, 2400]
// rk818
10mR: [2000, 2400, 2800, 3200, 3600, 4000, 4500, 4800, 5200, 5600, 6000]
20mR: [1000, 1200, 1400, 1600, 1800, 2000, 2250, 2400, 2600, 2800, 3000]

Даже при удвоенном диапазоне задавайте фактический max_chrg_current: для 4000mA — 4000. Резистор 10mR удваивает диапазон, но также ошибку измерения тока/заряда (mAh). Удвоение теоретическое: некоторые токи недостижимы из-за преобразования мощности. Для зарядного устройства 5V/2A:

5V * 2A = U_bat * I_bat

При минимальном U_bat=3.4v максимальный I_bat равен 2.94A, лишь без потерь и при передаче всей мощности батарее. В действительности адаптер сначала питает систему; учитывать нужно также насыщение батареи.

max_soc_offset:

Максимально допустимое расхождение заряда при стартовой коррекции. После выключения минимум на 30 минут при запуске оценивают OCV и сравнивают с зарядом перед выключением. Если разница выше max_soc_offset, отображение принудительно заменяется значением OCV. Например, 20% сразу становятся 80%, если OCV даёт 80%. Большие ошибки часто следуют за зависанием. Значение выбирается по допустимости; ниже 60 не рекомендуется.

monitor_sec: период опроса в секундах. Измерителю нужны постоянный опрос и много обращений I2C; из-за различий устойчивости I2C период настраивается. Рекомендация 5–10s, лучше 5s.

virtual_power: режим фиктивной батареи для тестов. Устройство без батареи может питаться от 5V/2A, но измеритель интегрирует ток по времени, а не только напряжение. При постоянных 5V показание всё равно может падать до 0%. В стресс-тестах режим позволяет избежать отключения/проблем питания из-за заряда и ограничений тока. 1 снимает ограничение зарядного тока и держит вход на max_input_current; Android всегда получает состояние зарядки 66%.

power_dc2otg: питание OTG 5v прямо от DC. При поддержке в двухпортовой схеме DC питает OTG вместо дополнительного выхода RK818. 1 — поддерживается, иначе 0, включая отсутствие DC-порта.

dc_det_gpio: GPIO обнаружения DC; удалить, если не используется.

dc_det_adc: обнаружение DC через SARADC, 1 — да, 0 — нет. Обычно выбирают это либо dc_det_gpio; используется только RK816.

5.5 Важные замечания

Полностью отключить зарядку нельзя. RK818/RK816 CHRG_CTRL_REG1[7]:CHRG_EN предназначен для включения/выключения зарядки, но аппаратная функция неисправна и нормально неприменима. Никогда не задавайте 0: нехватка питания может вызвать нестабильность. Обходы оригинала: RK818 — ограничить вход до 80mA для минимальной зарядки, без полного решения; RK816 — 80mA либо BAT_CTRL_REG[6]:USB_SYS_EN=0, полностью отключающий вход адаптера.

Версии ядра используют разные DTS-свойства: ntc_degree_from, ntc_degree_from_v2, temperature_chrg_table, temperature_chrg_table_v2.

Температурная политика тока (лишь при поддержке temperature_chrg_table_v2):

  1. При ntc_table температура выше/ниже границ ограничивает входной ток до 80mA. CHRG_EN не может запретить зарядку, поэтому она лишь минимизируется.

  2. При temperature_chrg_table либо temperature_chrg_table_v2 ток задаётся диапазоном. Если он ниже минимальной ступени PMIC, вместо этого ограничивают входной ток. Вне ограничиваемых диапазонов настройки определяются max_input_current, max_chrg_current и типом адаптера.

  3. Требования к температуре различаются; драйвер можно адаптировать.

6. Разработка измерителя заряда

6.1 Подготовка

  1. Измерьте OCV и внутреннее сопротивление конкретной батареи; оригинал указывает возможность таких измерений в Rockchip Shenzhen.

  2. Заполните DTS по предыдущим разделам.

  3. Откалибруйте батарею согласно соответствующим разделам.

  4. Начните обычное использование.

6.2 Обработка проблем

  1. При аномалии сразу включите отладку, соберите журнал события и проанализируйте.

  2. При скачках или слишком быстром/медленном изменении кривой соберите полный журнал заряда/разряда (0%–100% либо 100%–0%; максимально широкий диапазон).

  3. Если причина неясна, приложите журнал события/воспроизведения в Redmine.

Обязательно включите отладку измерителя до сбора журнала! См. раздел анализа типовых проблем.

7. Калибровка батареи

7.1 Принципы калибровки батареи

  1. Выключение отключает DCDC/LDO, но не весь PMIC: он остаётся под питанием с малой нагрузкой. Свободные data-регистры хранят заряд, ёмкость счётчика и полную ёмкость (design_capacity) перед выключением. При старте драйвер читает и повторно использует их, а не значения DTS.

  2. Для коррекции этих трёх значений нужно полностью обесточить PMIC и очистить данные. При следующем включении устанавливается GGSTS_REG[4] («первое включение»). Для этого отсоединяют батарею.

  3. После подключения драйвер распознаёт первое включение, заново берёт данные DTS и рассчитывает ёмкость/заряд, получая откалиброванное состояние.

  4. Перед подключением убедитесь, что поляризация в основном исчезла; при необходимости дайте батарее отстояться. После снятия при большой нагрузке напряжение постепенно восстанавливается. Немедленное подключение даёт неверное OCV. Для точного заряда при калибровке батарея должна быть практически деполяризована.

7.2 Способы калибровки батареи

Выберите один из двух способов. Аппаратный: снять батарею примерно на 10s и подключить. Программный: следующие действия через последовательную консоль.

  1. Найдите bat: busybox find /sys/ -name bat, например /sys/rk818/bat. Для RK816 везде используйте /sys/rk816/bat.

  2. Выполните: echo m > /sys/rk818/bat.

  3. Проверьте: echo r > /sys/rk818/bat; BIT(4) результата должен быть 1 (для RK816 — BIT(1)=1).

  4. Нормально выключите и ждите минимум 30 минут до старта для точного OCV. Для отмены шага 2: echo c > /sys/rk818/bat.

7.3 Когда нужна калибровка

  1. При изменении ёмкости батареи в DTS.

  2. При явно неверном заряде, например после зависаний или специальных тестов, не относящихся к измерителю.

  3. Один раз перед всей серией стресс-тестов измерителя, чтобы начать с точного состояния; не перед каждым отдельным тестом.

8. Анализ типовых проблем

  1. Как включить отладку? Перед компиляцией замените в первой строке драйвера static int dbg_enable = 0 на 1. Либо через консоль при работе: включить echo 1 > /sys/module/rk818_battery/parameters/dbg_level; выключить echo 0 > /sys/module/rk818_battery/parameters/dbg_level. Для RK816 путь /sys/module/rk816_battery/parameters/dbg_level.

  2. Почему с адаптером/USB система сразу перезапускается после выключения? PMIC спроектирован так, что при подключённой зарядке не остаётся выключенным.

  3. Почему GGSTS[4] не соответствует наличию батареи после горячего подключения? PMIC не поддерживает такое обнаружение, проверяя батарею лишь при включении.

  4. Почему выключение при напряжении выше DTS? Ориентируйтесь на последнее текущее напряжение VSYS в журнале. Цель — не опускать мгновенное напряжение ниже порога. После снятия нагрузки поляризация литиевой батареи исчезает и напряжение растёт — её естественное свойство.

  5. Почему заряд почти неизменен, а напряжение падает при циклах питания, reboot или ожидании второго уровня? Драйвер не может нормально опрашивать; такие тесты измерителя не поддерживаются. Оригинал исключает эти три случая из проверки измерителя отделом качества/заказчиком.

  6. Почему ток зарядки мал? (a) Проверьте плохой высокоомный кабель: VBUS может быть значительно ниже 5v. Оригинал предлагает внешний стабилизированный источник и осторожное увеличение напряжения для наблюдения тока. (b) Выключите экран (ожидание первого уровня) и проверьте рост тока — связь с потреблением системы. (c) Почти полная батарея естественно берёт малый ток; проверьте напряжение. (d) Нагрев/большая нагрузка могут ограничить вход. Оригинал предлагает повысить fb_temperature для диагностики, затем при необходимости временно fb_temperature=0. Это описание поиска неисправности, не разрешение отключать защиту при обычной работе.

  7. Почему после снятия батареи меняется заряд? Можно ли сохранить отображение? (a) После полного обесточивания PMIC заряд определяется по OCV; это нормальная повторная калибровка. (b) Без программного обхода почти невозможно: сохранить заряд перед выключением в файл и прочитать при старте. Нужный код заказчик добавляет сам.

  8. Как узнать внутреннюю температуру PMIC при тепловой регулировке? Никак: такой функции не предусмотрено.

  9. Почему неверны знак/величина тока? Проверьте точность резистора 20/10 миллиом и чистоту пайки. Резистор должен стоять между BAT- и GND.

  10. Почему finish до полного заряда, например 3.9v? Обычно плохая батарея и чрезмерный заданный ток включают защиту её платы, вызывая ложный finish PMIC.

  11. Почему малый ток меняет знак при finish? Это ошибка нуля после полного заряда; оригинал считает её несущественной.

  12. Почему при finish показано лишь более 90%, не 100%? Счётчик накапливает ошибку, аппаратное завершение независимо; точного совпадения нет. Это нормально. Программа постепенно доводит отображение до 100%, незаметно пользователю и без влияния на работу.

  13. Почему рабочий заряд сильно отличается от ocv_table?

Это смешение понятий: ocv_table относится к холостому ходу без нагрузки и используется лишь при стартовой коррекции и коррекции сна. Прямое сравнение с работой под нагрузкой принципиально неверно.

  1. Можно ли заменить батарею другой спецификации? Нет без повторного измерения и настройки OCV, сопротивления, ёмкости и прочих параметров.

  2. Когда PMIC считает заряд полным? Одновременно: конечное напряжение, ток finish, отсутствие ограничения входного тока.

  3. Почему постоянно 50% и зарядка? Отключите драйвер test_power.

  4. Почему постоянно 66% и зарядка? Батарея не подключена либо virtual_power в DTS равен 1; задайте 0.

  5. Почему не распознано подключение/отключение зарядки? (a) Ядро 4.4: rk818_charger.c обнаруживает зарядку; USB/OTG зависят от цепочки USB. Ищите журнал “rk818-charger: recieve xxx notifier event: xxx”. Если его нет, регистрация могла не удаться (маловероятно) либо неисправен USB-драйвер. (b) Ядро 3.10: rk818_battery.c ведёт и обнаружение, и заряд. События USB/OTG также зависят от цепочки. Ищите “rk818-bat: recieve xxx notifier event: xxx”; отсутствие означает те же возможные причины.

Другие статьи по теме → · Учебные маршруты →