YTM32的低功耗PowerDown模式及唤醒管理器WKU模块

文章目录

    • Introduction
    • 专门的唤醒源管理器WKU
      • 外部的唤醒引脚
      • 内部的触发信号
    • 进入PowerDown模式的操作流
      • 进入低功耗模式
      • 配合使用的其他模块
    • 性能指标
      • 低功耗电流
      • 唤醒时间
    • Conclusion

Introduction

YTM32的低功耗系统中有设计了多种工作模式,功耗从高到低,包括:正常工作模式(Active Mode)、休眠模式(Sleep Mode)、深度休眠模式(DeepSleep Mode)、待机模式(Standby Mode)和掉电模式(PowerDown Mode)。其中Active Mode、Sleep Mode和DeepSleep Mode是Arm处理器内核定义的通用功耗模式,分别对应着芯片系统正常工作、停用CPU时钟但不停用系统总线时钟,以及进一步停用系统总线时钟的三种情况。在有多组内部调压器(regulator)的MCU功耗管理系统中,在这三种常规的功耗模式下,在芯片内部通常仍设计使用同一个高压调压器(例如LDO25)供电,此时,在不同工作模式下,通过逐步停用芯片内部各功能区域的时钟,可以实现降低系统功耗。

YTM32在通用功耗模式之外,设计了Standby Mode,相对于Arm定义的DeepSleep Mode,StandBy Mode切换使用芯片内部的处于节能模式的低压调压器(LDO11)为部分片内模块供电,高压调压器处于不激活的节能模式,如此,可以进一步减少系统的功耗。此时,芯片内部只有能够使用低压调压器工作的模块还能存活,例如一些低速的时钟源(SIRC、SXOSC),以及可以使用这些时钟源的外设(LPTMR、SPI、I2C等)。

进一步在PowerDown模式中,彻底停用了高压调压器,仅保留处于节能模式下的低压调压器为部分模块供电,对应也停用了一些原本还可以在Standby模式下存活的外设,仅保留了少量外设,包括SIRC(选配)、SXOSC(选配)、LPTMR、RTC、ACMP等,以及将这些外设的触发事件作为唤醒源唤醒芯片系统的WKU模块。特别注意,在PowerDown模式中,Flash和大部分SRAM(除了一小块特殊保留供电的区域)都已经停电,CPU不能从Flash中读取程序,SRAM中保存的数据也已经丢失,此时,即使原地唤醒MCU,也已经不具备原地唤醒的条件。因此,相比于其他低功耗模式下唤醒从原地醒来继续接着干活,PowerDown模式唤醒后,将直接进入硬件复位流程,通过重新启动过程,重新建立程序的运行环境。

由于PowerDown模式不是原地唤醒,而是进入复位流程重新执行程序,这对开发者不是很友好,因此很多用户都尽量避免使用这种模式。但对于追求极限低功耗的应用场景,PowerDown模式极度省电的特性也能帮助开发者实现最优的低功耗方案。本文整理了使用要点,供开发者了解和利用好PowerDown模式。

另外,关于片内调压器的节能模式,在寄存器字段PCU_CTRL[FASTREC]的介绍中,提到了一些有意思的说法:

This bit controls the recovery time from Low Power Mode (LPM) to Performance Mode (FPM). At recovery from Low Power Mode all the capacitors from the secondary supplies have to re recharged. This high current demand, that might not be met by the supply driving primary domain. When selecting the fast recovery time, the curre echarging is approximately 3 times higher than for FASTREC=0.

这里是说,当芯片系统从低功耗模式中恢复时,需要为次级负载(也就是外设模块)的电容充电(对应于芯片RESET引脚和VDD引脚上的电容)。相对于常规的从低功耗模式下恢复的机制,有一种快速回复模式,如果启用了快速恢复的功能,则会(用更大的电流)加速这个充电的过程,此时在主电源域(VDD)上流过的电流是未启用快速恢复功能的将近3倍,这样的大电流对外部供电系统也提出了要求。

专门的唤醒源管理器WKU

相对于其他低功耗工作模式可以通过任何外设的中断事件唤醒,在PowerDown模式下,Arm核的中断管理器NVIC都已经停用了,不能捕获中断事件。此时,必须使用具体芯片上专门设计的唤醒管理器WKU(概念类似于NXP产品中的LLWU),搜集触发信号,进一步唤醒MCU。需要特别注意的是,WKU模块仅能在PowerDown模式模式中时钟,WKU模块是不起作用的,

