YTM32的电源管理与低功耗系统详解

YTM32的电源管理与低功耗系统详解

苏勇,2023年10月

文章目录

  • YTM32的电源管理与低功耗系统详解
    • 缘起
    • 原理与机制
      • 电源管理模型的功耗模式
        • 正常模式(Normal)
        • 休眠模式(Sleep)
        • 深度休眠模式(DeepSleep)
        • 待机模式(StandBy)
        • 掉电模式(PowerDown)
      • RCU模块
      • WKU模块
      • PCU模块
    • 应用要点(软件)
    • 总结
    • 参考文献

缘起

前几天有客户在技术交流群里问,YTM32的LE产品能不能使用任意GPIO的中断将芯片从StandBy模式下唤醒?按照我对功耗管理架构的理解,常规的MCU低功耗模式分浅睡和深睡,浅睡可以用常规中断唤醒,从哪里睡着就可以从哪里醒来;深睡需要专门的唤醒模块(例如Kinetis的LLWU模块),醒来之后效果同硬件复位效果等同,入睡之前的记忆全无,整个断片了。为了确认YTM32的微控制器如我理解一致,我专门查阅了LE和ME的手册进行核实,顺带梳理了YTM32平台上的电源管理与低功耗管理系统的实际资源和工作机制。

原理与机制

深入到微控制器的内部模块,大多数软件开发者了解时钟系统的重要性,却对供电系统所知不多。诚然,供电系统在芯片上电后,就基本稳定下来,几乎不需要开发者进行任何额外的操作。不过,对于对供电敏感的应用场景,为了充分利用有限的电能,需要根据电路系统的需求,动态调整整个芯片的功耗模式,此时,就需要充分了解芯片的电源系统及功耗管理机制,以合理的方式进行编程。

YTM32微控制器的电源管理系统,涉及到电源控制单元(Power Control Unit,PCU)、唤醒单元(Wakeup Unit,WKU), 复位控制单元(Reset Control Unit,RCU)等专门的外设模块,以及低电压检测(Low Voltage Detection,LVD)、POR(Power On Reset)等电路单元,以及一个包含多种功耗模式的电源管理模型,控制和管理芯片内部的多个调压器(对应不同电压、不同带载能力)以及对多外设模块的供电开关。

在这里插入图片描述

图x YTM32B1ME的电源管理系统

以YTM32B1ME为例,图x展示了YTM电源管理系统的功能框图。其中VDD是整颗芯片的输入电压源,在芯片工作的整个生命周期中,需要保持稳定的供电。VDD25VDD11分别对应两个内部调压器的输出,其中VDD11为内部的处理器内核和逻辑电路供电。PD0(Power Domain 0)所在的供电线路是常供电的电源域,PD1(Power Domain 1)所在的供电线路在PowerDown模式下会被停电。像FIRCPLLSXOSCSXOSCSIRC等时钟发生器,若被停电,则使用这些时钟作为时钟源的外设模块也会随之停止工作。

电源管理模型的功耗模式

YTM32微控制器的电源管理体系中,按照功耗从高向低排列,最多包括:正常模式(Normal/Active)、休眠模式(Sleep)、深度休眠模式(DeepSleep)、待机模式(StandBy)及掉电模式(PowerDown)。对于使用Arm Cortex-M0+内核的YTM32B1L系列,精简了其中的PowerDown模式。其中,Normal、Sleep和DeepSleep都是基本的Arm架构低功耗模式,可按照常规操作方式,先对SCB_SCR寄存器进行配置,然后通过WFI指令进行进入Sleep或DeepSleep模式。如图x所示。

在这里插入图片描述

图x Arm内核的SCB_SCR寄存器

StandBy和PowerDown是YTM32在自家SoC上,进一步实现更低功耗的工作模式,还需要配合另外的PCU模块(Power Control Unit),设置复位相关的功能,才能正常工作。如图x所示。

在这里插入图片描述

图x 进入StandBy模式的使能开关
正常模式(Normal)

