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度的对应的放电深度跟电池电压见得关系
4.客制化宏定义
(1)alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\ cust_battery_meter_table.h
这里定义电池内部温度检测电阻,上拉电阻及电压,从基带那里获取这些信息。
(2)充电电流设置
Kernel: \alps\kernel-3.10\drivers\misc\mediatek\mach\mt6735\aeon6735m_65u_s_l1\power\ cust_charging.h
Lk:alps\bootable\bootloader\lk\target\aeon6735m_65u_s_l1\include\target\ cust_battery.h
5.其它需求整改
(1)低电预充阀值设置
如下所示预充电压阀值设定为3.4V,预充电流默认512mA:
f98c\mediatek\kernel\include\mach\Battery_common.h
(2)高压充电(6.5V以上)报警提示