MT8735 andorid7.0 充电调试总结(4)----如何添加代码到工程

充电调试流程简介

(一) 电池充电原理简介
电池充电过程分三个阶段:预充电、恒流充电和恒压充电。

预充电:当Vbat<3.4V时即进入此阶段,此时PMIC不能提供Vcore、Vdd等电压,CPU处于关机状态。预充电流一般相对较小,理论上不要超过0.2C
恒流充电:当3.4<Vbat<4.2V时进入此阶段,此时PMIC的LDO开始输出电压,CPU开始工作。
恒压充电:当Vbat>4.2V后进入此阶段,此时充电电流会越来越小,电压维持不变。
 

(二) 调试流程
1.首先确定是BQ还是MOS管充电
这里以BQ24158充电驱动移植为类:

//*.mk文件是配置bq24296的宏
modified: device/mediatek/tb8167p3_64/ProjectConfig.mk
modified: vendor/mediatek/proprietary/bootable/bootloader/lk/project/tb8167p3_64.mk
modified: vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/tb8167p3_64/tb8167p3_64.mk

//配置kenel里面的bq24296宏
modified: kernel-4.4/arch/arm64/configs/tb8167p3_64_debug_defconfig //
modified: kernel-4.4/arch/arm64/configs/tb8167p3_64_defconfig

//配置I2C 设备名 
modified: kernel-4.4/arch/arm64/boot/dts/mediatek/tb8167p3_64.dts

//配置i2c 和打印log
modified: kernel-4.4/drivers/misc/mediatek/power/bq24296.c
modified: vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt8167/src/drivers/bq24296.c
modified: vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt8167/bq24296.c

//打开uart口,打log
modified: kernel-4.4/kernel/printk/printk.c

//打印log+相关的充电寄存器
modified: kernel-4.4/drivers/misc/mediatek/power/mt8167/charging_hw_bq24296.c
modified: vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt8167/mt_battery.c 
modified: vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt8167/mt_i2c.c


//单独配置每一个dws文件(没有复制操作),配置充电使能脚+中断脚
modified: vendor/mediatek/proprietary/custom/tb8167p3_64/kernel/dct/dct/codegen.dws
modified: vendor/mediatek/proprietary/bootable/bootloader/lk/target/tb8167p3_64/dct/dct/codegen.dws
modified: vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/tb8167p3_64/dct/dct/codegen.dws

这步完成后保证模块正常工作,有充电电流。

 

 

2.kernel层充电相关函数介绍
alps\kernel-3.10\drivers\power\mediatek目录下:

battery_common.c  -----------充电控制主线程

battery_meter.c    -----------SW FG算法

linear_charging.c   ----------PMIC充电控制

switch_charging.c   ---------SW charger充电控制

3. ZCV曲线
这里主要涉及到:

alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power目录下cust_battery_meter_table.h 和 cust_battery_meter.h 这两个文件,根据电池厂家提供的ZCV参数更新这两个文件下对应4个温度下的参数即可。如下是-10度的对应的放电深度跟电池电压见得关系

MT8735 andorid7.0 充电调试总结(4)----如何添加代码到工程

4.客制化宏定义

(1)alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\ cust_battery_meter_table.h

这里定义电池内部温度检测电阻,上拉电阻及电压,从基带那里获取这些信息。

MT8735 andorid7.0 充电调试总结(4)----如何添加代码到工程

(2)充电电流设置

Kernel: \alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\ cust_charging.h

MT8735 andorid7.0 充电调试总结(4)----如何添加代码到工程

Lk:alps\bootable\bootloader\lk\target\aeon6735m_65u_s_l1\include\target\ cust_battery.h

MT8735 andorid7.0 充电调试总结(4)----如何添加代码到工程

5.其它需求整改

(1)低电预充阀值设置

如下所示预充电压阀值设定为3.4V,预充电流默认512mA:

f98c\mediatek\kernel\include\mach\Battery_common.h 

MT8735 andorid7.0 充电调试总结(4)----如何添加代码到工程

MT8735 andorid7.0 充电调试总结(4)----如何添加代码到工程

 (2)高压充电(6.5V以上)报警提示

MT8735 andorid7.0 充电调试总结(4)----如何添加代码到工程