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

news2025/2/26 5:18:31

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.coloradmin.cn/o/1058008.html

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

相关文章

树概念及结构

.1树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。 有一个特殊的结点,称为根结点&a…

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

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

【Leetcode】 131. 分割回文串

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1: 输入:s "aab" 输出:[["a","a"…

华为云云耀云服务器L实例评测|Huawei Cloud EulerOS 自动化环境部署

[toc] Huawei Cloud EulerOS 自动化环境部署 云耀云服务器L实例【Huawei Cloud EulerOS 2.0 64bit】 Python Git Google Chrome Chromedriver Selenium More… 1. Python 镜像创建后自带。 2.Git 拉取项目。 sudo yum install git3. Google Chrome 使用root权限或sudo权…

WinFroms基于三层构造设计模式的框架所设计的代码生成器1.0

软件开发模式——三层架构 此文章需要在读懂 以上这篇架构模式的基础上再继续往下深入学习简化 目录 1.前言 2.框架准备 3 .coboBox的数据绑定 4.创建文件夹 5.工具方法 6.生成一个数据库访问助手类SqlHelper 7.生成模型层Model 8.生成数据访问层DAL层 9.生成业务…

VD6283TX环境光传感器驱动开发(3)----测试闪烁频率代码

VD6283TX环境光传感器驱动开发----3.测试闪烁频率代码 概述视频教学样品申请源码下载参考代码开发板设置测试结果 概述 ST提供了6283A1_AnalogFlicker代码在X-NUCLEO-6283A1获取闪烁频率,同时移植到VD6283TX-SATEL。 闪烁频率提取主要用于检测光源的闪烁频率&#…

在pycharm中出现下载软件包失败的解决方法

一. 一般情况下我们会选择在设置中下载软件包,过程如下. 1. 直接点击左上角的文件, 再点击设置, 再点击项目, 在右边选择python解释器,点击号,输入要下载的软件包, 在下面的一系列的包中选择相对应的包,点击安装就可以了,有的时候我们下载的是最新的版本,如果要下载固定的版本…

数据结构与算法——19.红黑树

这篇文章我们来讲一下红黑树。 目录 1.概述 1.1红黑树的性质 2.红黑树的实现 3.总结 1.概述 首先,我们来大致了解一下什么是红黑树 红黑树是一种自平衡的二叉查找树,是一种高效的查找树。红黑树具有良好的效率,它可在 O(logN) 时间内完…

爬虫HTTP代理:获取多种类型数据的神器

爬虫HTTP代理是一种常用的数据采集工具,它可以帮助用户获取各种类型的数据。以下是爬虫HTTP代理能获取的一些常见数据: 网页数据 爬虫HTTP代理最常用的功能就是获取网页数据。通过代理服务器,用户可以获取到被封锁或限制访问的网站数据&…

pytorch之nn.Conv1d详解

自然语言处理中一个句子序列,一维的,所以使用Conv1d

Linux--socket编程

socket套接字编程 一、服务器和客户端的开发步骤: 1、创建套接字 2、为套接字添加信息(ip地址和端口号) 3、监听网络连接 4、监听到有客户端接入,接受连接(如没有接入,会发生阻塞到) 5、数据…

【题库】咸鱼之王答题挑战题库大全

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] [{name: , value: 未匹配到内容},# 第一期{name: 《三国演义》中,「大意失街亭」的是马谩?, value: 对},{name: 《三国演义》中,「挥泪斩马谩」的是孙权?, value: 错…

算法设计与分析第一周题目

Leetcode 4.寻找两个正序数组的中位数 题目描述: 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 解法1:先排序再查找 先…

上海建筑模板厂家:承载城市梦想的力量

上海,作为中国最具国际化和现代化的城市之一,拥有令人瞩目的建筑风貌和繁荣的建筑业。在这座充满活力的城市里,建筑模板作为建筑施工的重要组成部分,发挥着不可或缺的作用。而上海建筑模板厂家作为支撑城市发展的重要力量&#xf…

北大硕士7年嵌入式学习经验分享

阶段 1 大一到大三这个阶段我与大多数学生相同: 学习本专业知识(EE专业),学习嵌入式软件开发需要的计算机课程(汇编原理,计算机组成原理,操作系统,C语言等)&#xff0c…

Git使用【中】

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析3 目录 👉🏻分支管理分支概念git branch(查看/删除分…

MacOS怎么安装Nacos(附带:Windows系统)

MacOS安装Nacos(一定要配置JDK的环境变量,后面告诉你为什么?) (1)进入Nacos官网,前往githubhomehomehttp://nacos.io/zh-cn/ (2)点击右下角的releases 然后点击Tags 选择…

【算法】排序——选择排序和交换排序(快速排序)

主页点击直达:个人主页 我的小仓库:代码仓库 C语言偷着笑:C语言专栏 数据结构挨打小记:初阶数据结构专栏 Linux被操作记:Linux专栏 LeetCode刷题掉发记:LeetCode刷题 算法头疼记:算法专栏…

React18入门(第一篇)——JSX、TSX语法详解

文章目录 一、JSX 语法简介二、和 HTML 标签的几点不同三、JSX 属性四、JSX 事件4.1 简单点击事件4.2 类型限制4.3 带参数,箭头函数 五、插入 JS 变量六、JSX 中使用条件判断七、循环 一、JSX 语法简介 JSX - 是 JS 的扩展,写在 JS 代码里面&#xff0c…

【Docker】Docker的应用包含Sandbox、PaaS、Open Solution以及IT运维概念的详细讲解

前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 📕作者简介:热…