一、客户自查
电量相关问题,请先排查如下几点:
1、check hardware schematic
硬件设计对电量计算有极大影响,所以务必确认如下两项:
(1)ISENSE/BATSNS硬件连接是否和对应平台参考设计相同
使用的charger IC support power path则使用ISENSE测量VBAT,反之使用BATSNS;
注意:BATSNS/VSYSSNS不可短接
(2)CP_S/CP_N 差分包地走线
PCB走线注意细则参考文档:《Fuel Gauge Application Notes_Vx.pptx》
2、check ZCV table
(1)是否有按规范打表
(2)是否有按规范合入dtsi
操作指导参考文档:
《GM3.0 Customized Setting Flow_Vx.pptx》
3、check car_tune_value
确认是否有按规范校准car_tune_value
car_tune_value校准方法参考文档:
《GM3.0 Customized Setting Flow_Vx.pptx》
4、check customization
确认是否做过客制化修改,如有请提供修改内容;
mtk_battery_property.h
mtk_battery_table.h
若支持5个温度,则提供:
xxx_battery_prop_ext.dtsi
xxx_battery_table_ext.dtsi
若支持4个温度则提供:
xxx_battery_prop.dtsi
xxx_battery_table.dtsi
注:如果贵司做过客制化,从头文件解析zcv,请说明;
客制化参数含义参考文档:
《 GM3.0_Customization parameter design guide_Vx.pptx 》
二、提CR注意事项
如若上述自查均PASS,电量计算仍存在问题,劳烦开启daemon log,提供问题复现步骤和log:
1、 fuelgauge daemon log开启方法:
(1)setprop(注意需要root权限)
adb shell setprop persist.mediatek.fg.log.enable 1
(2)改code,重编bootimage:
/kernel/drivers/power/mediatek/battery/mtk_battery.c文件中:
//static signed int gFG_daemon_log_level = BM_DAEMON_DEFAULT_LOG_LEVEL;
修改为:
static signed int gFG_daemon_log_level = 8;
static int Enable_BATDRV_LOG = 3;
修改为:
static int Enable_BATDRV_LOG = 8;
(3) adb 命令写节点,但重启会消失(注意需要root权限):
adb shell echo 8 > /sys/devices/platform/battery/FG_daemon_log_level
2、开启mtklogger,复现log;
3、将具体复现操作步骤、复现log附到CR里面;
三、学习文档
针对电量计初学者,务必先到敝司DCC下载相关文档,了解电量计的测试调试方法、参数意义;
必读文档列举如下:
Fuel Gauge Application Notes_Vx.pptx
Gauge Master 3 0 Introduce_Vx.pptx;
GM3.0 Customized Setting Flow_Vx.pptx;
GM3.0_Customization parameter design guide_Vx.pptx;
四、更换Charger IC注意事项
若贵司使用友商提供的charger,则porting时需要注意如下修改点:
1、使用友商Charger IC + 敝司fuelgauge 3.0方案:
① lk中务必porting charger ic driver,确保可以正常停充、disable power_path;
停充和disable power_path 的位置:
o 若定义MTK_CHARGER_NEW_ARCH(自o1.mp1引入):
/vendor/mediatek/proprietary/bootable/bootloader/lk/platform/common/power/mtk_battery.c文件中check_sw_ocv();
o 未定义MTK_CHARGER_NEW_ARCH:
/vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6771/mt_battery.c文件中 mt65xx_bat_init();
②kernel中charger IC driver porting
确保driver API符合/kernel-4.4/drivers/misc/mediatek/include/mt-plat/charger_class.h文件中struct charger_ops规范;
需要注意的是,若对应charger IC支持HWOCV测量功能,请添加如下callback:
int (get_zcv)(struct charger_device , u32 *uV);
2. 使用友商Charger IC + 外挂gauge,则disable gm3.0对应修改:
(1) kernel部分
① 定义宏:CONFIG_MTK_DISABLE_GAUGE= yes;
② Android O版本还需在battery_probe()中作如下修改,disable recovery mode调用:
/******
if (is_recovery_mode())
battery_recovery_init();
*/
(2)system部分:
disable所有fuelgauge service启动code;
①init.mt67xx.rc
on charger
#start fuelgauged
service fuelgauged /vendor/bin/fuelgauged
# class main
user root
group root
disabled
#注意,Android O无此项
service fuelgauged_nvram /vendor/bin/fuelgauged_nvram
class main
user root
group root
oneshot
disabled
②meta_init.rc、recovery/etc/init.rc等做同步修改
(3)change fgadc reset source
不使用GM3.0的话,需要将寄存器 PMIC_RG_FGADC_RST_SEL_ADDR设为0,code修改位置:
①自alps-mp-o1.mp1 branch MT6771平台后引入MTK_CHARGER_NEW_ARCH,则在lk中作如下修改:
**/lk/platform/common/power/mt_battery.c文件中,修改使is_disable_bat()函数返回true
②之前平台或未定义MTK_CHARGER_NEW_ARCH,则直接在Preloader中修改:
/vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt67xx/src/drivers/battery.c :
void fuel_gauge_init(void)
{
…….
//only for GM 3.0 : set FGADC reset source selection = 1 ,GM3.0 reset
ret = pmic_config_interface((U32)(PMIC_RG_FGADC_RST_SRC_SEL_ADDR), (U32)(0),
(U32)(PMIC_RG_FGADC_RST_SRC_SEL_MASK),
(U32)(PMIC_RG_FGADC_RST_SRC_SEL_SHIFT));
.....
}
五、常见问题
1、电量显示-1
表示fuelgauge deamon无法正常运行,导致的原因多为fuelgauge deamon和kernel不匹配;
劳烦先自行排查libfgauge_gm30.so和kernel是否属同一基线版本;
也可提供 mtk_battery_internal.h / mtk_battery.h 以及客戶libfgauge_gm30.so,由敝司帮忙排查;
2、电量固定为25%、50%、75%
需确认:
是否为factory mode 或 meta mode?
是否disable gauge?
是否使用假电池?
是否EVB?
是否客制化电量上报?
3、1%持续时间长
(1)重载放电
[ Method]减小pseudo1参数值Q_MAX_SYS_VOLTAGE; [Risk]更重载情况下会有drop现象;
(2)轻载放电
[Method1]减小gauge0% 参数值PMIC_MIN_VOL/POWERON_SYSTEM_IBOOT; [Risk]轻载放至低电量切换到重载会drop;
[Method2]调高0%关机电压SHUTDOWN_GAUGE0_VOLTAGE; [Risk]电量无法耗尽,轻载关机电池电压高;
[Method3]降低UI 1%持续时间SHUTDOWN_1_TIME; [Risk]电量无法耗尽,轻载关机电池电压高;
[Method4]降低 DIFFERENCE_FGC_FGV_TH; [Risk]曲线不线性;
(3)重载转轻载
属正常现象,电池本身特性所致;
4、100%持续时间长
(1)放电场景
[Method1]增大pseudo100; [Risk]无,呈现充电本身特性;
[Method2]disable PSEUDO100_EN_DIS; [Risk]无,使充电藏帕放电不藏帕
[Method3]减小KEEP_100值; [Risk]无;
(2)充电场景
[Method]增大pseudo100; [Risk]无,呈现充电本身特性;
5、放电Drop
表现:VBAT达到3.4V关机时,uisoc还比较高;
(1)重载场景
[Method]增大pseudo1;
(2)轻载场景
[Method]增大gauge 0% ;
(3)轻载至低电量切换至重载场景
[Method]正常现象,电池本身特性导致;
6、放电关机电压未抵到3.4V
表现:UI已经到0%关机,但电池电压仍高于3.4V;
(1)中重载场景
[Method1]降低gauge 0%; [Risk]轻载至低电量切换到重载会有drop;低电量没插充电器开不了机;
[Method2]降低SHUTDOWN_GAUGE0_VOLTAGE; [Risk]可能导致电池过放;
(2)轻载场景
[Method1]增加UI 1% timeout; [Risk]UI 1%显示时间较长;
[Method2]降低SHUTDOWN_GAUGE0_VOLTAGE; [Risk]可能导致电池过放;
(3)轻载至低电量切换至重载场景
[Method]正常现象,电池本身特性导致;