Android 待机电流

sancaiodm Android应用 2022-07-17 1612 0

----------------------------------------------------

产线电流待机电流测试之前,请先确认以下配置:

1、关闭 WIFI/BT/GPS,关闭数据连接,设置飞行模式。 (根据具体测试场景设置)

2、关闭 mobile log/modem log/net log,打开LOG会增加电流。注意:确认 /sdcard/mtklog (/data/mtklog) 中是否有 LOG 生成,确定关闭成功。

3、确认各个模块是否已经正常工作,各个模块都会影响功耗,需要在模块工作 OK 之后再测试功耗问题。

4、测试将所有第三方 APK 删除,排除第三方 APK 问题。

----------------------------------------------------

目前我们分析的功耗问题主要是待机低电流或者待机平均电流问题。

造成待机底电流偏大原因基本可以分为3类: 

【1】各个外设模块休眠漏电或未休眠,

【2】GPIO/subsys/pll/clock口漏电,

【3】wakelock导致无法休眠,modem无法休眠

关闭飞行模式测试待机底电流,排除是否modem未休眠,首先确定是AP 还是modem。

----------------------------------------------------

modem暂无系统的分析方法。

博主测试的待机电流低于4mA ,是在飞行模式下测试,从上电开机至待机电流低于4mA还要100S左右,待机时间过长,影响产线测试速度,

下面是AP的分析流程

【1】外设模块分析方法

外设模块分析主要还是靠硬件上一一移除,然后查看移除哪个模块后底电流有降下来,然后确定到时哪个模块漏电 .如休眠时将TP camera LCD 逐一移除来确定排查。找到模块后再取分析代码来解决。

【2】WAKELOCK 分析

Kernel或者system持有wakelock会导致系统无法进入深度休眠,直接导致待机底电流偏高

【2】【STEP1-找KERNEL层和USER层的WAKELOCK】

使用命令,查看kernel或者上层的wakelock

cat /proc/wakelock 

dumpsys power`

相关weaklock都会被打印出来

【2】【STEP2-找USER层的WAKESOURCE】

中间层申请的weaklock不会再上面显示,必须使用命令去查看weaksource的脚本去抓取这两种信息,脚本源码如下:

#!/system/bin/sh

echo "Start monitor power..." > /sdcard/power.txt

while echo "====================================================================================" >> /sdcard/power.txt

do

    date >> /sdcard/power.txt

    echo "**********dumpsys power**********" >> /sdcard/power.txt

    dumpsys power | cat >> /sdcard/power.txt

    echo "" >> /sdcard/power.txt

    echo "**********cat /sys/kernel/debug/wakeup_sources**********" >> /sdcard/power.txt

    cat /sys/kernel/debug/wakeup_sources >> /sdcard/power.txt

    echo "" >> /sdcard/power.txt

    sleep 10

done


二、待机电流平均值高的情况

此种情况下,设备是能够正常进入待机状态的,但是由于某些外部的因素导致设备频繁唤醒或者进入待机低电流时间过长,而引起的平均电流值过高的的问题


1:进入低电流状态时间过长

出现此种现象的时候,多数情况下都是MODEM引起,这个时候CPU一般都是休眠了(通过串口无法输入或者通过串口查看log),MODEM进入低电流模式有自己的工作方式,特别是4G信号状态下花费的时间比较长。


2:频繁唤醒

APP设置了alarm导致设备唤醒:

Logcat -s AlarmManager 可以查看alarm唤醒系统的信息 只有RTC_WAKEUP和ELAPSED_REALTIME_WAKEUP 两种类型的alarm可以在待机状态下唤醒系统

Modem接收到服务器推送或者基站数据导致设备唤醒:

通过log可以看到是中断唤醒的系统,可以在log中过滤interrupt字段查询,Modem接收到数据后会通过中断唤醒CPU。当然,如果是基站数据唤醒的系统,我们是无法控制的。

3:通过dumpsys power 来查看是否有电源锁



评论