platform:RK3399
OS:Android 7.1
现象描述
关机充电需求如下:
1.插上充电器,一直充电;
a.充电时按开机键,开机
b.如果拔掉充电器(断电),保持关机;
2.未插上充电器,按开机键;
b.电量高于5%(&& 电压高于6.894V),开机
c.否则不开机
但是关机充电拔掉适配器会开机,这显然是不符合需求的.
分析步骤
步骤1:确认是否有走关机逻辑
抓log发现
charger disconnceted.
do_charge :shutting down...
rk808 shut dDDR Version 1.22 20190506
In
确实走了rk808的关机逻辑,但是仍然会开机.说明关机之后满足RK808的开机条件.
步骤2:查看RK808数据手册的开机逻辑
测量PWRON开机回路发现在拔适配器的时候没有低电平.
但是测试INT中断引脚发现拔掉之后竟然会有一个中断(蓝色下降沿为拔适配器,黄色低电平为INT中断)
尝试关机之前关闭中断
int do_charge(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
...
//disable irq
disable_interrupts();
printf("disable interrupts\n");
shut_down();
发现仍然会关机后重启.显然不是关机前的中断出发导致RK808达到开机条件.
步骤三:查看硬件重启条件
查看硬件设计手册,发现RK808上电条件:
- PWRON拉低500ms
- VDC电压高于0.6V
- 内部RTC Alarm开机使能并定时时间到.
条件1已经测试过了,条件3并没有设置RTC,所以锁定在条件2.
测试发现VDC从1.2降低到0.6V的阈值竟然用了大约1020ms,而由上图知道关机从拔适配器到关机大概只有280ms.所以关机之后,RK808检测到VDC高于0.6V,再次开机了.
解决方法
找到了问题解决方法就好办了.可以从两个方向来解决:
- 降低VDC电压,使其刚好达到开机检测电压,比如0.7V
- 减少VDC降低到0.6V的时间.
VDC部分电路如下:
- 更换分压电阻R1217和R1216的比值就可以降低VDC的电压;
- 去掉C1239或者更换更小的电容.
经过实验发现,只用适当更换R1217之后,VDC会在拔适配器之后的几毫秒之内降到阈值0.6V以下.
网友评论