WKU模块(Wakeup Unit)可以捕获两种事件以唤醒PowerDown模式下的MCU:

  • 唤醒引脚上的电平变化
  • MCU内部模块发出的触发信号

外部的唤醒引脚

其中,WKU监控最多32个(受限于32位的WKU_PFR寄存器的宽度)唤醒引脚(Wake-Up Pin)上的电平变化,用户可在每个独立的WKU_PCRn[WUPE]寄存器字段中,为对应的唤醒引脚单独设置唤醒的事件,为上升沿、下降沿或者任一边沿。如图x所示。

在这里插入图片描述

图x WKU_PCR寄存器中配置唤醒引脚的触发事件

当配置启用唤醒引脚捕获外部引脚上特定的边沿触发事件,就相当于是把这些外部引脚都变成了工作在PowerDown模式下的复位引脚,外部电路可以通过它们复位并唤醒MCU。

从图x中还可以看到,在WKU_PCR寄存器唤醒引脚启用滤波器,以对外部输入的信号“消抖”。如果不启用滤波器,单纯监测外部电平变化产生唤醒请求,则MCU在PowerDown模式下也可以停用SIRC和SXOSC。但如果要启用过滤器,就必须启用对应的时钟源,因为过滤器是基于某一个时钟源进行连续采样和判别,从而实现“消抖”的功能。

这里提到的唤醒引脚,是WKU模块内部的信号,但在具体芯片上,WKU的唤醒引脚都是绑定到MCU的具体引脚上的,例如,在YTM32B1ME05的手册中,就有具体列出的引脚映射关系,如图x所示。
在这里插入图片描述

图x WKU唤醒引脚同芯片引脚的绑定关系

除了WKU管辖的32个普通的唤醒引脚,WKU还专门为RESET引脚设计了配置寄存器WKU_RPCR,如图x所示。其中也包含了关于引脚上滤波器的配置字段。另外,可以选配将RESET作为WKU的唤醒源,但若启用,只能通过下降沿触发(同复位控制电平保持一致),而不像别的唤醒引脚可以灵活配置多种边沿模式。

在这里插入图片描述

图x WKU_RPCR寄存器

内部的触发信号

WKU也能够捕获到芯片内部模块主动产生的触发信号,转变成唤醒事件。当然,前提是这些模块也能够在PowerDown模式下存活并工作。这些能够在PowerDown模式下存活并且能够产生触发信号给WKU的模块,在每个具体的MCU上都是专门定制的,以YTM32B1ME05为例,在WKU_MER寄存器中,就设计了能够捕获到的内部模块的开关,如图x所示。

在这里插入图片描述

图x WKU_MER寄存器

从寄存器字段WKU_MER[WUME]中可以看到,WKU能够捕获到内部模块的触发信号有RTC_IRQRTC_Seconds_IRQLPTMR0_IRQ,以及ACMP0_IRQ。关于此处使用的IRQ信号,对应需要RTC、LPTMR及ACMP0也要启用中断的。但此时并不是说能执行这些外设模块的中断服务程序(Flash和SRAM都断电了,不能访问程序也不能访问栈),而是这些外设模块在原本设计的中断事件产生了原本要发给NVIC中断管理器的触发信号,被WKU捕获,用作了唤醒源而已。类似地,本节前文内容中提到的WKU_PCR寄存器中,也要求当使用唤醒引脚时,也要在寄存器字段WKU_PCR[WUPIE]中开启对应的中断开关,不为调用中断服务程序,仅用于产生触发信号作为唤醒源而已。

这样分析下来,中断向量表中的WKU_IRQn也只是为了在通用的NVIC框架下管理WKU模块的中断信号而已,不见得真的能用上WKU_IRQHandler,所以,有一些非常细致的开发者会关心WKU唤醒后,是先执行WKU_IRQHandler中程序还是先执行复位流程。结论是,压根不建议使用WKU_IRQHander,还是之前强调过的,PowerDown模式下,Flash和SRAM都断电了,不具备原地执行程序的条件。

进入PowerDown模式的操作流

在进入PowerDown模式之前,一定要预先配置好唤醒源。