几乎所有的外设模块都可以全功能正常工作(除了像WKU这种尽在掉电模式才开始工作的模块除外)。芯片内部的调压器全部以最高性能状态工作,对绝大多数的外设模块开放供电。此时,处理器可以以最高性能运行。上电复位之后进入工作的初始状态。

休眠模式(Sleep)

CPU停止工作,内核中的部分模块仍在工作(NVIC),其他外设模块都保持同Normal模式相同的工作方式。LVD(Low Voltage Detection)保护单元仍在工作,这意味着内部的高压调压器还是正常工作的。此时只是CPU暂停了,外设模块可通过NVIC(中断事件)唤醒CPU。

从Normal模式进入Sleep模式,需要配置SCB_SCR[DEEPSLEEP]=0寄存器位,然后使用WFI指令进入。

深度休眠模式(DeepSleep)

CPU停止工作,但内部的高压调压器仍正常工作,系统总线时钟停用,NVIC停用。所有的内存和寄存器保持状态。如果配置外设使用除了系统总线时钟之外,其他还在工作的时钟作为时钟源,就仍可继续工作。“异步时钟”(不同于总线时钟的其它独立时钟源)仍可驱动部分外设的触发捕获电路,产生中断,通过NVIC唤醒芯片至Normal模式。

从Normal模式进入DeepSleep模式,需要配置SCB_SCR[DEEPSLEEP]=1寄存器位,然后使用WFI指令进入。

待机模式(StandBy)

在深度休眠模式基础上,内部的高压调压器也停用了,整个芯片由低压调压器继续供电维持,维持内部的内存和寄存器保持状态。如果配置外设使用除了系统总线时钟之外,其他还在工作的时钟作为时钟源,就仍可继续工作。“异步时钟”仍可驱动部分外设的触发捕获电路,产生中断,通过NVIC唤醒芯片至Normal模式。

StandBy模式相对于DeepSleep模式,主要变化在于用低压调压器替换高压调压器为芯片系统供电。此时要特别注意,要预先停用LVD,否则当使用低压调压器供电后,LVD可能会误判供电不足而触发缺电保护机制,复位系统等。

从Normal模式进入StandBy模式,需要配置SCB_SCR[DEEPSLEEP]=1寄存器位,配置PCU_CTRL[STANDBYEN]=1,然后使用WFI指令进入。

掉电模式(PowerDown)

掉电模式是YTM32目前最低功耗的模式。除了Arm核心,大部分外设模块也被直接停电,仅有WKU、PCU和一些低速时钟源仍能保持工作。除了WKU、PCU、SCU,大部分寄存器和SRAM的数据全部丢失。NVIC也停掉了,自然不能响应外部的中断。此时只能通过WKU唤醒芯片。因为内存环境都被破坏了,唤醒后进入复位,而不是从哪睡下从哪醒。

从Normal模式进入PowerDown模式,需要配置SCB_SCR[DEEPSLEEP]=1寄存器位,配置PCU_CTRL[RPMEN]=1,然后使用WFI指令进入。

在具体芯片的手册中可以查阅到各外设模块在不同低功耗模式下的工作模式,以及唤醒源。

在这里插入图片描述

图x 各外设在不同功耗模式下的工作状态(部分)

其中:

  • FF:Full Function
  • RPM:Reduced Power Mode
  • When DPDEN=1, Flash will enter its deep power down mode
  • 部分SRAM内存的在掉电模式下仍可保存(保留少量前生的记忆),0x1FFFC000-0x1FFFFFFF retained ,0x20000000-0x20003FFF retained 。

片上外设模块的供电线路相对于部分有灵活性的时钟源来说比较固定,除却时钟源,它们的供电线路也只能在固定的电源模式下正常供电。为外设模块铺设供电线路,通常是芯片系统集成阶段的工作,每款芯片都不尽相同,用户需要查阅用户手册才能确认它们实现的情况。例如,在YTM32B1ME微控制器的手册中可以查阅到关于各外设模块能否被唤醒(保持供电)的表格,如图x所示。

