查看: 15650|回复: 12

[原创] 《LPC入门笔记》之LPC系列单片机低功耗概述

[复制链接]
  • TA的每日心情
    奋斗
    2017-1-17 10:45
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    38

    主题

    395

    帖子

    3

    高级会员

    Rank: 4

    积分
    780
    最后登录
    2023-11-17
    发表于 2017-3-16 01:17:41 | 显示全部楼层 |阅读模式
    作为一个Kinetis的老粉,现在也与时俱进开始研究LPC系列的单片机了。在看低功耗相关的材料时,整理了一则学习笔记。如有不当之处,请大家提意见,共同学习。

    功耗管理,对于数字模块就是管理时钟,对于模拟模块就是管理供电(电压和电流)

    LPC54608单片机使用SYSCON_PDRUNCFG0寄存器管理片上模拟模块在正常运行及休眠模式的供电。而在SYSCON_PDSLEEPCFG寄存器中可以设定模拟模块在不同模式下自动切换供电开关,即在特定功耗模式(Deep Sleep mode)下,各模拟模块的供电情况,是否能够继续存活。

    LPC单片机片上包含两个供电域:
    - 可控主供电域。通过VDD供电,经过片上调压器,服务于core,peripheral,memory,input及output。
    - 始终供电域。通过VDD供电,直接服务于RTC和waku-up timer。只要VDD有电,这个供电域就有电。

    管理片上模块用电情况的寄存器位于SYSCON模块中,包括切换CPU的功耗模式、外设模块的供电开关等等。

    LPC单片机支持的几种功耗模式如下:

    1. Active mode
    上电之后的默认工作模式,供电系统全力供电。

    在正常运行模式下,片上的外设模块可以通过AHB的总线开关管理时钟(没错,是时钟不是供电)。芯片上电复位之后,在如下寄存器中载入默认值:
    - SYSCON_PDRUNCFG0
    - SYSCON_PDRUNCFG1
    - SYSCON_AHBCLKCTRL0
    - SYSCON_AHBCLKCTRL1

    - SYSCON_AHBCLKCTRL2


    在运行时可以通过设定这些寄存器开关模拟模块的电源和数字模块的时钟,从而管理整个片上系统的功耗。具体说来,SYSCON_AHBCLKCTRLn寄存器控制内存和外设的时钟供给。SYSCON_PDRUNCFGn寄存器管理片上外设模拟部分的供电,例如RAM,PLL,振荡器及BOD电路。对于在应用中不需要用到的模块,可以手动关掉它们的时钟(电源)供给,从而节约能量。如果只需要在某些模块在特定的时间段中工作,那么在应用中可以临时打开模块的时钟(供电),用完之后再关掉时钟(供电),能省则省,够用就好。

    系统时钟(给Platform,即芯片内核除了Core之外的模块,供应时钟的时钟源)的时钟源默认来自于FRO,也可以取自于高速外部晶振,PLL的输出,片内振荡器,32kHz的低速外部晶振或是看门狗振荡器。但通常来看,系统时钟的频率越低,功耗越小。如果不用PLL,最好把它关掉,即使用PLL,较低的输出频率也能省电。总之还是那句话,能省就省,够用就要。

    某些外设模块还有一些独立的时钟源及各自的分频器(开小灶),根据应用需要,可以通过编程单独关闭这些外设模块的时钟,而保留时钟源继续,可以为其它模块继续服务。

    2. Sleep mode
    仅仅停止对CPU的供电,而保持外设模块及唤醒定时器的供电。此时,CPU的时钟也会被停掉。

    Sleep mode对应Kinetis单片机中的WAIT模式。此时CPU停止工作,不再执行程序指令。仅仅停掉CPU也能省不少电。之后当被唤醒源或是复位之后,CPU才能恢复工作。在这个模式下,能省多少电基本上就靠CPU自觉了,其它外设模块完全不受影响,该工作继续工作。除了CPU的时钟被停掉,其它任何模块的时钟均不受功耗模式切换的影响,还是按照SYSCON_PDRUNCFGn和SYSCON_AHBCLKCTRLn中的设定来。

    当唤醒信号(来自NVIC)到来之时,CPU被唤醒,继续执行进入休眠状态前后续的执行(跳过“WFI”指令,这句指令已经执行过了,否则也不会睡下去)。也就是从哪摔倒从哪爬起来。如果是通过复位事件唤醒,那就啥都别管了,单片机上程序的执行一切重来。

    3. Deep Sleep mode
    深度休眠模式是可配置的,几乎所有片上模块都可以在这个模式下被停掉,但是唤醒时间可能会更长。深度休眠模式对整个片上系统的工作产生影响,CPU的时钟被停掉,在没有特别设定的情况下,外设模块也将收不到任何内部(常规)时钟,SRAM和寄存器仅仅能保持状态。但是通过编程,某些外设模块仍能够在深度休眠模式下存活,例如:USB,DMIC,SPI,I2C,USART,WWDT,RTC,Micro-tickTimer及BOD。

    在深度休眠模式下,CPU的那个死样子跟在休眠模式下是一样一样的。不同之处在于外设模块:在默认情况下,所有模拟模块的供电全部停掉(硬件自动搞定),但如果预先通过软件在SYSCON_PDRUNCFGn寄存器中设定,也可以特别设定某些模块可以在深度休眠模式下继续工作,这些模块通常是用来作为唤醒源而被特殊关照的,否则不必要的浪费电能就是有点太任性了。在时钟系统这块,主时钟和外设时钟全部停掉,FRO也被关掉,FLASH存储器进入待机自保状态,这一切都是由硬件(PMC模块为主导)自动操作完成的。注意,这里有一些模块是被停掉时钟但是保持供电的模块,这些模块有些可以从额外的时钟源获取时钟驱动信号继续工作,有些就是支持异步驱动模式,即外部事件信号直接驱动唤醒源管理模块(AWIC)。

    深度休眠模式能够节约多少供电消耗,主要还是靠各个模块各自的待机(停电、停时钟后的耗电情况)特性自觉实现的,没有额外的节能减排专用模块(PMC)开始起作用。系统内部的各个模块及寄存器状态仍继续保持,IO端口的电平状态保持不变。

    上文提到,在休眠状况下,仍有许多外设模块可以继续存活从而在必要的情况下产生唤醒事件,包括:USB0, USB1, DMIC, SPI, I2C, USART, WWDT, RTC, Micro-tick Timer, and BOD。此时,FRO,RTC振荡器及看门狗振荡器仍可以继续作为存活模块的时钟源提供时钟驱动信号。甚至在某些情况下,DMA也可以在深度休眠模式下工作。

    在深度休眠模式下,系统的能量主要是通过仍在存活作为唤醒源模块消耗掉的。串行通信外设和引脚中断作为唤醒模块的时候是不消耗主控芯片的功耗的,因为在此时,产生唤醒事件的时钟是由与之相连接的外部电路驱动的。另外需要注意的是,在深度休眠模式下,所有唤醒源的唤醒信号能够进入内核唤醒整个系统,是通过SYSCON_STARTER寄存器和NVIC的中断管理器把控的,只有在进入深度休眠模式前预先留好后门,才能在休眠后再被指定的唤醒事件唤醒。

    编程要点:
    (1)进入深度休眠模式之前要选定唤醒源并在SYSCON_STARTER寄存器中启用对应的唤醒事件,在NVIC中启用对应中断向量。
    (2)选定FR0 12MHz作为系统的主时钟,因为在深度休眠模式下,芯片内部只有这一个时钟还能继续工作。
    (3)禁用BOD及其复位控制(SYSCON_BODCTRL寄存器的第2位和第6位),否则在系统供电降低到一定程度的时候,会触发BOD复位,从而中断进入低功耗的过程。
    (4)配置SYSCON_PDRUNCFGn寄存器,指定哪些模块在深度休眠模式下能够继续存活。
    (5)设定ARM核内部的DeepSleep控制位,再执行“WFI”指令,一个猛子扎入低功耗模式。

    通过如下事件可以讲系统从深度休眠中唤醒:
    (1)通过8个引脚中断通道中的一个引脚捕获到中断触发信号。不过前提是,对应的引脚中断在SYSCON_STARTER寄存器和NVIC中挂上号。
    (2)捕获到在深度休眠模式下仍继续存活的模块(例如RTC,看门狗,串行通信引擎等)所产生的中断信号,同上类似,也需要预先挂号才能为唤醒信号放行。
    (3)使用复位引脚,或是BOD,或是WWDT

    4. Deep power down mode
    深度掉电模式几乎停掉了片上所有模块的供电(比深度休眠模式还要绝),更省电,但对应需要更长的唤醒事件。为了最大范围地省电,整个片上系统(包括CPU及外设模块)都被停电了,只有PMU(管理供电的模块)和RTC(使用外部供电和外部晶振时钟驱动的模块)能够继续工作。芯片唤醒后,不得不执行复位流程,因为没有更多的能量用于保存海量的环境状态信息。

    在深度掉电模式下,芯片内部的SRAM及除了RTC之外的其它寄存器的内容全部丢失(因此也就无法在唤醒时还原,只能重新执行程序),所有的引脚均处于高阻状态(三态)。

    深度掉电模式下,对于软件来讲没有啥可以配置的,除了RTC,芯片上的内核、所有的外设模块全部完蛋。此时,只有RTC作为外设模块产生的中断能够唤醒系统,或者就直接复位。但即使是RTC超时之后唤醒的系统,芯片仍然会走一遍完整的复位过程,之后PMU将会启用片上稳压器为内核供电,当内核供电电压达到POR(上电复位)触发阈值后,系统开始执行复位序列开始复位,所有的寄存器也将被重新还原成复位状态。


    在手册UM10912的Table 161 Peripheral configuration in reduced power modes 表中,列入了LPC54608片上所有外设模块在不同功耗模式下的供电情况。
    1.png
    file:///C:/Users/Andrew/AppData/Local/Temp/enhtmlclip/Image.png

    唤醒过程

    在任何休眠模式(低功耗模式)被唤醒后均返回到正常运行模式(Active mode)。通常情况下,可以通过中断唤醒系统,当不同的功耗模式下还支持更多的唤醒源,在手册UM10912的 Table 162. Wake-up sources for reduced power modes表中,罗列的各个功耗模式下的唤醒源及唤醒条件:

    2-1.png
    2-2.png
    2-3.png

    file:///C:/Users/Andrew/AppData/Local/Temp/enhtmlclip/Image(1).png
    file:///C:/Users/Andrew/AppData/Local/Temp/enhtmlclip/Image(2).png
    file:///C:/Users/Andrew/AppData/Local/Temp/enhtmlclip/Image(3).png
    电源管理调试要点:

    在正常运行模式下,CPU可以正常跑代码,此时可以预先配置好各个模块在不同功耗模式下的开关模式。
    在低功耗模式下,调试模块不能工作。因此在调试低功耗模式的程序时,一定要在下载程序之后断开调试器,重新上电运行。

    附件: LPC系列单片机的功耗管理系统概述——基于LPC54608.pdf (837.3 KB, 下载次数: 160)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-6-18 08:45
  • 签到天数: 812 天

    连续签到: 1 天

    [LV.10]以坛为家III

    66

    主题

    4900

    帖子

    64

    金牌会员

    Rank: 6Rank: 6

    积分
    6324
    最后登录
    2025-8-6
    发表于 2017-3-16 08:28:18 | 显示全部楼层
    多谢分享,期待更多作品
    开心
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2017-10-15 13:16
  • 签到天数: 191 天

    连续签到: 1 天

    [LV.7]常住居民III

    11

    主题

    664

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1722
    最后登录
    2017-10-15
    发表于 2017-3-16 09:36:48 | 显示全部楼层
    谢谢分享                              
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-11-30 16:16
  • 签到天数: 206 天

    连续签到: 1 天

    [LV.7]常住居民III

    74

    主题

    2793

    帖子

    5

    金牌会员

    Rank: 6Rank: 6

    积分
    7895
    最后登录
    2025-4-11
    发表于 2017-3-16 10:13:58 | 显示全部楼层
    这个很好,感谢
    来根华子
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2017-1-17 09:56
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    6

    主题

    49

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    426
    最后登录
    2020-10-17
    发表于 2017-3-16 11:36:07 | 显示全部楼层
    想知道这个是用什么工具导进的?感觉很方便
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    715

    主题

    6374

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    25147
    最后登录
    2025-8-12
    发表于 2017-3-20 09:14:10 | 显示全部楼层
    谢谢楼主分享!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-2 08:40
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    103

    主题

    868

    帖子

    7

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    4342
    最后登录
    2025-8-8
    发表于 2017-3-20 11:29:57 | 显示全部楼层
    谢谢楼主分享!!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3

    帖子

    0

    新手上路

    Rank: 1

    积分
    26
    最后登录
    2018-12-20
    发表于 2017-10-30 11:48:45 | 显示全部楼层
    谢谢楼主分享
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-9-15 08:42
  • 签到天数: 1952 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    1

    主题

    4686

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9405
    最后登录
    2023-9-15
    发表于 2017-10-30 20:10:35 | 显示全部楼层
    谢谢分享!
    今天天气不错!签到!
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    15

    帖子

    0

    注册会员

    Rank: 2

    积分
    100
    最后登录
    2018-7-11
    发表于 2018-7-11 10:48:22 | 显示全部楼层
    Deep Power Down Mode几乎所有模块都关闭供电,只剩下RTC,而且唤醒后无法还原之前的状态,只能reset从头再来,那深度掉电模式的意义在哪?有啥应用?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-13 03:08 , Processed in 0.108557 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表