在进入PowerDown模式之前,一定要预先配置好唤醒源,否则芯片睡下去之后,就叫不醒了。咳咳,好吧,直接断电重新上电(POR)或者硬复位也可以让芯片恢复到正常工作状态,等价于PowerDown模式的唤醒行为。但这种唤醒其实是人工唤醒,不是监测外部触发信号唤醒,在实际产品中是没有意义的。不会真的有人将外部唤醒信号连到RESET引脚上吧,万一程序正常运行的时候被外部的触发信号意外复位,岂不是飞来横祸。。。

配置唤醒源的操作,是可以在程序正常运行的模式下完成的。配置引脚或者配置片内外设作为唤醒源都可以。若配置片内外设作为唤醒源,例如LPTMR,需要预先将作为唤醒源的外设及依赖的时钟源、电源都配置成可以在PowerDown模式下存活的状态,如此后续系统的电源管理电源PMU切换至PowerDown模式时,不影响唤醒源继续工作。

进入低功耗模式

PowerDown模式作为低功耗模式的扩展,也遵循使用WFI指令进入休眠的操作。但进入休眠之前,还需要进行一些专门的配置,告诉PMU将要进入的低功耗模式是PowerDown模式,而不是别的低功耗模式。

在YTMicro SDK的power驱动模块中,有关于切换低功耗模式的API,POWER_SYS_SwitchToLowPowerMode(),其中展现了进入PowerDown模式前需要准备的配置工作。

static void POWER_SYS_SwitchToLowPowerMode(const power_manager_user_config_t * const configPtr)
{uint32_t systickCSR;uint32_t cmuCtrl = SCU->CMU_CTRL;/* Configure the hardware layer */switch (configPtr->powerMode){...case POWER_MANAGER_POWERDOWN:SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;PCU->CTRL &= ~(PCU_CTRL_RPMEN_MASK | PCU_CTRL_STANDBYEN_MASK);PCU->CTRL |= PCU_CTRL_RPMEN_MASK;break;...}/* Disable CMU before entering low power mode */SCU->CMU_CTRL = 0;SCU->CMUSTS = SCU->CMUSTS;/* Disable systick before entering low power mode */systickCSR = SysTick->CTRL;SysTick->CTRL = 0x00;if (configPtr->sleepOnExitValue){SCB->SCR |= SCB_SCR_SLEEPONEXIT_Msk;}else{SCB->SCR &= ~(SCB_SCR_SLEEPONEXIT_Msk);}__asm("wfi\n");/* Restore systick */SysTick->CTRL = systickCSR;/* Restore CMU control register */SCU->CMU_CTRL = cmuCtrl;
}

首先,要在Arm核规范的系统控制块模块中的SCB_SCR寄存器中,启用SCB_SCR_SLEEPDEEP_Msk位,表示在Arm核看来,PowerDown模式也是同自身的DeepSleep模式处于同一个级别的低功耗模式。然后在YTM32自己的功耗管理单元PCU的寄存器PCU_CTRL中,指定目标低功耗模式时DeepSleep而不是StandBy模式。RM手册中有PCU_CTRL[PCU_CTRL_RPMEN_MASK]寄存器的描述,如图x所示。

在这里插入图片描述

图x PCU_CTRL寄存器中的STANDBYEN和RPMEN控制字段

配合使用的其他模块

在进入PowerDown模式后,整个芯片系统以一种“不正常”的工作方式运行,需要提前关闭一些监测芯片正常工作的外设模块,防止误报错,例如,监测时钟系统稳定与否的CMU(Clock Monitor Unit)模块,监测系统供电低压LVD(Low Voltage Detection)模块等。

YTM32微控制器片内集成的复位管理模块RCU(Reset Control Unit),也为唤醒复位后的程序提供了复位事件的标志位,见RCU_RSSR寄存器,用来指示本次复位可是来自于从PowerDown模式下唤醒(使用RCU_RSSR[POR_LVD]标志位)。这些标志位是Sticky的,为了确保他们能够正确地指示最近一次的复位事件,程序在每次复位判定复位原因后,都需要手动清零,为记录下次复位原因做准备。

RCU_RSSR寄存器中,还设计了一个LPACK字段,用于指示当进入低功耗模式(包括DeepSleep、StandBy和PowerDown)失败超时产生的复位事件。如图x所示。

