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…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...