一、SPM以及时钟请求信号控制流程

因为整个系统不只是AP(MCU),还包括modem、connectivity等子系统;CPU进入WFI后,整个系统就依靠一颗SCP:SPM来控制睡眠/唤醒的流程,它会去关注各个子系统的状态

SPM =System Power Manager,它掌控着cpu suspend之后系统是否能掉到最小电流的关键逻辑,你可以把它理解成一个投票机制,当系统的关键资源(memory、clock)没有任何人使用的时候,它就会让系统进入一个真正的深睡状态(最小电流)只要它检测到有任何资源请求还没释放,系统就无法降到底电

所以在底电问题上的debug流程中,我们不仅仅要看cpu有没有suspend成功,还要看SPM的状态是否正确

SPM里面有一个可编程控制器PCM(Programmable Command Master)

CPU在进去WFI之前会把SPM的firmware写入PCM,然后PCM就依据firmware的逻辑来控制SPM的工作

跟SPM强相关的一个东西就是系统中的时钟请求信号,也就是26M时钟开关的控制逻辑;因为系统工作在最小电流的时候,SPM只依靠32K时钟工作;因此要判断系统是不是已经到深睡状态,就要看26M有没有关闭

26M时钟的控制逻辑概要如下图

所以从上图我们就可以看到, 26M有没有关,就只要看SCLKENA这个信号有没有关闭;而SPM对这个信号的输出以及子系统的信号输入,都会记录在SPM的寄存器里面,这个就是我们通过log排查的依据

代码路径:

/kernel-x.x/drivers/misc/mediatek/base/power/spm_vx/

二、Deep idle

基本概念

这是一种CPU进入空闲后的状态,也就是在idle进程中执行的

简单地说,Mediatek会在CPU进入空闲的情况下,再去关闭一些不必要的power domain,以达到最省电的目的,因为CPU空闲的时候,其实系统中有不少的domain也是不需要运行的,不这样做的话,就仅仅是CPU这块的电省下来 ,达不到省电的目的。

Mediatek的做法是在CPU在进入idle进程后,会去判断当前系统的状态是否满足进入更省电状态的条件,首先就会检查是否能进入deep idle,因为dpidle最省电

系统进入dpidle需要满足的条件是

  • 单核(BY_CPU)

  • 预设的能block deep idle的所有clock都已经关闭(BY_CLOCK)

  • CPU在2ms内没有从idle task调度出去的需求(BY_TMR)

  • BY_VTG / BY_OTH的case很少(BY_OTH在个别平台跟TEE(SPI指纹模块)有关)

我们可以从波形上检查系统是否进入deep idle

下图中电流的底部就是deep idle的状态,在MP3播放的状态大约20mA;

如果没有进deep idle,这个底部会被抬高

deep idle也是由SPM来控制它的执行逻辑,跟suspend一样, CPU在进去WFI之前会把SPM的firmware写入PCM,这个firmware跟suspend是完全不一样的。

三、背景知识---SODI

SODI跟deep idle类似,是SPM的另外一种工作模式

SODI:Screen On Deep Idle

SODI的进入条件跟deep idle是类似的,区别只是要检查的clock跟deep idle不完全一样 ,SODI对display功耗的影响相对于CMD / VDO mode是不一样的

前面讲过了CMD / VDO的差别,其实就很容易理解这一点:因为CMD mode下,CPU不用送数据出去,因此MIPI clock可以不用送,这整条clock路径上的东西(PLL/clock)都可以关闭,而且memory跟VDO相比也可以做更多省电的action;所以SODI对CMD mode的省电效果会比VDO的效果更明显

是否进入SODI也可以从波形上明显地看到:

下图示SODI  enable/disable的idle mode波形比较

CMD mode:SODI on(左) vs SODI off(右)

VDO mode:SODI on(左) vs SODI off(右)

*重点关注波形的形状,电流下降的数值不同平台不一样