在这里插入图片描述

图x RCU_RSSR中的寄存器字段LPACK

手册中对RCU_RSSR[LPACK]字段的机制有进一步的说明:

The low power mode entry acknowledge timeout reset is generated if the MCU fails to enter low power
mode mode within 2^24 cycles of SIRC clock.

细心的读者会注意到,这里有个低功耗模式的应答和超时的概念。我试着演绎一下应答和超时的工作机制。当软件配置PCU进入低功耗模式后,PCU不是立刻粗暴地停用调压器,直接断开各外设模块的时钟供给,而是先给各外设模块发出断电的请求,各外设模块收到请求后,自行以安全的执行序列进入安全状态,准备休眠,并给PCU回复应答,可以断电了。PCU在收到所有外设模块的断电应答确认后,开始停用调压器,整个系统可以平稳切换至低功耗模式。但是,若因为某些原因(例如外设模块内部的状态机意外地执行到某个死锁的状态,或者任务负载过重来不及调度),导致外设模块在收到断电请求后,来不及在一个预留的事件段内切换到安全状态,更别说再回发断电应答了,那PCU不会那么智能地选择帮助外部模块诊断(各种稀奇古怪的)回复超时的原因,而是选择直接断电。此时的外设,像极了被宿管阿姨熄灯时,没准备好上床睡觉的各位同学。这种情况下断电,外设可能会被定格在不确定的情况下,产生额外的漏电,导致整个系统未能达到预期的低功耗性能指标。

RCU_RSSR[LPACK]标志位就反馈了这样的一种情况,当重新唤醒复位后,交由软件判定,并对上个休眠周期中未能成功进入低功耗的原因进行诊断。

SCU模块中,配置SIRC时钟源的寄存器位SCU_SIRC_CTRL[SIRC_PD_ EN],可以选配在PowerDown模式下,SIRC是否可以继续存活。配置SXOSC(低速晶振,32.768kHz)时钟源的寄存器位SCU_SXOSC_CTRL[SXOSC_PD_ EN],可以选配在PowerDown模式下,SXOSC是否可以继续存活。

性能指标

在DataSheet文档中,可以查阅到YTM32微控制器在PowerDown及其他低功耗模式下的性能指标,包括低功耗下的极限静态电流,以及唤醒时间等等。

低功耗电流

在这里插入图片描述

图x DS手册中关于PowerDown模式下静态功耗的指标

唤醒时间

在这里插入图片描述

图x PowerDown模式恢复到正常运行模式的时间长度

Conclusion

PowerDown模式可以实现最低的功耗模式,在超低功耗模式下,通过WKU管理的多种唤醒源,通过复位(而不是原地)唤醒微控制器芯片。

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

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

相关文章

Spring之 国际化:i18n

1、i18n概述 国际化也称作i18n,其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数。由于软件发行可能面向多个国家,对于不同国家的用户,软件显示不同语言的过程就是国际化。通常来讲,软件中的国…

2.6 KERNEL LAUNCH

图2.15在vecAdd函数中显示最终主机代码。此源代码完成了图2.6.中的骨架。2.12和2.15共同说明了一个简单的CUDA程序,该程序由主机代码和设备内核组成。该代码是硬接的,每个线程块使用256个线程。然而,使用的线程块的数量取决于向量&#xff08…

java基于SSM的游戏商城的设计与实现论文

基于SSM的游戏商城的设计与实现 摘 要 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于游戏信息的管理和控制,采用人工登记的方式保存相关数据,这种以…

【C++】- 类和对象(!!C++类基本概念!this指针详解)

类和对象 引入类类的定义类的访问限定操作符类的作用域类的实例化类对象模型this指针 引入类 在 C中,引入了一个新的定义----------类。类是一种用户自定义的数据类型,用于封装数据和行为。类可以看作是一个模板或蓝图,描述了一组相关的数据和…

Android 集成vendor下的模块

Android 集成vendor下的模块 ,只需要在 PRODUCT_PACKAGES 加上对应的模块名,编译的时候就会执行对应模块的bp文件,集成到系统中 PRODUCT_PACKAGES \WallpaperPicker \Launcher3 \com.nxp.nfc Android11 Framework Vendor下自定义系统…

SpringBoot 如何 返回页面