在这里插入图片描述

图x 各外设在不同功耗模式下的唤醒源(部分)

RCU模块

RCU(复位控制单元,Reset Control Unit)是监测复位事件和配置RESET引脚的模块。RCU不能主动产生复位信号,因为复位信号大多是由外部的异常情况触发的,通常情况下也不希望芯片系统频繁复位(少数从低功耗或者通过SCB主动触发重新执行程序的应用除外)。RCU_RSSR寄存器中的状态标志位,标记了最近一次导致复位的是什么事件。RCU_RPFR寄存器是专门配置RESET引脚的,包括是否禁用RESET引脚(彻底防止芯片的RESET引脚受到外部噪声信号影响意外触发复位,电机应用中常用),在不同低功耗模式下是否继续工作,以及RESET引脚作为一个输入输出信号的方向(复位过程中是否向外送低电平信号)和输入滤波(抗噪声)等。

这里重点看下RCU能够帮助用户监测到的复位事件。图x中向用户展示了RCU_RSSR寄存器中的全部复位事件的标志位。

在这里插入图片描述

图x RCU_RSSR寄存器
标志位复位事件详细说明
HVD高压复位PVD监测到VDD上的电压过高,高于芯片能够承受的供电电压范围。其中,判决高压支持门限的值,是通过生产芯片的校准过程预设的。
LPACK低功耗应答超时复位当PCU模块向芯片系统发出即将进入低功耗的消息时,要求各外设模块尽快调整状态准备进入低功耗(相当于要熄灯睡觉了),每个外设模块在准备好之后,最后向PCU回发应答确认。只有当所有的外设都应答后,PCU才能开始调整供电系统(关闭一部分供电,切换一部分供电电源)。但如果有应答迟迟未到,那是不能随意切换电源的,此时,系统判定可能有一些模块可能工作异常,因此试图通过重启系统实现修复。
WDG看门狗复位WDG看门狗计数器超时触发的复位事件。此时可能判定原本需要定期抑制超时定时器的操作(喂狗)间隙中,因为某些不正常的执行流程耽搁了过多的时间。此时系统判定出现故障,试图通过重启系统实现修复。
CMU时钟监控复位CMU模块中的时钟监控器(Clock Monitor)触发的复位事件。Clock Monitor监控到芯片的时钟源不稳定了,后面的程序可能就不可靠了,直接复位,再看看时钟系统,否则就一直在复位循环中,别出来祸祸外部的电路系统了。
LOCKUPARM核死锁复位ARM核心自己拌住自己了???
DBG调试器复位调试器发送复位命令触发的复位事件。
SW软件主动复位软件通过写ARM核的SYSRESETREQ寄存器,主动触发的复位事件。这个复位事件常用于执行OTA更新固件(烧写好新程序后重新启动)
PINRESET引脚复位通过RESET引脚产生的复位事件。正常情况下,RESET引脚输出高电平,当外部拉低RESET引脚并保持一段时间后,触发RESET引脚复位事件,芯片执行复位。
POR_LVD上电复位通过系统上电过程触发的复位事件。上电启动后,触发芯片的复位操作,芯片从头开始执行程序。上电过程包含了LVD(低电压检测)的过程,因此可使用同一个复位源。

注:芯片从PowerDown模式下唤醒后的复位,也算作POR_LVD复位事件中。

WKU模块

WKU(唤醒源,Wake-Up Unit)是配套PowerDown模式的一个专门的唤醒源,它在正常工作模式和普通的低功耗模式下都是停用的,只有当芯片被切入PowerDown模式,由芯片系统自动启用。但要注意,仍需要用户在正常工作模式下预先配置好WKU及唤醒后的少量处理流程(WKU也可以触发中断,WKU的中断服务程序在唤醒后立即执行,然后再执行复位流程)。

WKU实际是管理了一组特定的GPIO引脚的中断,如图x所示。
在这里插入图片描述

