platform:RK3399
OS:Android 7.1
現(xiàn)象描述
關(guān)機(jī)充電需求如下:
1.插上充電器,一直充電;
a.充電時按開機(jī)鍵,開機(jī)
b.如果拔掉充電器(斷電),保持關(guān)機(jī);
2.未插上充電器,按開機(jī)鍵;
b.電量高于5%(&& 電壓高于6.894V),開機(jī)
c.否則不開機(jī)
但是關(guān)機(jī)充電拔掉適配器會開機(jī),這顯然是不符合需求的.
分析步驟
步驟1:確認(rèn)是否有走關(guān)機(jī)邏輯
抓log發(fā)現(xiàn)
charger disconnceted.
do_charge :shutting down...
rk808 shut dDDR Version 1.22 20190506
In
確實走了rk808的關(guān)機(jī)邏輯,但是仍然會開機(jī).說明關(guān)機(jī)之后滿足RK808的開機(jī)條件.
步驟2:查看RK808數(shù)據(jù)手冊的開機(jī)邏輯
測量PWRON開機(jī)回路發(fā)現(xiàn)在拔適配器的時候沒有低電平.
但是測試INT中斷引腳發(fā)現(xiàn)拔掉之后竟然會有一個中斷(藍(lán)色下降沿為拔適配器,黃色低電平為INT中斷)
嘗試關(guān)機(jī)之前關(guān)閉中斷
int do_charge(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
...
//disable irq
disable_interrupts();
printf("disable interrupts\n");
shut_down();
發(fā)現(xiàn)仍然會關(guān)機(jī)后重啟.顯然不是關(guān)機(jī)前的中斷出發(fā)導(dǎo)致RK808達(dá)到開機(jī)條件.
步驟三:查看硬件重啟條件
查看硬件設(shè)計手冊,發(fā)現(xiàn)RK808上電條件:
- PWRON拉低500ms
- VDC電壓高于0.6V
- 內(nèi)部RTC Alarm開機(jī)使能并定時時間到.
條件1已經(jīng)測試過了,條件3并沒有設(shè)置RTC,所以鎖定在條件2.
測試發(fā)現(xiàn)VDC從1.2降低到0.6V的閾值竟然用了大約1020ms,而由上圖知道關(guān)機(jī)從拔適配器到關(guān)機(jī)大概只有280ms.所以關(guān)機(jī)之后,RK808檢測到VDC高于0.6V,再次開機(jī)了.
解決方法
找到了問題解決方法就好辦了.可以從兩個方向來解決:
- 降低VDC電壓,使其剛好達(dá)到開機(jī)檢測電壓,比如0.7V
- 減少VDC降低到0.6V的時間.
VDC部分電路如下:
- 更換分壓電阻R1217和R1216的比值就可以降低VDC的電壓;
- 去掉C1239或者更換更小的電容.
經(jīng)過實驗發(fā)現(xiàn),只用適當(dāng)更換R1217之后,VDC會在拔適配器之后的幾毫秒之內(nèi)降到閾值0.6V以下.