背景 RestController ResponseBody Controller Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。 Mapping ResponseBody 也会出现同样的问题。 解…

nginx访问路径匹配方法

目录 一:匹配方法 二:location使用: 三:rewrite使用 一:匹配方法 location和rewrite是两个用于处理请求的重要模块,它们都可以根据请求的路径进行匹配和处理。 二:location使用: 1:简单匹配…

SSH 密钥身份验证和管理

安全外壳协议(Security Shell Protocol)是一种应用于计算机网络的安全通信协议,其提供的服务可用于保护网络上的连接和数据传输安全性,其核心思想是为网络上的两台计算机之间搭建一个安全的外壳,以保护数据传输的安全性…

Python中的装饰器

顾名思义,函数装饰器就是对这个函数进行了装饰,比如在函数的前后进行日志打印等。在Python中,装饰器是一种特殊的语法,用于简化函数或方法的定义和调用。装饰器允许你在不修改原始函数代码的情况下,通过在其上应用装饰…

Ubuntu本地快速搭建web小游戏网站,公网用户远程访问

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,…

css文本溢出处理——单行、多行

日常开发中,经常会遇到需要展示的文本过长,这种情况下,为了提高用户的使用体验,最常见的处理方式就是把溢出的文本显示成省略号。 处理文本的溢出的方式:1)单行文本溢出; 2)多行文本…

TIA Portal 各版本安装指南

TIA Portal下载链接 https://pan.baidu.com/s/1Jat53vGz1rXfLm7kTldz-Q?pwd0531 1.鼠标右击【TIA portal V19 (64bit)】压缩包(先点击“显示更多选项”)选择【解压到 TIA portal V19 (64bit)】。 2.打开解压后的文件夹,鼠标右击【NoRestart…

Hive实战:分科汇总求月考平均分

文章目录 一、实战概述二、提出任务三、完成任务(一)准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 (二)实现步骤1、启动Hive Metastore服务2、启动Hive客户端3、创建分区的学生成绩表4、按分区加载数据5、查看分区…

系统学英语 — 音标音节 — 能读就能写

目录 文章目录 目录概览12 个单元音8 个双元音28 个辅音音节 概览 音标发音器:https://en-yinbiao.xiao84.com/biao/ 12 个单元音 序号发音音标助记字母组合备注1拖长音 前元音[i:]eate、ea、ee、ie2短促音 前元音[i]bige、i、y3拖长音 后元音[a:]aska、ar4短促…

完善 Golang Gin 框架的静态中间件:Gin-Static

Gin 是 Golang 生态中目前最受用户欢迎和关注的 Web 框架,但是生态中的 Static 中间件使用起来却一直很不顺手。 所以,我顺手改了它,然后把这个改良版开源了。 写在前面 Gin-static 的改良版,我开源在了 soulteary/gin-static&a…

【开源】基于JAVA语言的服装店库存管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 服装档案模块2.4 服装入库模块2.5 服装出库模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 服装档案表3.2.3 服装入库表3.2.4 服装出库表 四、系统展示五、核心代码5.…

STM32之模拟IIC总线控制SHT20温湿度芯片

一、IIC总线概述 1、IIC总线介绍 I2C (Inter-Integrated Circuit)总线产生于在80年代, 由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备, 最初为音频和视频设备开发。I2C总线两线制包括:串行数据SDA&#xff08…

Rustdesk打开Win10 下客户端下面服务不会自启,显示服务未运行

环境: Rustdesk1.19 问题描述: Rustdesk打开Win10 下客户端下面服务不会自启,显示服务未运行 解决方案: 1.查看源代码 pub async fn start_all() {crate::hbbs_http::sync::start();let mut nat_tested = false;check_zombie()

银行十大主题域

当事人、产品、协议、事件、资产、财务、机构、地域、营销、渠道 便于记忆: 银行是一个企业,同时也是一个机构,涉及企业机构就会有资产,财务的存在,银行有自己的产品(信用卡,黄金,期…

【小沐学CAD】开源Assimp库导入三维模型(C++、Python)

文章目录 1、简介2、下载编译3、代码测试3.1 C3.2 pyassimp(Python) 结语 1、简介 https://github.com/assimp/assimp Open Asset Import Library 是一个库,用于将各种 3D 文件格式加载为共享的内存格式。它支持 40 多种用于导入的文件格式和…