[转]功耗分析-判断 suspend 是否成功

2024-02-09 20:08

本文主要是介绍[转]功耗分析-判断 suspend 是否成功,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 背景

在suspend状态(sleep mode)下,我们最关心的是系统底电流。SPM掌控着CPU suspend之后系统能否掉到最小电流的关键逻辑,你可以把它理解成一个投票机制,当系统的关键资源(memeory、clock)没有任何人使用的时候,它就会让系统进入一个真正的深睡状态(最小电流)。只要它检测到有任何资源请求还没有释放,系统就无法降到底电流。所以在底电流问题上的debug流程中,我们不仅仅要看CPU有没有suspend成功,还要看SPM的状态是否正确。

2. 查SPM的状态是否正确

2.1 关于 SPM

SPM = System Power Manager

因为整个系统不只是AP(MCU),还包括modem、connectivity等子系统;CPU进入WFI(wait for interrupt状态)后,整个系统就依靠一颗SCP:SPM来控制睡眠/唤醒的流程,它回去关注各个子系统的状态。跟SPM强相关的一个东西就是系统中的时钟请求信号,也就是26M时钟开关的控制逻辑:

2.2 查看 SPM的状态

看SPM的状态只需要看wake up by 、r13 和 debug_flag 关键字

<4>[  923.097349] -(0)[1180:system_server][SPM] wake up byEINT, timer_out = 7440931, r13 = 0x10001000, debug_flag = 0x9f

这两个寄存器保留了SPM管理时钟的关键信号状态,寄存器的detail信息不对客户开发。

判断是否正常一般就只要看debug_flag的最后4个bit,如果是0xf(1111)就是正常的,如果是类似0Xc(1100)或者0x3(0011)这种的就是不正常的。

一般就只有这三种值,因为每2个bit是成对的,它们意味着26M有没有被打开/关闭过,1表示发生过,0表示没有。因为如果26M被关了,唤醒前必须打开,因此要么都是0(26M没有打开/关闭过),要么都是1(26M打开/关闭过),0就是不正常的。
如果发现debug_flag不是0xf,那么要看r13,r13是保存了每个输入SPM的时钟请求信号状态,这种状态下一定是有某个时钟请求信号是hold住了。因此可以简单地把r13理解是SPM的输入,而debug_flag是SPM输出SRCLKENA信号。

3. 结语

不同平台不同系统版本,上述log不一定有完整打印。故本分只是作为经验参考

这篇关于[转]功耗分析-判断 suspend 是否成功的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/695174

相关文章

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Java判断多个时间段是否重合的方法小结

《Java判断多个时间段是否重合的方法小结》这篇文章主要为大家详细介绍了Java中判断多个时间段是否重合的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录判断多个时间段是否有间隔判断时间段集合是否与某时间段重合判断多个时间段是否有间隔实体类内容public class D

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

mysql外键创建不成功/失效如何处理

《mysql外键创建不成功/失效如何处理》文章介绍了在MySQL5.5.40版本中,创建带有外键约束的`stu`和`grade`表时遇到的问题,发现`grade`表的`id`字段没有随着`studen... 当前mysql版本:SELECT VERSION();结果为:5.5.40。在复习mysql外键约

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制