Android 功耗( 21 )---MTK 低功耗1相关推荐

  1. android功耗测试方法,手机功耗测试指南

    和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分 功耗 知识点,通过阅读本篇文章,您将收获以下内容:1.测试功耗手机配置 2.飞行模式待机功耗 3.单SIM ...

  2. Android 蓝牙开发(三) -- 低功耗蓝牙开发

    Android 蓝牙开发(一) – 传统蓝牙聊天室 Android 蓝牙开发(三) – 低功耗蓝牙开发 项目工程BluetoothDemo 前面已经学习了经典蓝牙开发,学习了蓝牙的配对连接和通信,又通 ...

  3. 你都知道么?Android中21种drawable标签大全

    前言 我们在drawable目录下可以创建很多自定义的资源,其中用的最多的应该就是selector和shape.目前在Android中有21种drawable标签,了解和利用这些标签对我们的开发有很大 ...

  4. Android L系统mtk平台下AAL自动背光调整服务亮度曲线调试需要涉及的地方

    Android L系统mtk平台下AAL自动背光调整服务亮度曲线调试需要涉及的地方 如果你想修改MTK的AAL自动背光调整相关的内容,那么根据情况,可能需要涉及如下文件: 这是Android L版本的 ...

  5. Android 功耗(14)----Android功耗 问题debug处理

    Android 功耗问题debug处理(主要是睡眠时"大"电流问题的debug方法示例) 1. 在手机进入sleep后,被上层apk唤醒的debug方法 请抓取相应的待机的mobi ...

  6. Android 功耗(11)---Android 功耗分析之wakelock

    Android 功耗分析之wakelock 生活总是让我们遍体鳞伤,但到后来,那些受伤的地方一定会变成我们最强壮的地方.-海明威 WakeLock是什么 WakeLock作用 WakeLock有那些分 ...

  7. android 功耗(1)---android 功耗分析方法和优化

    android 功耗 高通平台   分类:功耗 1.底电流调试(Rock Bottom Current Optimization) 底电流在手机飞行模式下调试.每个平台的底电流数据可能不一样,具体可以 ...

  8. 【转载】Android功耗改进

    原文地址:<Android功耗改进> by 保罗的酒吧 最近几年中,Google在一直极力的改进Android系统的续航能力.在本文中,我们将看到Andrdoi自5.0到8.0这几个版本中 ...

  9. FPGA 的功耗概念与低功耗设计研究

    文章转自(点击链接可以查看高清原文,失效请留言): 韩雪, 郭文成. FPGA的功耗概念与低功耗设计研究[J]. 单片机与嵌入式系统应用, 2010, 10(3):9-11. 深度解析FPGA的功耗 ...

最新文章

  1. 【Zookeeper】Zookeeper一致性协议——ZAB
  2. 2016搜狗:矩阵元素相乘
  3. Java 面试题问与答:编译时与运行时
  4. 简单易懂,ThreadPoolExecutor参数说明
  5. 跟着太白老师学python 09day 初识函数
  6. 解决mysql ERROR 1045(28000)问题【忘记密码,修改配置文件,无密码登录mysql修改密码】
  7. sqlserver中分区函数 partition by的用法
  8. thymeleaf 消息推送_Springboot集成WebSocket+Thymeleaf+Echarts完成数据的实时推送
  9. 享元模式在 Java Integer 中的应用
  10. 3月17日 基于特征点的RANSAC最优估计基础矩阵,稀疏光流法综述
  11. 城市大脑一网统管数据中台建设方案
  12. 【历史上的今天】1 月 17 日:VirtualBox 诞生;杨致远辞职;风暴蠕虫问世
  13. The Client hold the Interface
  14. SpringSecurity自定义多Provider时提示No AuthenticationProvider found for问题的解决方案与原理(二)
  15. 将UTC时间格式转换成东八区时间格式
  16. PDPS软件:带颜色的机器人工作站二维布局图JT格式文件转换方法
  17. 柔性电子 --基于碳纳米管的柔性压力传感器
  18. IntelliJ IDEA注释字体形式修改
  19. 如何读写一篇优秀的计算机论文
  20. 连载 大学生求职七大昏招(七)说谎 6

热门文章

  1. linux input输入子系统分析《二》:s3c2440的ADC简单驱动实例分析
  2. lcd驱动解析(二)
  3. typeof关键字简介
  4. Java面试之阻塞队列
  5. selenium与python自动化测试模拟登录百度
  6. Linux perf tools
  7. [数论-欧拉函数的应用]NEFU 1115
  8. 【转载】小米2进入recovery的方法
  9. 【ExtJS实践】之五 :常用语句及脚本备忘
  10. XAMPP修改80和443端口及创建虚拟目录