充电问题解决总结
1、充電電流有規律的跳變,30s跳變一次:
解決:
<1> 功耗方面,modem會每隔30s進行一次喚醒,即使飛行模式也會存在,還有其他的wake喚醒源,可以添加log debug:
— a/kernel/irq/pm.c
+++ b/kernel/irq/pm.c
@@ -21,6 +21,9 @@ bool irq_pm_check_wakeup(struct irq_desc *desc)
desc->istate |= IRQS_SUSPENDED | IRQS_PENDING;
desc->depth++;
irq_disable(desc);
- pr_info(“wakeuped by irq %d\n”, desc->irq_data.irq);
- if(desc->action && desc->action->name)
- pr_info(“wakeuped by dev %s\n”,desc->action->name);
pm_system_irq_wakeup(irq_desc_get_irq(desc));
return true;
}
<2> 充電方面,三方IC bq會有32s進行一次喂狗,不喂vbus會掉了再起來
psy沒有調用起來IC的狗函數,我們在它的dumpreg函數中添加一個喂狗:
2、充電在85%左右一直再充不上去,電流停充:
解決:IC的充電狀態沒有給到gauge,full狀態沒上報
POWER_SUPPLY_PROP_STATUS,
case POWER_SUPPLY_PROP_STATUS:
pr_err(“yonghai charger done\n”);
val->intval = bq24157_get_charging_status();
break;
3、充電到1%放電時間太長:
解決:電池連接器阻抗值不對
4、充電曲線不平穩:
解決:給充電加鎖避免休眠:
charger_routine_thread函數最后添加:__pm_stay_awake(info->charger_wakelock);
5、溫度檢測不準確:
解決:溫度檢測的上拉電阻和LDO的電壓配置不準確
RBAT_PULL_UP_R
RBAT_PULL_UP_VOLT
6、lk下的上鍵以gpio按鍵實現:
#define GPIO_7 (0x80000000 | 7) //EINT7_UP KEY_VOLUMEUP
mtk_kpd_gpio_set函數下添加:
mt_set_gpio_mode(GPIO_7, GPIO_MODE_GPIO);
mt_set_gpio_dir(GPIO_7, GPIO_DIR_IN);
mt_set_gpio_pull_enable(GPIO_7, GPIO_PULL_ENABLE);
mt_set_gpio_pull_select(GPIO_7, GPIO_PULL_UP);
mtk_detect_key函數下添加:
mtk_kpd_gpio_set();
#ifdef KPD_DL_KEY1
if(key == KPD_DL_KEY1)
{
if(!mt_get_gpio_in(GPIO_7)) //volup pull-down
{
print(“preloader volup gpio pull-down\n”);
return true;
}
return false;
}
#endif
7、充電到400ma時突降到200ma:
解決:
8、充電插入usb不識別vbus,無通知:
解決:
《1》、dts中使能bc1.2 active:
關于MTK BC12檢測:
bc12_sel= 0; bc12_active=0 ==> use Charger IC’s bc1.2
bc12_sel = 1; bc12_active=0 ==> use MTK PMIC’s bc1.2
bc12_sel = 2; bc12_active=0 ==> use external IC’s bc1.2
bc12_active=1 ==>
Use charging IC without bc1.2
Use MTK PMIC’s bc1.2
Don’t care bc12_sel
《2》、do_charger_detect函數中添加usb通知:
if(en &&(prop3.intval ==1 || prop3.intval ==3)) {
mt_usb_connect();
} else {
mt_usb_disconnect();
}
power_supply_changed(info->psy);
9、充電不能報full,一直有電流輸入:
解決:
pmic和gauge的probe init時間有點早,會有fail,導致充電狀態無法給到gauge
//module_init(mt6357_charger_type_init);
late_initcall(mt6357_charger_type_init);
//module_init(mt6357_gauge_init);
late_initcall(mt6357_gauge_init);
10、空電池狀態下有電流輸入:
解決:原因是空電池時在preloader下會一直檢測,導致pmic有耗電
平臺platform.c下檢測到5次電池不在位時不再去檢測,讓走到lk下,然后啟動充電IC驅動時,因為沒有電池,充電就不使能,所有寄存器下電停留在lk階段
11、使用switch charger之后電流讀取不準確:
解決:
12、關機充電截止電流一直截止不了:
解決:關機狀態下,設置的100ma截止電流,但是一直沒有辦法截止,最低電流在120ma左右,原因是關機充電動畫沒有好,一直高亮顯示第一張低電圖片,導致耗電,修改關機動畫能保證正常息屏休眠下去,截止電流正常
13、關機充電曲線毛刺太大:
解決:關機充電,屏背光硬件原因導致屏會高頻率的亮一下白屏,所以會有亮滅狀態,會導致有漏電,所以毛刺比較大,硬件修改,軟件兼容,保證息屏之后,無外部中斷下不再亮屏,漏電解決
14:電池電量快速下降,插上usb快速上升:
換了新型號的電池,沒有添加電池的容量mAh,還有電池的放電曲線,
15、DLPT_FEATURE_SUPPORT這個宏打開的時候,會在LK 里面初始化FG ,導致啟動時間很長,FG 初始化消耗2~3秒的時間
a>DLPT是一種通過實時監控battery能夠提供給系統使用的的最大功率,然后將這些功率按照一定的算法來分配到cpu ,gpu,modem,flashlight,icleake,是一種防止在電池低電量由于耗電多大而導致了系統當機的機制
b>由于在系統啟動的lk階段就會去計算imix這個參數,如果把它拿掉了,那么在kernel階段的DLPT算法就會直接skip,直到系統發生休眠后重新計算這個imix值之后
c>這個feature主要是在mt6753之后的平臺推的,貴司使用的是6735,這個是沒有驗證過這個feature的作用有大多,所以貴司如果考量DLPT在lk帶來的時間過長導致體驗不好可以關閉這個feature
d>目前來說,這部分的算法是根據硬件的設計來實驗的,軟件上面的延遲是必須的,這個暫時沒有優化
16、預充時間長:
pre階段的電流很小,導致預充時間長,修改正確的RSENSE電阻值,不支持power_path的關閉它
17、lk階段的充電時間長:
pre預充到3.3v之后會到lk,然后lk初始化了fg,重新通過pmic adc讀取電壓電流值,會充電到3.45v,這階段IC充電,電流小原因:i2c slave 器件讀寫位不對:
-#define bq24157_SLAVE_ADDR_WRITE 0xD4
-#define bq24157_SLAVE_ADDR_Read 0xD5
+#define bq24157_SLAVE_ADDR_WRITE 0xD6
+#define bq24157_SLAVE_ADDR_Read 0xD7
18、一二供IC兼容問題:
IC的vendor code和IC PN腳的值區分IC:一供:ETA6937,二供:AW32207
19、二供AW32207斷充問題:
充一會電就會斷充,然后10s后重新連接,10s再斷開,期間bat id還檢測錯誤,adc電壓檢測錯誤
因為USB DCP識別連接錯誤:
20、預充時間太長:
檢查R_SENSE阻值大小是否和硬件上貼的一致,預充時電壓低于3.3v,是硬件pmic直接供電,R_SENSE電阻靠近VBAT,BATSNS靠近R_SENSE引出,通過ADC讀取BATSNS電壓和對應的R_SENSE來計算流入電池的電流大小,IBENBE跟BATSNS完成端電壓除以RSENSE測得充電電流
21、充電截止時ui_soc遠沒有到100%:
1、優先確認電池對應的ZCV表是否正確,
2、確認無誤之后可以適當調整截止電流或者截止電壓大小
3、R_FG_VALUE電流采樣電阻大小確認,必須要和硬件上貼的一致,屬于gauge部分,靠近電池連接器,
總結
- 上一篇: bayer raw
- 下一篇: 【Azure Data Platform