图x YTM32B1ME05微控制器上的WKU信号
因此,若要确保这些引脚在PowerDown模式下还能继续保持对外部信号变化的感应能力,就需要确保在PowerDown模式下,这些引脚的GPIO控制时钟源仍能工作。此时肯定不能使用总线时钟或者PLL之类的,可以选用SIRC或者SXOSC这种耗电较低的时钟源。

在这里插入图片描述

图x WKU的唤醒引脚控制寄存器PCR

而WKU的唤醒引脚标志位寄存器WKU_PER中标记了触发唤醒的引脚。这个寄存器的32位分别对应一个引脚,因此我猜想,这可能也是限制当前YTM32微控制器芯片最多仅能使用32个GPIO引脚作为唤醒源的一个条件。当然,这也算不上限制,如果真有需要,就再加一个WKU_PER2寄存器好了。

WKU为管理来自于RESET引脚的唤醒信号,专门设计了寄存器WKU_RPCR。分别对应是否使用RESET引脚唤醒PowerDown模式(是否作为唤醒源的差别仅在于是否执行那个唤醒的中断服务程序)、输入信号滤波器(抗干扰)和滤波器的时钟源。注意,此处的滤波器实际是信号检测单元,RESET引脚无论如何都是输入信号与WKU无关,但WKU从中撷取一脉信号,作为WKU的唤醒信号。如图x所示。

在这里插入图片描述

图x WKU的复位引脚控制寄存器RPCR

WKU模块除了可以使用GPIO引脚唤醒中断,还能配置捕获来自于别的能在PowerDown模式下存活的模块,例如RTC、LPTMR、ACMP等。对应可以在WKU_MER[WUME]寄存器中启用。如图x所示。

在这里插入图片描述

图x WKU可以捕获来自其它PowerDown模式外设的唤醒触发信号

PCU模块

PCU(电源管理单元,Power Control Unit),被冠以管理电源的名字,但在大多数情况下是一个被动监控电源的模块。芯片系统对PMC的核心单元,调压器VDD、VDD25和VDD11,都是由硬连线固定好了。至于这些硬连线是如何连接的,就需要用户在具体使用某个外设模块时,查阅本文提到的各种芯片具体相关的表格。

PCU模块中设计了一些标志位用以监控供电系统的情况PCU_SSTSPCU_STS,可以启用一些中断,包括VDD电压过高PCU_INTE[HVD50IE]、VDD25电压过高PCU_INTE[HVD25IE]、VDD11电压过高PCU_INTE[HVD11IE],(PCU的绝大部分监控机制都是考虑高压警告,对低压检测LVD真是放心)。

对软件用户来说,相对常用的控制位都在PCU_CTRL寄存器中,用于切换YTM32自家实现的两个低功耗模式。

在这里插入图片描述

图x PCU的控制寄存器PCU_CTRL

若需要进入StandBy模式或者PowerDown模式,需要先将PCU_CTRL[STANDBYEN]或者PCU_CTRL[RPMEN]控制器置位,然后再送水服用,咳…咳…,再使用WFI命令启动休眠过程。

RESET引脚真是个香馍馍,RCU、WKU都有专门针对RESET设计的寄存器。

应用要点(软件)

YTMicro SDK中设计了rcu_driverwku_driverpower_manager等驱动组件,为管理YTM32微控制器的电源系统提供了API。并创建了powermodepower_downpower_down_ram_retention等样例工程,演示切换功耗模式的用法。

总结

本文梳理了YTM32电源管理系统中全部5个功耗模式,以及管理供电系统的外设和相关的外设模块,详描了其中的工作机制。电源管理系统相对其他可编程的外设,灵活度较少,很多机制都是固化在硬件电路系统(模拟设计)中,对软件开发者来说,不是很容易掌控。使用电源管理系统,更偏重去了解其中的工作机制,从而让软件配合其工作。毕竟电路已经固化了,但软件是可编程的。

