1 功耗分析处理流程
1.1 问题处理流程图
1.2 一般分析流程
根据问题,先确认此问题是什么场景,可能会涉及到哪些模块,当某个场景的电流有异常时,可能是由于一个或多个模块共同造成的,逐一排查涉及到的各个模块电流是否异常;当遇到复合场景电流异常时,先确保整个场景涉及到的单一场景的电流在可接受范围之内,再对涉及到的模块进行拆分。
2 单一场景功耗测试
2.1 常见单一场景测试
2.1.1飞行模式待机测试:
通常测试条件: 开启飞行模式、关闭BT、Wifi、GPS、NFC、自动屏幕旋转等一些可能在手机灭屏时工作的器件; 通常测试步骤: 清理手机后台,手机灭屏后,从Power Monitor上看,当待电流基本稳定后(通常需要2 - 3分钟),开始测试,测试时间通常为5分钟。
2.1.2 数据网络待机(关闭数据网络):
通常测试条件: 关闭飞行模式、关闭数据网络、BT、Wifi、GPS、NFC、自动屏幕旋转等,如果是海外版手机,应当尽可能屏蔽GMS带来的影响; 通常测试步骤: 清理手机后台,手机灭屏后,从Power Monitor上看,当待电流基本稳定后(通常需要2 - 3分钟),开始测试,测试时间通常为5分钟。
2.1.3 WiFi网络待机(未连接WiFi):
通常测试条件: 打开飞行模式、关闭数据网络、BT、GPS、NFC、自动屏幕旋转等,打开WiFi但不连接到WiFi,如果是海外版手机,应当尽可能屏蔽GMS带来的影响; 通常测试步骤: 清理手机后台,手机灭屏后,从Power Monitor上看,当待电流基本稳定后(通常需要2 - 3分钟),开始测试,测试时间通常为5分钟。
2.1.4 BT待机(未连接其他设备):
通常测试条件: 打开飞行模式、关闭数据网络、WiFi、GPS、NFC、屏幕旋转等,打开BT但不连接到设备,如果是海外版手机,应当尽可能屏蔽GMS带来的影响; 通常测试步骤: 清理手机后台,手机灭屏后,从Power Monitor上看,当待电流基本稳定后(通常需要2 - 3分钟),开始测试,测试时间通常为5分钟。
2.1.5 GPS待机:
通常测试条件: 关闭飞行模式、关闭数据网络、BT、NFC、屏幕旋转等,打开GPS,如果是海外版手机,应当尽可能屏蔽GMS带来的影响; 通常测试步骤: 清理手机后台,使用GPS相关app使GPS处于工作状态,手机灭屏后,从Power Monitor上看,当待电流基本稳定后(通常需要2 - 3分钟),开始测试,测试时间通常为5分钟。
2.1.6 AOD待机:
通常测试条件: 打开飞行模式、关闭数据网络、BT、GPS、WiFi、NFC、屏幕旋转等,如果是海外版手机,应当尽可能屏蔽GMS带来的影响; 通常测试步骤: 在设置中开启AOD,AOD显示内容选择默认,清理手机后台,手机灭屏后,从Power Monitor上看,当待电流基本稳定后(通常需要2 - 3分钟),开始测试,测试时间通常为5分钟。
2.1.7 HomeIdle待机:
通常测试条件: 打开飞行模式、关闭数据网络、BT、GPS、WiFi、NFC、屏幕旋转、自动调节背光等,如果是海外版手机,应当尽可能屏蔽GMS带来的影响; 通常测试步骤: 使用手机默认设置的屏幕背光亮度等级,将手机设置为30分钟灭屏,清理手机后台,手机显示默认主界面内容,静置;从Power Monitor上看,当待电流基本稳定后(通常需要2 - 3分钟),开始测试,测试时间通常为5分钟。
3 各场景功耗分析
3.1 关机漏电流
3.1.1 手机关机状态下,系统不工作,只有少量器件在工作,如果发现手机关机状态下的电流较高(通常关机漏电流在0.5mA以下),可以确认以下几点:
a) 确认硬件本身是否有漏电; b) 确认使用的假电池是否含有FG等芯片; c) 确认假电池上硬件本身是否会漏电。 可以测量两组数据对比确认上述a、b两点因素,测量一组假电池连接手机的漏电流数据,再测量一组只有假电池的漏电流数据,如果两组数据相差无几,说明手机硬件本身可能不存在漏电,假电池上耗电过多;对于部分手机厂商而言,手机电池上会内置一些FG等芯片,用于获取电池的相关信息,这些器件可能是I2C器件,会每个固定时间上报一次电池数据,假电池的电流因此会增加,和电池厂商确认这个电流数据是否合理即可;对于上述c点因素,如果有FG等芯片,可以先移除这些芯片,再确认假电池本身的漏电流是否合理;
备注:对于部分假电池而言,假电池上的电容可能会影响假电池的电流数据,必要时可以移除假电池上的电容。
3.2 飞行待机
3.2.1 飞行模式待机是系统工作的最小电流,反映手机硬件和软件的设计水平,当飞行模式待机电流异常时,可以确认以下几点:
a) 关机漏电流是否合理; b) 灭屏待机时,AP是否休眠; c) 灭屏待机时,各子系统是否休眠(查看待机前后RPM计数); d) 灭屏待机时,除必要器件,其他器件是否下电; e) 灭屏待机时,一些gpio、bus等状态是否合理。
3.3 数据网络相关
3.3.1 数据网络相关涉及到的用户使用场景很多,是比较容易出问题的地方,当数据网络相关电流异常时,可以确认以下几点:
a) 关机漏电流和飞行待机电流是否合理; b) 是否有异常唤醒(ap bp都有可能); c) 不同运营商不同网络模式的寻呼周期对待机电流的影响; d) 寻呼周期对应的电流脉冲宽度和高度是否合理; e) 手机所处的网络环境如何; f) RF校准,确认网络相关配置是否正确合理。
3.4 WiFi相关
3.4.1 WiFi网络相关的测试,通常会包含WiFi待机、WiFi上传下载,当涉及到WiFi相关电流测试时,可以从以下几点入手分析:
a) 关机漏电流和飞行待机电流是否合理; b) 测试机和对比机的WiFi器件是否相同,WiFi器件本身工作的电流(QC和HS的WiFi器件功耗就有所不同); c) WiFi固件本身是否没有问题(QC会经常改动WiFi,有时新版本的固件可能会引入新的未知问题); d) 接入的WiFi环境是否干净(最好连接一个独立WiFi,没有其他设备接入); e) WiFi上传或下载时,使用的协议是否相同(802.11.x),协议不同,映射到测试机上的功耗也有差异。
3.5 BT相关
3.5.1 通常情况下,BT的功耗问题相对较少,如果出了问题,可能会涉及到以下几点:
a) 关机漏电流和飞行待机电流是否合理; b) BT器件工作电流是否有异常; c) 确认BT的测试环境是否异常; d) 确认BT的工作模式、使用的协议;
3.6 AOD待机
3.6.1 AOD功能是近两年新增的功能,主要是灭屏情况下,显示一些内容;当AOD待机出现电流问题时,可以对以下几点因素分析处理:
a) 关机漏电流和飞行待机电流是否合理; b) 屏幕开启AOD时的基本电流; c) 开AOD之后,各子系统是否能休眠(有些定制化的AOD功能,sensor会工作); d) 显示相关服务或进程是否有异常(AOD除了显示时间,还会显示一些通知图标); e) 开AOD是,是否还开了其他功能(抬手亮屏、刷脸解锁等)。
3.7 显示相关
3.7.1 显示相关的电流问题,HomeIdle待机是基本场景,涉及到此场景的问题,可以分析处理以下几点:
a) 关机漏电流和飞行待机电流是否合理; b) 手机屏幕在最低、默认和最大背光亮度下,测试机和对比机的电流是否有差异; c) 显示相关进程或服务是否有异常(它们的CPU负载率、内存占用率等); d) 是否有其他进程影响显示相关电流(如屏下L-sensor,相关算法可能会每隔一段时间会计算和修改当前屏幕亮度); e) 测试机和对比机显示相关功能,是否有定制化(不同厂商的显示动画、效果等会有差异); f) 是否有额外条件或功能影响显示相关的电流测试。
3.8 MP3播放相关
3.8.1 音乐播放的电流问题,基本在每个项目中都会出现,涉及到这个问题时,可以考虑以下几点:
a) 关机漏电流和飞行待机电流是否合理; b) 测试机和对比机使用的硬件器件是否相同(如 smart PA、编解码器等); c) 播放音乐时,编解码的方式是否相同(软硬解码),使用的算法是否相同(android原生还是定制化等),是否带有音效(dts、杜比等); d) 三方音乐播放软件还涉及到三方音效效果(人声、古典、卧室、户外等); e) 在线播放音乐时,需要考虑网络带来的影响; f) 亮屏播放时,还要考虑屏幕背光亮度的影响。
3.8.2 必要时,可以检查音频参数是否合理,不同的音频参数的播放电流是有差异的,但音频参数不可随意更改,涉及到播放音效和用户体验。
3.9 MP4播放相关
3.9.1 视频播放的电流问题,基本在每个项目中都会出现,涉及到这个问题时,可以考虑以下几点:
a) 关机漏电流和飞行待机电流是否合理; b) 测试机和对比机使用的硬件器件是否相同(如 smart PA、编解码器等); c) 播放视频时,编解码的方式是否相同(软硬解码),使用的算法是否相同(android原生还是定制化等),是否带有音效(dts、杜比等)对CPU、GPU、内存的占用率; d) 三方视频播放软件还涉及到三方定制功能; e) 在线播放视频时,还需要考虑网络相关因素的影响; f) 还要考虑屏幕背光亮度的影响。
3.10 语音通话相关
3.10.1 通话问题,涉及到的主要因素有以下几点:
a) 关机漏电流和飞行待机电流是否合理; b) RF参数是否正确; c) 测试机所处网络环境是否良好; d) 灭屏通话时,如果是使用P-sensor灭屏,检查sensor状态是否正确; e) 亮屏通话时,需要考虑屏幕亮度带来的影响。
3.11 Camera相关
3.11.1 涉及到相机的电流问题,通常比较棘手,可以考虑以下因素对电流的影响:
a) 关机漏电流和飞行待机电流是否合理; b) 相机基本工作电流(模组厂商提供的电流数据)是否就偏大; c) 检查相机模组供电是否有异常(硬件可以协助); d) 使用相机时,是否有各种效果(美颜、夜景、慢动作等); e) 检查使用相机时的CPU负载率是否有异常; f) 使用相机时,考虑屏幕亮度对电流的影响; g) 测试机和对比机的拍照或录像的内容是否相同,如是否是同一被拍照物; h) 相机长时间工作时,需要考虑Thermal对电流的影响,可能会限制或降低CPU频率、降低屏幕背光等;
3.12 其他手机相关测试
3.12.1 这种测试通常会比较复杂,使用到的手机资源也比较多,需要将其拆解成单一场景,逐一确认每个场景的电流,可以确认以下几点:
a) 确认涉及到的每个单一场景电流是否合理; b) 确认该测试项使用哪些手机硬件资源; c) 确认测试机和对比机使用的三方app版本是否相同; d) 确认测试机和对比机使用的系统版本是否相同;
3.13 DoU和类DoU续航测试
3.13.1 这类测试是一种综合性较强的测试,模拟用户操作并使用手机,观察手机续航能力,可以确认以下几点:
a) 确认涉及到的每个单一场景电流是否合理; b) 确认操作环境和手法,是使用机械臂、脚本还是人工进行的测试,如果是脚本,确认脚本中是否有持锁、额外消耗手机资源的行为; c) 确认每个操作之后,手机电量变化;
4 Debug方式
4.1 如果有系统log工具,可以抓取log(非特殊要求不要开modem log、录屏等额外耗电的功能);如果无,可以使用logcat抓取(能记录的log时间较短);
4.2 使用脚本或者命令额外抓取其他log(QC和MTK都有一些特定的命令抓取更多log信息);
4.3 待机场景,可以移除某些外设的同时观察电流是否变化,来快速确认这些资源耗电是否异常,尽量在开机状态下只拔不插,通常可以移除camera、NFC、speaker、部分sensor、屏幕、指纹;
4.4 DoU场景可以使用bugreport辅助分析
4.4.1 官方BatteryHistorian安装使用教程:
https://github.com/google/battery-historian
4.4.2 国内教程:
https://www.cnblogs.com/haihai88/p/6603726.html
5 案例分析
5.1 0.1秒异常电流波形分析
5.1.1 问题描述
如图1,UE飞行模式待机,RBSC是4mA左右,从电流波形图上看,存在着0.1s的规律性异常电流脉冲。
5.1.2 分析过程
从log中看,此时AP已经休眠,VDD_min count在灭屏期间是增加的,所以推测是bp侧出了问题;通过拆外设的方式,发现在拆除L-sensor模组时,0.1s的电流脉冲消失,推断L-sensor工作异常;从QXDM看到L-sensor一直在打印其相关log,和sensor工程师沟通发现,sensor没有工作在uImage模式。
5.1.3 解决方法
将L-sensor的工作模式改成uImage模式,如图2,配置方式是将sensor的*_uimg.c文件加入到DD_UIMG_SOURCES(最大能添加5个)中,确保加入的DD_UIMG_SOURCES会被代码编译到。如660平台,此文件在ADSP.VT.4.1/adsp_proc/Sensors/dd/qcom/build/dd_qcom.scons
5.2 ftm_mode模式引起待机功耗高
5.2.1 问题描述
飞行模式下,关闭BT、WiFi、GPS等,发现待机电流稳定在47mA左右,如图3电流波形图所示。
5.2.2 分析过程
通过log看,UE待机期间,AP无异常,回顾整个测试流程也未发现异常,最后咨询相关工程师,推测可能是由于高通的ftm_mode被开启造成的,通过QXDM读取NV 00453的地址查看ftm_mode的状态,如图4,QXDM显示ftm_mode的Input和value的值是0x01,表示ftm_mode已经开启。
5.2.3 解决方法
由于之前测试机被QFil全擦,qcn信息丢失,导致ftm_mode被开启,需要刷入和机器匹配的qcn,重启后复验,待机电流在5mA左右,如图5
6 附录
6.1 部分脚本(QC平台)
Improve kernel log level
adb shell "echo 8 > /proc/sys/kernel/printk "
Enable the IPC debug log
adb shell "echo 0x2 > /sys/module/ipc_router_core/parameters/debug_mask "
Enable XO/VDD clock
adb shell "echo 1 > /d/clk/debug_suspend "
Enable some debug masks
adb shell "echo 32 > /sys/module/msm_spm/parameters/debug_mask "
adb shell "echo 32 > /sys/module/msm_pm/parameters/debug_mask "
adb shell "echo 9 > /sys/module/mpm_of/parameters/debug_mask "
adb shell "echo 0x7FF > /sys/module/qpnp_qg/parameters/debug_mask "
adb shell "echo 1 > /sys/module/msm_show_resume_irq/parameters/debug_mask "
adb shell "echo 1 > /sys/kernel/debug/clk/debug_suspend "
adb shell "echo 1 > /sys/module/kernel/parameters/initcall_debug "
adb shell "echo 0 > /sys/module/qpnp_rtc/parameters/poweron_alarm "
6.2 通用脚本
Clear kernel main system events log
adb shell logcat -c kernel
adb shell logcat -c main
adb shell logcat -c system
adb shell logcat -c events
adb shell dmesg -c
Clear and reset bugreport
adb shell dumpsys batterystats --enable full-wake-history
adb shell dumpsys batterystats --reset
GetTCP dump
adb shell "tcpdump -i wlan0 -v -w /storage/emulated/0/tcpdump.pcap & "
adb shell dumpsys batterystats
|