4_Apollo4BlueLite电源管理
1.Cortex-M4 Power Modes
Apollo4BlueLite支持以下4种功耗模式:
▪ High Performance Active (not a differentiated power mode for the Cortex-M4)
▪ Active
▪ Sleep
▪ Deep Sleep
(1)High Performance Mode
高性能模式不是arm定义的标准模式,从arm的角度来看,该模式和arm定义的active模式比较类似。
Apollo4BlueLite定义的High Performance Mode是基于ambiq的turbo SPOT技术,实现了高频率,高性能的工作模式。
在该模式下M4核和内存可以在较高的时钟频率下工作,并且ARM的时钟(FCLK, HCLK)也在较高的时钟频率下工作,使处理器保持高性能并且外设传输速率也保持为高。使用期间所有外设也都保持正常的工作频率。
进入和退出该模式是软件可控的,实际由相应硬件完成。
(2)Active Mode
在Active模式下M4内核保持运行状态,时钟正常,并且指令正在运行。在这个模式下,所有使能的设备都被供电和时钟驱动以进行正常访问。同时,所有非调试Arm时钟(FCLK,HCLK)都是正常运行的。
要从Active模式转换到任何较低功耗模式,需要在M4核心上执行特定的指令序列。首先,必须设置ARMv7-M系统控制寄存器SCR中的特定位来确定要进入的模式。
在设置好系统控制寄存器SCR后,可以使用以下三种方法之一进入低功耗状态:
- 执行等待中断(WFI)指令。
- 执行等待事件(WFE)指令。
- 设置SCR的SLEEPONEXIT位,使得从中断服务例程(ISR)退出后自动返回到睡眠状态。
在执行了其中一种方法(假设满足所有条件)后,M4将进入低功耗模式,并保持在该模式下,直到某个事件导致核心返回到活动模式。返回活动模式的可能原因包括:
- 复位
- NVIC接收到一个启用的中断
- NVIC接收到一个事件
- 从DAP接收到一个调试事件
(3)Sleep Mode
在Sleep模式下M4是上电的状态,但是时钟信号(HCLK、FCLK)被禁止传递给M4核心。换句话说,M4的处理器时钟被断开,因此M4不能执行任何指令。这种门控时钟的设计可以节省功耗,在特定条件下实现低功耗的待机模式。当M4需要唤醒时,时钟将被恢复,处理器开始正常运行。这种设计常用于嵌入式系统中,以提高能效。
(4)Deep Sleep Mode
在Deep Sleep模式下,M4会进入SRPG(Static Real Power Gated)模式,主要供电被切断,但寄存器中的状态数据(flops)仍然保持。此时时钟信号(HCLK、FCLK)是不活动的,SoC(System-on-Chip)中用于HCLK和FCLK的时钟源也可以被停用。
为了方便切断供电并进入SRPG模式,M4会与唤醒中断控制器和电源管理单元进行握手,设置可能的唤醒条件。这意味着M4会与相关模块进行通信,并共同商定在何种情况下可以唤醒M4。这些唤醒条件可以是外部中断信号、定时器到期、外部事件等。一旦满足了设置的唤醒条件,M4将被唤醒并恢复正常的运行状态。这种设计可以降低功耗,延长设备的待机时间,并确保在需要时能够及时唤醒M4以执行任务。
2. sleep模式和deepsleep模式的区别
M4的睡眠模式和深度睡眠模式有以下区别:
(1)能耗水平:睡眠模式和深度睡眠模式在功耗水平上有所不同。在睡眠模式下,M4仍然处于供电状态,尽管时钟被禁止,但一些功耗仍然存在。而在深度睡眠模式下,M4的主要供电被切断,功耗非常低,寄存器中的状态数据被保留。
(2)时钟状态:睡眠模式下,M4的时钟信号被禁止传递给M4核心,时钟处于门控状态。而在深度睡眠模式下,时钟信号是不活动的,SoC中的时钟源可以被停用。
(3)唤醒方式:睡眠模式下,M4可以相对较快地被唤醒,例如通过外部中断或定时器。而在深度睡眠模式下,M4主动与唤醒中断控制器和电源管理单元握手,并通过设置唤醒条件来进行唤醒。
(4)上下文保存:睡眠模式下,M4的上下文(寄存器的状态)被保留,可以快速恢复到睡眠前的状态。而在深度睡眠模式下,M4的上下文数据也被保存,但是主要供电被切断,需要重新初始化一些系统配置。
总的来说,睡眠模式适用于快速唤醒和低功耗要求不高的情况,而深度睡眠模式适用于要求更低功耗、保持状态数据的情况。不同的模式可以根据实际需求来选择以实现最佳的能效和性能平衡。
3. CPU电源管理
Apollo4 Blue Lite SoC上的电源管理是通过硬件和软件的组合处理的。
硬件部分负责处理调节器(regulators)与SoC内部各个电源域之间的接口和控制顺序。调节器是用来调节和稳定供电的电路组件,而电源域是指SoC内部的不同子系统或区域,它们可能有不同的供电要求。
软件部分通过处理器指令和系统级的电源控制命令来启动电源状态的转换。也就是说,软件负责通过指令或命令发出请求,硬件负责实际执行相应的电源转换操作。
整个电源管理系统由一个中央电源管理控制器(Power Management Controller)和各种针对每个主要子系统/域的电源管理单元(Power Management Unit,PMU)组成。其中,一些主要的PMU如下所示:
- CPU-PMU:负责CPU子系统的电源顺序控制。CPU子系统包括处理器核心及其相关组件。
- IO-PMU:负责每个I/O子系统的电源顺序控制。I/O子系统包括输入输出接口和相关外设。
通过这种结构,中央电源管理控制器和各个PMU协同工作,实现对SoC内不同子系统/域的电源管理和控制。这样可以确保各个子系统/域的电源状态得以管理,以实现功耗优化、能效提升和系统稳定性。
3.1 CPU-PMU
从Active Mode(活动模式)进入Deep Sleep Mode(深度睡眠模式)的过程。在这个过程中,CPU-PMU(CPU功耗管理单元)管理Cortex-M4核心中寄存器的状态保持能力,并根据需要控制与电压稳压器的接口,以支持CPU的各种操作模式。进入Deep Sleep Mode后,CPU-PMU与唤醒中断控制器一起等待唤醒事件的发生。当观察到事件时,CPU-PMU通过重新启用芯片上的电压稳压器和恢复CPU寄存器状态开始功耗恢复过程。只有当所有状态准备就绪后,M4才会恢复到活动模式中。
CPU-PMU支持以下Arm Cortex-M4定义的功耗模式:
- OFF(关闭)
- Deep Sleep(深度睡眠)
- Sleep(睡眠)
- Active(活动)
在Active模式下,M4的工作频率可以选择为低功耗/高效能模式下的96 MHz,或者高性能模式下的192 MHz。
3.2 IO-PMU
主要介绍了IO-PMU(输入输出功率管理单元)对I/O子系统的电源状态进行管理的功能。每个I/O子系统都支持以下电源模式。需要注意的是,每个I/O子系统可能有不同的实现方式来定义每个具体的电源状态。这是针对每个I/O控制器的具体实现方式。此外,并非每个IO-PMU都支持所有的电源模式(典型配置可能只支持OFF和Active LP两种)。具体的电源模式包括:
- OFF:设备处于关闭状态;
- Sleep:设备处于启用但没有活跃事务的状态;
- Active:设备处于活跃状态,可以进行数据传输和交互。 需要根据具体的IO-PMU和I/O子系统的实际配置和支持情况来确定使用哪种电源模式。
3.3 Power Management Controller
电源管理控制器为每个供电调节器以及数字逻辑控制下的主要电源门提供控制功能。电源管理控制器(PWRCTL)接收来自所有电源管理单元(PMU)的输入,指示所需的电源电平,并通过软件(通过电源管理控制寄存器)进行控制。还提供了电源管理映射配置(从INFO1复制到PWRCTL),根据输入的电源请求来确定调节器接口的功能操作。该映射配置允许电源管理功能可编程化,可进行特性化、调优和/或错误修复。以下是供电调节器接口:
- SIMO降压器
- 核心低压差稳压器(LDO)
- 存储器低压差稳压器(LDO)
PWRCTL还负责控制所有数字电源域的电源门使能。根据功率水平请求来控制电源门使能。当来自相应请求的PMU请求一个“关闭”电平,或通过软件进行强制关闭请求,或对于I/O请求者,当相应的I/O设备使能被取消时,相应的电源门使能被激活以关闭该域。对于其他功率级别请求,电源门被禁用以上电相应的域。
SRAM和NVM的电源域是基于依赖的请求域来进行控制的。对于NVM,如果所有的CPU PMU请求者都是“关闭”,而DMA请求者是“关闭”或“睡眠”,则NVM电源域将被关闭。对于SRAM,每个SRAM基于SKU存储器配置或者如果所有的CPU PMU请求者都是“关闭”,而DMA请求者是“关闭”或“睡眠”,并且基于功耗控制MEMPWDINSLEEP配置启用SRAM电源关闭。
相关文章:
4_Apollo4BlueLite电源管理
1.Cortex-M4 Power Modes Apollo4BlueLite支持以下4种功耗模式: ▪ High Performance Active (not a differentiated power mode for the Cortex-M4) ▪ Active ▪ Sleep ▪ Deep Sleep (1)High Performance Mode 高性能模式不是arm定…...
Pytorch入门学习——快速搭建神经网络、优化器、梯度计算
我的代码可以在我的Github找到 GIthub地址 https://github.com/QinghongShao-sqh/Pytorch_Study 因为最近有同学问我如何Nerf入门,这里就简单给出一些我的建议: (1)基本的pytorch,机器学习,深度学习知识&a…...
举例说明typescript的Exclude、Omit、Pick
一、提前知识说明:联合类型 typescript的联合类型是一种用于表示一个值可以是多种类型中的一种的类型。我们使用竖线(|)来分隔每个类型,所以number | string | boolean是一个可以是number,string或boolean的值的类型。…...
记录一次Linux环境下遇到“段错误核心已转储”然后利用core文件解决问题的过程
参考Linux 下Coredump分析与配置 在做项目的时候,很容易遇到“段错误(核心已转储)”的问题。如果是语法错误还可以很快排查出来问题,但是碰到coredump就没办法直接找到问题,可以通过设置core文件来查找问题࿰…...
WPF中自定义Loading图
纯前端方式,通过动画实现Loading样式,如图所示 <Grid Width"35" Height"35" HorizontalAlignment"Center" VerticalAlignment"Center" Name"Loading"><Grid.Resources><DrawingBrus…...
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
一、实际工作中需要对转换选项细化内容 在昨天我们实现了最简单的半角字符和全角字符相互转换功能,就是将英文字母、阿拉伯数字、标点符号、空格全部进行转换。 在实际工作中,我们有时只想英文字母、阿拉伯数字、标点符号、空格之中的一两类进行转换&a…...
叮咚买菜财报分析:叮咚买菜第二季度财报将低于市场预期
来源:猛兽财经 作者:猛兽财经 卖方分析师对叮咚买菜第二季度财报的预测 尽管叮咚买菜(DDL)尚未明确披露第二季度财报的具体日期,但根据其以往的业绩公告,猛兽财经认为叮咚买菜很有可能会在8月的第二周发布…...
设计模式行为型——中介者模式
目录 什么是中介者模式 中介者模式的实现 中介者模式角色 中介者模式类图 中介者模式代码实现 中介者模式的特点 优点 缺点 使用场景 注意事项 实际应用 什么是中介者模式 中介者模式(Mediator Pattern)属于行为型模式,是用来降低…...
Vue——formcreate表单设计器自定义组件实现(二)
前面我写过一个自定义电子签名的formcreate表单设计器组件,那时初识formcreate各种使用也颇为生疏,不过总算套出了一个组件不是。此次时隔半年又有机会接触formcreate,重新熟悉和领悟了一番各个方法和使用指南。趁热打铁将此次心得再次分享。…...
人脸验证(Face verification) 和 人脸识别(Face recognition) 的区别
人脸验证(Face verification) 和 人脸识别(Face recognition) 的区别 Face verification 和 Face recognition 都是人脸识别的技术,但是它们的应用和目的不同。 Face verification(人脸验证)是指通过比对两张人脸图像,判断它们是…...
前端如何打开钉钉(如何唤起注册表中路径与软件路径不关联的软件)
在前端唤起本地应用时,我查询了资料,在注册表中找到腾讯视频会议的注册表情况,如下: 在前端代码中加入 window.location.href"wemeet:"; 就可以直接唤起腾讯视频会议,但是我无法唤起钉钉 之所以会这样&…...
数据可视化入门指南
数据可视化是一种将抽象的数值和数据转换为易于理解的图像的方法。它可以帮助人们更好地理解数据的含义,并且可以揭示数据中可能被忽视的模式和趋势。本文将为你提供一个简单的数据可视化入门指南。 为什么数据可视化重要? 在我们的生活中,数…...
React 18 响应事件
参考文章 响应事件 使用 React 可以在 JSX 中添加 事件处理函数。其中事件处理函数为自定义函数,它将在响应交互(如点击、悬停、表单输入框获得焦点等)时触发。 添加事件处理函数 如需添加一个事件处理函数,需要先定义一个函数…...
面试总结-c++
1该吹牛逼吹牛逼。在自己能说出个所以然的情况下,该吹就吹,不吹没工作,吹了有希望。 比如 c组长,确有其事,但是挺唬人。说自己在北京定居也是侧面吹牛逼,证明自己的能力。还有媳妇在研究所。 2.对自己做过…...
Spring(九) - 解惑 spring 嵌套事务.2
1. 事务传播特性 在所有使用 spring 的应用中, 声明式事务管理可能是使用率最高的功能了, 但是, 从我观察到的情况看,绝大多数人并不能深刻理解事务声明中不同事务传播属性配置的的含义, 让我们来看一下 TransactionDefinition 接口中的定义 Java代码 /** * Support a cu…...
Android Studio API 33 获取当前连接的WIFI名称
常规流程失败流程 常规流程 以下内容在 API 33 成功实现,低版本API还请自行尝试(仅推荐 API 29 - 33 用户食用) 先(至少)添加以下权限到你的 AndroidManifest.xml 文件 <uses-permission android:name"andr…...
ICCV 2023 | 半监督三维目标检测新SOTA:密集匹配和量化补偿
论文链接:https://arxiv.org/abs/2304.13031 开源代码仓库地址:https://github.com/AIR-DISCOVER/DQS3D 方法效果对比图:有效在半监督情况下处理临近小物体 01. 简介 本文旨在解决三维室内场景中高昂的标注成本问题,特别关注半监…...
python+django+mysql项目实践三(用户管理)
python项目实践 环境说明: Pycharm 开发环境 Django 前端 MySQL 数据库 Navicat 数据库管理 用户列表展示 urls view models html <!DOCTYPE html> <html...
Java多线程 | 操作线程的方法详解
文章目录 一、线程的启动1.1 start()方法 二、线程的休眠与中断2.1 Thread.sleep()方法2.2 interrupt()方法 三、线程的等待与唤醒3.1 wait()方法3.2 Object类的notify()和notifyAll()方法3.3 await()和signal()方法3.4 使用join()方法等待线程执行完成 四、线程的状态控制与管…...
【ConcurrentHashMap1.7源码】十分钟带你深入ConcurrentHashMap并发解析
ConcurrentHashMap1.7源码 四个核心要点 初始化PUT扩容GET Unsafe 初始化 五个构造方法 /*** Creates a new, empty map with the default initial table size (16).*/public ConcurrentHashMap() {}/*** Creates a new, empty map with an initial table size* accommodati…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析
1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器(TI)推出的一款 汽车级同步降压转换器(DC-DC开关稳压器),属于高性能电源管理芯片。核心特性包括: 输入电压范围:2.95V–6V,输…...
python打卡第47天
昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图,展示模…...