最后回答一开始提出的问题:

  • 在低StandBy模式下,可以通过YTM32芯片的任意GPIO引脚唤醒MCU,并且唤醒后可以复原至早先休眠的地方。
  • 如果在更低功耗的PowerDown模式下(YTM32B1L系列未配备,仅在YTM32B1M系列上实现),就只能通过预设的部分引脚,通过WKU模块实现唤醒功能,并且唤醒后,需要从复位开始,重新运行应用软件。

在GPIO外设模块的功能介绍中,说明GPIO能够实现在低功耗模式下的异步唤醒(没有总线时钟的驱动),用以产生中断触发、DMA触发,或是别的支持的触发信号。如图x所示。

在这里插入图片描述

图x GPIO特性中关于低功耗和唤醒的相关介绍

在YTM32B1Lx手册中关于GPIO功耗模式的介绍中,说明如果支持Sleep/DeepSleep/Standby模式的情况下,可以通过GPIO中断事件(同步或者异步时钟),唤醒MCU。

在这里插入图片描述

图x GPIO模块从Sleep/DeepSleep/Standby模式唤醒

但在YTM32B1Mx手册中关于GPIO的描述中,提到,如果要从PowerDown模式下唤醒,则必须通过WKU模块唤醒。(YTM32B1Lx系列为集成WKU,并且也不支持PowerDown模式):

在这里插入图片描述

图x GPIO模块从PowerDown模式唤醒

参考文献

  • YTM32B1ME0x_RM_v1.3.pdf
  • YTM32B1MD1x_RM_v1.1.pdf
  • YTM32B1LE0x_RM_v1.4.pdf
  • Power Management for Kinetis and ColdFire+ MCUs, https://www.nxp.com/docs/en/application-note/AN4503.pdf
  • Low Power Experience Sharing, https://www.nxp.com/webapp/Download?colCode=DWF14_APF_IND_LOW_POWER&location=null

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/93611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter+SpringBoot实现ChatGPT流实输出

FlutterSpringBoot实现ChatGPT流式输出、上下文了连续对话 最终实现Flutter的流式输出上下文连续对话。 这里就是提供一个简单版的工具类和使用案例,此处页面仅参考。 服务端 这里直接封装提供工具类,修改自己的apiKey即可使用,支持连续…

Python使用词云图展示

网上看到一个txt文本信息,共2351条饭否记录,据说是微信之父每天发的饭否记录,其实我不知道什么是饭否。我读取这个文本内容,展示到词语图上。之前也使用过,但是好久没有玩Python了,称假期空闲,练…

Spring的注解开发-注解方式整合MyBatis代码实现

之前使用xml方式整合了MyBatis,文章导航:Spring整合第三方框架-MyBatis整合Spring实现-CSDN博客 现在使用注解的方式无非是就是将xml标签替换为注解,将xml配置文件替换为配置类而已。 非自定义配置类 package com.example.Configure;import c…

黑马头条项目环境搭建

