大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是從功耗測試角度了解i.MXRTxxx系列片內(nèi)SRAM分區(qū)電源控制。
我們知道配合 MCU 一起工作的存儲器包含 ROM(Flash) 和 RAM 兩類,前者主要放 RO 代碼和數(shù)據(jù),后者放 RW 數(shù)據(jù)。MCU 可以沒有片內(nèi) ROM,但是一般都會包含片內(nèi) RAM,這個片內(nèi) RAM 功耗是 MCU 整體功耗的重要組成部分。
恩智浦 i.MXRT 四位數(shù)系列片內(nèi) RAM 主要由 FlexRAM 和 OCRAM 組成,痞子衡寫過一篇文章 《FlexRAM模塊詳解》,里面介紹了 FlexRAM 的電源控制策略。雖然 FlexRAM 也是由多個 Bank 組成,但是其無法做到任意開關(guān)每個 Bank,其受既定的組合策略控制(跟隨系統(tǒng) Low Power 模式),而 OCRAM 則直接是整體開關(guān)。就這方面設計而言,i.MXRT 三位數(shù)系列片內(nèi) SRAM 電源控制則靈活得多,今天痞子衡就重點聊聊這個話題:
一、片內(nèi)SRAM分區(qū)控制
恩智浦 i.MXRT 三位數(shù)系列目前主要是 RT500 和 RT600 兩大型號,前者包含 5MB 片內(nèi) SRAM,后者包含 4.5MB 片內(nèi) SRAM。因為片內(nèi) RAM 夠大,所以為其設計的電源控制策略就更精細。
下圖是 RT500 上 AXI-to-RAM 架構(gòu)圖,從圖里我們知道 5MB SRAM 一共被分成了 32 塊(注意不是等分,有 32KB/64KB/128KB/256KB 四種不同大?。?/p>
- RT500 一共 32 個 SRAM 分區(qū)(SRAM0-31): - RT600 一共 30 個 SRAM 分區(qū)(SRAM0-29): - 不同大小的 SRAM 分區(qū): SRAM0-7 :32KB SRAM8-11 :64KB SRAM12-15 :128KB SRAM16-31 :256KB
因為 RT500/600 都是基于 ARM Cortex-M33,所以片內(nèi) SRAM 在系統(tǒng)地址映射里有 Secure 和 Non-Secure 兩個不同起始地址,再加上可以通過 Code 和 Data 兩個不同總線去訪問,所以應用里可以通過如下 4 個不同起始地址來訪問到這同一塊物理 SRAM。
這些 SRAM 分區(qū)除了大小不同之外,有一些還被賦予了特殊用途。比如 SRAM2,3 被 ROM API 征用了,如果應用里需要調(diào)用 ROM API,需要釋放 SRAM2,3 使用權(quán)。SRAM0 則更特殊,它是唯一的一個軟復位后依舊能保持內(nèi)容的分區(qū)(其它分區(qū)復位后默認是Power down狀態(tài),不過上電 BootROM 執(zhí)行時會將全部分區(qū)都打開)。
-(適用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 分區(qū)的電源開關(guān)在 SYSCTL0->PDRUNCFG2,3寄存器中,其中 PDRUNCFG2 控制的是 SRAM 各分區(qū)存儲介質(zhì)的電,PDRUNCFG3 控制的是 SRAM 各分區(qū)外圍支持電路(線性驅(qū)動器、感測放大器)的電。如果我們想在保持 SRAM 中內(nèi)容的情況下省電,可以僅操作 PDRUNCFG3 去關(guān)閉外圍。
二、功耗測量方法
功耗測量最簡單的辦法就是找一個萬用表,調(diào)節(jié)到電流測量模式,將其串到 VDDCORE 信號上,MIMXRT595-EVK (Rev.D3) 板卡特地設計了 JS25 接頭,方便測量電流。
板子上電,應用程序加載執(zhí)行后,便可以實時觀測到運行時電流。不過電流測量有幾個注意事項:
1. 不要掛載調(diào)試器在線運行時測量電流,會導致結(jié)果偏大。 2. 應用程序里如果有涉及模塊電源開關(guān)代碼,不要使能編譯器優(yōu)化等級,防止代碼優(yōu)化影響結(jié)果(電源開關(guān)有順序要求)。 3. 如果是 CPU 高頻運算相關(guān)代碼,不同編譯器下會導致結(jié)果不同,因為代碼密度可能有差異。 4. 即使是單純 while (1) 執(zhí)行(可以在前面按需要加多個 NOP() 改變 while(1) 指令地址),指令地址不同也可能導致結(jié)果不同。
三、功耗測量結(jié)果
最后痞子衡在 MIMXRT595-EVK (Rev.D3) 板上借助 SDK_2_13_1_EVK-MIMXRT595oardsevkmimxrt595demo_appshello_worldiar 模板例程(debug Build,需要修改 main 函數(shù)以及相應修改鏈接文件),來測試代碼在不同 SRAM 分區(qū)下執(zhí)行的電流情況:
voidsram_power_cfg(void) { PRINTF("CPUFrequency%d ",CLOCK_GetFreq(kCLOCK_CoreSysClk)); PRINTF("MainClock%d ",CLOCK_GetFreq(kCLOCK_BusClk)); //控制SRAM分區(qū)電源 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指令數(shù)量來控制while(1)指令地址 asm("nop"); //asm("nop"); //asm("nop"); //asm("nop"); while(1) { } }
最終測試結(jié)果如下,不同大小的 SRAM 分區(qū)功耗是有差異的,并且即使 SRAM 分區(qū)大小相同,功耗也可能有差異。此外 while(1) 指令地址不同導致的運行功耗差異也不?。?/p>
RO section in SRAMx RW section in SRAM0 |
SYSCTL0->PDRUNCFG2,3值 |
NOP數(shù)控制 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系列片內(nèi)SRAM分區(qū)電源控制痞子衡便介紹完畢了,掌聲在哪里~~~
審核編輯:湯梓紅
-
mcu
+關(guān)注
關(guān)注
146文章
17149瀏覽量
351225 -
存儲器
+關(guān)注
關(guān)注
38文章
7492瀏覽量
163853 -
恩智浦
+關(guān)注
關(guān)注
14文章
5860瀏覽量
107469 -
sram
+關(guān)注
關(guān)注
6文章
767瀏覽量
114692 -
電源控制
+關(guān)注
關(guān)注
2文章
138瀏覽量
26600
原文標題:竟有如此精細化片內(nèi)SRAM電源控制的MCU?
文章出處:【微信號:pzh_mcu,微信公眾號:痞子衡嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論