MTK GM3.0電量問題處理流程

一、客戶自查
電量相關問題,請先排查如下幾點:
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]正常現象,電池本身特性導致;