注册中心网关配置 spring:cloud:gateway:globalcors:add-to-simple-url-handler-mapping: truecorsConfigurations:[/**]:allowedHeaders: "*"allowedOrigins: "*"allowedMethods:- GET- POST- DELETE- PUT- OPTIONroutes:# 平台管理- id: useruri: lb://…

c# 委托 事件 lambda表达式

委托 C/C中的函数指针实例: typedef int (*Calc)(int a, int b); //这里必须加括号 int Add(int a, int b) {return a b; } int Sub(int a, int b) {return a - b; } int main() {int x 100;int y 200;int z 0;Calc funcPoint1 &Add;Calc funcPoint2 &am…

Android学习之路(19) ListView详解

一.ListView简介 在Android开发中&#xff0c;ListView是一个比较常用的控件。它以列表的形式 展示具体数据内容&#xff0c;并且能够根据数据的长度自适应屏幕显示。 二.ListView简单用法 代码部分 1.布局界面 activity_main.xml 代码&#xff1a; <?xml version"…

新手学习笔记-----编译和链接

目录 1. 翻译环境和运⾏环境 2. 翻译环境&#xff1a;预编译编译汇编链接 2.1 预处理 2.2 编译 2.2.1 词法分析 2.2.2 语法分析 2.2.3 语义分析 2.3 汇编 2.4 链接 3. 运⾏环境 1. 翻译环境和运⾏环境 在ANSI C的任何⼀种实现中&#xff0c;存在两个不同的环境。 第…

LSTM+CRF模型

今天讲讲LSTM和CRF模型&#xff0c;LSTM&#xff08;长短期记忆&#xff09;是一种特殊的循环神经网络&#xff08;RNN&#xff09;模型&#xff0c;用于处理序列数据、时间序列数据和文本数据等。LSTM通过引入门控机制&#xff0c;解决了传统RNN模型在处理长期依赖关系时的困难…

win10 关闭病毒防护

windows10彻底关闭Windows Defender的4种方法 - 知乎

华为鸿蒙手表开发之动态生成二维码

华为鸿蒙手表开发之动态生成二维码 前言&#xff1a; 最近入职新公司&#xff0c;由于之前的哥们临时离职&#xff0c;走得很突然&#xff0c;所以没有任何交接和文档&#xff0c;临时顶上公司手表应用的上架&#xff0c;更换了新的密钥和key之后重新测试功能和流程&#xff…

from PIL import Image,文字成图,ImageFont import jieba分词,input优雅python绘制图片

开始的代码 import os from PIL import Image, ImageDraw, ImageFont import jiebadef generate_image_with_white_bg(text, font_path, output_path):# 设置图片大小和背景颜色image_width 800image_height 600bg_color (255, 255, 255) # 白色# 创建图片对象image Imag…

正点原子嵌入式linux驱动开发——TF-A初探

上一篇笔记中&#xff0c;正点原子的文档简单讲解了一下什么是TF-A&#xff0c;并且也学习了如何编译TF-A。但是TF-A是如何运行的&#xff0c;它的一个运行流程并未涉及。TF-A的详细运行过程是很复杂的&#xff0c;涉及到很多ARM处理器底层知识&#xff0c;所以这一篇笔记的内容…

竞赛选题 机器视觉人体跌倒检测系统 - opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 机器视觉人体跌倒检测系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&…

654.最大二叉树

力扣题目地址(opens new window) 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给…

如何在 Windows 上安装 ONLYOFFICE 协作空间社区版

ONLYOFFICE 协作空间是一个在线协作平台&#xff0c;帮助您更好地与客户、业务合作伙伴、承包商及第三方进行文档协作。今天我们来介绍一下&#xff0c;如何在 Windows 上安装协作空间的自托管版。 ONLYOFFICE 协作空间主要功能 使用 ONLYOFFICE 协作空间&#xff0c;您可以&a…

PowerPoint如何设置密码?

PowerPoint&#xff0c;也就是PPT&#xff0c;是很多人工作中经常用的办公软件&#xff0c;而PPT和Word、Excel等一样可以设置密码保护。 PPT可以设置两种密码&#xff0c;一种是“打开密码”&#xff0c;也就是需要密码才能打开PPT&#xff1b;还有一种是设置成有密码的“只读…

vue ant 隐藏列

vue ant 隐藏列 重要代码 type: FormTypes.hidden{ title: 序号, key: barCode, width: 10%, type: FormTypes.hidden},

ARM-day2

1、1到100累加 .text .global _start_start:MOV r0, #1ADD r1,r0, #1fun:ADD r0,r0,r1ADD r1,r1, #1cmp r1, #0x65moveq PC,LRbl funstop:b stop.end2、思维导图

105.从前序与中序遍历序列构造二叉树

力扣题目链接(opens new window) 根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如&#xff0c;给出 前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7] 返回如下的二叉树&#xff1a; class Solution { public:Tr…

使用WPS自动化转换办公文档: 将Word, PowerPoint和Excel文件转换为PDF

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…