0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一文了解i.MXRTxxx系列片内SRAM分区电源控制

痞子衡嵌入式 来源:痞子衡嵌入式 2023-07-07 09:58 次阅读

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是从功耗测试角度了解i.MXRTxxx系列片内SRAM分区电源控制

我们知道配合 MCU 一起工作的存储器包含 ROM(Flash) 和 RAM 两类,前者主要放 RO 代码和数据,后者放 RW 数据。MCU 可以没有片内 ROM,但是一般都会包含片内 RAM,这个片内 RAM 功耗是 MCU 整体功耗的重要组成部分。

恩智浦 i.MXRT 四位数系列片内 RAM 主要由 FlexRAM 和 OCRAM 组成,痞子衡写过一篇文章 《FlexRAM模块详解》,里面介绍了 FlexRAM 的电源控制策略。虽然 FlexRAM 也是由多个 Bank 组成,但是其无法做到任意开关每个 Bank,其受既定的组合策略控制(跟随系统 Low Power 模式),而 OCRAM 则直接是整体开关。就这方面设计而言,i.MXRT 三位数系列片内 SRAM 电源控制则灵活得多,今天痞子衡就重点聊聊这个话题

一、片内SRAM分区控制

恩智浦 i.MXRT 三位数系列目前主要是 RT500 和 RT600 两大型号,前者包含 5MB 片内 SRAM,后者包含 4.5MB 片内 SRAM。因为片内 RAM 够大,所以为其设计的电源控制策略就更精细。

下图是 RT500 上 AXI-to-RAM 架构图,从图里我们知道 5MB SRAM 一共被分成了 32 块(注意不是等分,有 32KB/64KB/128KB/256KB 四种不同大小)。

- RT500 一共 32 个 SRAM 分区(SRAM0-31):
- RT600 一共 30 个 SRAM 分区(SRAM0-29):
- 不同大小的 SRAM 分区:
  SRAM0-7   :32KB
  SRAM8-11  :64KB
  SRAM12-15 :128KB
  SRAM16-31 :256KB
96685d9c-1bf1-11ee-962d-dac502259ad0.png

因为 RT500/600 都是基于 ARM Cortex-M33,所以片内 SRAM 在系统地址映射里有 Secure 和 Non-Secure 两个不同起始地址,再加上可以通过 Code 和 Data 两个不同总线去访问,所以应用里可以通过如下 4 个不同起始地址来访问到这同一块物理 SRAM。

9686621a-1bf1-11ee-962d-dac502259ad0.png

这些 SRAM 分区除了大小不同之外,有一些还被赋予了特殊用途。比如 SRAM2,3 被 ROM API 征用了,如果应用里需要调用 ROM API,需要释放 SRAM2,3 使用权。SRAM0 则更特殊,它是唯一的一个软复位后依旧能保持内容的分区(其它分区复位后默认是Power down状态,不过上电 BootROM 执行时会将全部分区都打开)。

-(适用RT500/600)The SRAM2,3   region [0x10000-0x1BFFF] is reserved for ROM code. 
-(适用RT500/600)The SRAM0,3   region [0x0-0xFFFF], [0x1C000-0x1FFFF] are reserved for app-specific use cases. 
-(适用RT500/600)The SRAM4-11  region [0x20000-0x7FFFF] is reserved for Non-cached shared memory between M33 and DSP. 
-(适用RT500)    The SRAM12-21 region [0x80000-0x27FFFF] is reserved for DSP code and data.

全部 SRAM 分区的电源开关在 SYSCTL0->PDRUNCFG2,3寄存器中,其中 PDRUNCFG2 控制的是 SRAM 各分区存储介质的电,PDRUNCFG3 控制的是 SRAM 各分区外围支持威廉希尔官方网站 (线性驱动器、感测放大器)的电。如果我们想在保持 SRAM 中内容的情况下省电,可以仅操作 PDRUNCFG3 去关闭外围。

96a4dd12-1bf1-11ee-962d-dac502259ad0.png

二、功耗测量方法

功耗测量最简单的办法就是找一个万用表,调节到电流测量模式,将其串到 VDDCORE 信号上,MIMXRT595-EVK (Rev.D3) 板卡特地设计了 JS25 接头,方便测量电流。

96cec730-1bf1-11ee-962d-dac502259ad0.png

板子上电,应用程序加载执行后,便可以实时观测到运行时电流。不过电流测量有几个注意事项:

1. 不要挂载调试器在线运行时测量电流,会导致结果偏大。
2. 应用程序里如果有涉及模块电源开关代码,不要使能编译器优化等级,防止代码优化影响结果(电源开关有顺序要求)。
3. 如果是 CPU 高频运算相关代码,不同编译器下会导致结果不同,因为代码密度可能有差异。
4. 即使是单纯 while (1) 执行(可以在前面按需要加多个 NOP() 改变 while(1) 指令地址),指令地址不同也可能导致结果不同。
96d9287e-1bf1-11ee-962d-dac502259ad0.jpg

三、功耗测量结果

最后痞子衡在 MIMXRT595-EVK (Rev.D3) 板上借助 SDK_2_13_1_EVK-MIMXRT595oardsevkmimxrt595demo_appshello_worldiar 模板例程(debug Build,需要修改 main 函数以及相应修改链接文件),来测试代码在不同 SRAM 分区下执行的电流情况:

voidsram_power_cfg(void)
{
PRINTF("CPUFrequency%d
",CLOCK_GetFreq(kCLOCK_CoreSysClk));
PRINTF("MainClock%d
",CLOCK_GetFreq(kCLOCK_BusClk));
//控制SRAM分区电源
SYSCTL0->PDRUNCFG2_SET=0xFFFFFFFC;
SYSCTL0->PDRUNCFG3_SET=0xFFFFFFFC;
PRINTF("PDRUNCFG0x%x,0x%x,0x%x,0x%x
",SYSCTL0->PDRUNCFG0,SYSCTL0->PDRUNCFG1,SYSCTL0->PDRUNCFG2,SYSCTL0->PDRUNCFG3);
}

intmain(void)
{
BOARD_InitPins();
BOARD_BootClockRUN();
BOARD_InitDebugConsole();
sram_power_cfg();
//增减nop指令数量来控制while(1)指令地址
asm("nop");
//asm("nop");
//asm("nop");
//asm("nop");
while(1)
{
}
}

最终测试结果如下,不同大小的 SRAM 分区功耗是有差异的,并且即使 SRAM 分区大小相同,功耗也可能有差异。此外 while(1) 指令地址不同导致的运行功耗差异也不小:

RO section in SRAMx
RW section in SRAM0
SYSCTL0->PDRUNCFG2,3值 NOP数控
while(1)指令地址
VDDCORE电流
1 0xFFFFFFFC 0xbe50/0xbe52/0xbe58/oxbe5a 29.39 - 30.52mA
1 0xFFFFFFFC 0xbe54/0xbe56/0xbe5c/oxbe5e 32.55 - 33.86mA
8 0xFFFFFEFE 0x43e50/0x43e52/0x43e58/ox43e5a ~30.4mA
8 0xFFFFFEFE 0x43e54/0x43e56/0x43e5c/ox43e5e ~34.3mA
12 0xFFFFEFFE 0x83e50/0x83e52/0x83e58/ox83e5a ~31.97mA
12 0xFFFFEFFE 0x83e54/0x83e56/0x83e5c/ox83e5e ~37.03mA
16 0xFFFEFFFE 0x103e50/0x103e52/0x103e58/ox103e5a ~31.45mA
16 0xFFFEFFFE 0x103e54/0x103e56/0x103e5c/ox103e5e ~34.7mA
30 0xBFFFFFFE 0x483e50/0x483e52/0x483e58/ox483e5a ~34.66mA
30 0xBFFFFFFE 0x483e54/0x483e56/0x483e5c/ox483e5e ~42.2mA

至此,从功耗测试角度了解i.MXRTxxx系列片内SRAM分区电源控制痞子衡便介绍完毕了,掌声在哪里~~~

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17148

    浏览量

    351179
  • 存储器
    +关注

    关注

    38

    文章

    7492

    浏览量

    163828
  • 恩智浦
    +关注

    关注

    14

    文章

    5860

    浏览量

    107454
  • sram
    +关注

    关注

    6

    文章

    767

    浏览量

    114688
  • 电源控制
    +关注

    关注

    2

    文章

    138

    浏览量

    26600

原文标题:竟有如此精细化片内SRAM电源控制的MCU?

文章出处:【微信号:pzh_mcu,微信公众号:痞子衡嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    68HC08系列单片机FLASH的在线写入方法

    FLASH主要是用来保存用户程序的,为避免在程序运行时往FLASH中写入数据所导致的单片机复位,因此采用了调用芯片内部监控ROM中自带的FLASH操作子程序的方法。该方法适用于所有68HC08系列片内含FLASH芯片的单片
    发表于 03-02 14:07

    Linux下使用SRAM有什么优点?

    本文以MP3解码器为例,介绍了种在嵌入式Linux系统下配置使用处理器SRAM的应用方案,有效提高了代码的解码效率,降低了执行功耗。该方案不论在性能还是成本上都得到了很大改善。
    发表于 03-05 07:01

    了解LVGL的学习路线

    “本文大部分内容来自LVGL官方文档,手翻版,如有错误欢迎指正。”系列文章目录、LVGL系列
    发表于 12-07 12:55

    i.MX RTxxx系列MCU的OTP介绍

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的OTP。  在i.MXRTxxx启动系列第二篇文章 Boot配置(ISP Pi
    发表于 12-16 07:49

    i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择

    今天痞子衡给大家介绍的是i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择。  关于 i.MXRT 系列 BootROM 中串行 NOR Flash 启动流程
    发表于 12-21 06:34

    如何在PS中调用Zynq内部的XADC模块进行温度和电源电压测量

    本文将介绍如何在PS中调用Zynq内部的XADC模块进行温度和电源电压测量。先了解XADC的相关知识,再通过实例体会XADC的用法,学习XADC API函数的使用。XADC介绍XA
    发表于 12-27 06:18

    请教高手ARM不能和SRAM通信的原因

    做了款基于arm处理器的SOC芯片,流回来后测试发现,ARM能正常和SRAM和ROM通信,却不能和
    发表于 06-10 15:50

    请教下大神在8051单片机RAM该如何分区呢?

    请教下大神在8051单片机RAM该如何分区呢?
    发表于 05-09 16:05

    HPM6000系列控制器的上各类SRAM使用指南

    HPM6000系列控制SRAM使用指南
    发表于 06-01 06:19

    请问AVR对SRAM的访问需要多久?

    AVR对SRAM的访问需要多久?
    发表于 10-24 07:49

    Linux下ColdFireSRAM的应用程序优化设计

    Linux下ColdFireSRAM的应用程序优化设计  本文以MP3解码器为例,介绍了种在嵌入式Linux系统下配置使用处理器
    发表于 02-05 09:11 611次阅读
    Linux下ColdFire<b class='flag-5'>片</b><b class='flag-5'>内</b><b class='flag-5'>SRAM</b>的应用程序优化设计

    阐述恩智浦新代的i.MXRT500

    自 2018 年 i.MXRTxxx 系列首款芯片 i.MXRT600(主打智能语音市场)问世以来,近两年时间这个系列直没有再出新品,这其
    发表于 08-06 18:08 4393次阅读
    阐述恩智浦新<b class='flag-5'>一</b>代的<b class='flag-5'>i</b>.MXRT500

    i.MXRT系列的ROM API设计

    .MXRT1xxx 全系列的 ROM API 及其 FlexSPI NOR 驱动设计都讲清楚了,其实 i.MXRTxxx 系列的 ROM API 设计跟 i.MXRT1xxx
    的头像 发表于 10-30 10:52 606次阅读

    i.MXRTxxx系列i.MXRT11xx系列双程序启动细节差异

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是i.MXRT500/600上串行NOR Flash双程序可交替启动设计。
    的头像 发表于 05-06 12:44 2235次阅读

    应用分享| HPM6000系列片SRAM揭秘

    本期开发笔记由费神编写主要会为大家介绍HPM6000系列的各类SRAM并结合SeggerEmbeddedStudio的linker文件介绍,提供了如何使用这些SRAM的建议,赶快来
    的头像 发表于 09-19 11:02 1909次阅读
    应用分享| HPM6000<b class='flag-5'>系列片</b>上<b class='flag-5'>SRAM</b>揭秘