CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!

RAM存储映射

GR5525的RAM为256 KB,起始地址为0x2000_0000,由8个内存块(RAM Block)组成(前4个内存块的大小均为16 KB,第5个和第6个内存块大小为32 KB,最后的2个内存块大小为64 KB)。每个RAM内存块均可由软件独立打开/关闭电源。

说明:

GR5525为起始地址0x2000_0000的RAM提供一个起始地址为0x0010_0000的Alias Memory,见图 4

  • 起始地址为0x2000_0000区域支持位段操作,它对应的位段起始地址是0x2200_0000。
  • 由于 Cortex®-M4F总线架构的特点起始地址为0x0010_0000区域的访问效率高于其他区域,故代码的运行地址在0x0010_0000区域地址范围,可以加快运行速度。
  • GR5525 SDK中RW、ZI、HEAP、STACK使用0x2000_0000区域的RAM,RAM_CODE可执行代码使用0x0010_0000区域的RAM。

256 KB RAM存储布局如图 8所示:

图 8 256 KB RAM存储布局

程序运行模式可配置为Execute in Place(XIP)模式或Mirror模式。详细的配置方法参考配置custom_config.h中的APP_CODE_RUN_ADDR。这两种运行模式有不同的RAM布局。

表 4 程序运行模式
运行模式 描述

XIP模式

片上运行模式,用户应用程序存储在片上Flash空间,程序运行空间和加载空间相同。系统完成上电配置后,通过Cache Controller直接从Flash空间取指运行。

Mirror模式

镜像运行模式,用户应用程序存储在片上Flash空间,程序的运行空间定义在RAM空间。在程序启动阶段,会在校验完成后,将程序从外部Flash空间加载到RAM空间,并跳转到RAM中进行运行。

说明:

由于XIP模式运行时需要持续访问Flash,因此该模式下的运行功耗会略高于Mirror模式。

XIP模式的典型RAM布局

图 9为XIP模式的典型RAM布局,开发者可以根据产品需要对其进行修改。

图 9 XIP模式的RAM布局

RAM CODE为在RAM中执行的代码,为提高执行效率,建议将其定位到同物理地址的0x0010_0000 Aliasing Memory区域 。

XIP模式布局允许在代码加载处直接执行Application的固件,从而让Application能使用更多RAM内存。在对Flash存储内容进行更新时,会关闭XIP模式,在最小颗粒度的擦写(写256 Bytes、 擦4 KB)期间所有中断无法生成。

说明:
  • QSPI0/QSPI1/QSPI2均支持XIP模式。在这种模式下,可以将QSPI Flash的数据空间映射到内存中,方便直接对内存地址进行操作。
  • 开发者可以根据实际需求合理地添加自定义section,但不要轻易删改SDK默认的Scatter文件布局,如从Scatter文件中删除RAM_CODE段。关于Scatter文件描述,请参考配置存储器布局

Mirror模式的典型RAM布局

图 10为Mirror模式的典型RAM布局,开发者可以根据产品需求对其进行修改。

图 10 Mirror模式的RAM布局

Mirror模式布局允许在RAM中执行Application的固件。芯片上电之后,会进入冷启动流程。Bootloader会将Application的固件从Flash中复制到名为App Code Execution Region的RAM段。睡眠模式的芯片被唤醒后进入热启动流程。为减少热启动时间,Bootloader不会重新复制Application的固件到名为App Code Execution Region的RAM段中。

App Code Execution Region段的起始位置由custom_config.h中的宏APP_CODE_RUN_ADDR决定。开发者需要根据Application的.data和.bss实际使用情况,来确定代码运行地址APP_CODE_RUN_ADDR的值,避免与低地址处的.bss段或高地址处的Call Stack段地址重叠。开发者可根据.map文件来获得RAM各段的分布情况。

建议开发者使用RAM Aliasing Memory地址(0x0010_0000 ~ 0x0013_FFFF)来设置APP_CODE_RUN_ADDR。若出现RAM段重叠,在工程构建时会出现error并提示重叠位置,帮助开发者确认并快速定位RAM段重叠情况。

RAM电源管理

每一个RAM Block可以处于三种不同电源状态:Full Power、Retention Power或Power Off。

  • Full Power:系统处于Active状态,MCU可以进行RAM Block读写。
  • Retention Power:系统进入Sleep状态模式时,RAM Block中储存的数据不会丢失,可供系统从Sleep状态恢复到Active状态使用。
  • Power Off:系统关机时,RAM Block会掉电,其存储的数据也会丢失。因此,开发者需提前保存数据。

GR5525的电源管理单元(PMU)在系统启动时默认开启全部RAM电源。GR5525 SDK中也提供了完备的RAM电源管理API,开发者可以根据应用需求,合理配置RAM Block电源状态。

系统启动时,默认启用自动RAM功耗管理模式:根据Application的RAM使用情况,自动进行RAM Block电源状态控制,具体配置规则如下:

  • 在系统Active状态下,将未使用的RAM Block设置为“Power Off”状态,使用的RAM Block设置为“Full Power”状态。
  • 当系统进入Sleep状态时,将未使用的RAM Block保持为“Power Off”状态,而使用的RAM Block设置为“Retention Power”状态。

在实际应用中,建议RAM配置如下:

  • 在Bluetooth LE应用中,RAM_16K_0和RAM_16K_1的前 8 KB预留给Bootloader和Bluetooth LE协议栈使用,Application不可使用。在系统Active下,RAM_16K_0和RAM_16K_1应处于“Full Power”状态;在系统Sleep期间,它们应处于“Retention Power”状态。非Bluetooth LE类MCU应用可以使用这两个RAM Block。
  • RAM_16K_2及其他的RAM Block的用途可由Application进行规划定义。通常,将用户数据和需要在RAM中执行的代码段定义在从RAM_16K_2开始的连续区间;将函数调用栈(Call Stack)的栈顶定义在RAM的高端地址。这些RAM Block的电源状态可以全部开启,也可以由Application自行控制。
说明:
  • 仅当RAM Block处于“Full Power”状态时,MCU才能对其进行访问。
  • 更多RAM电源管理API的详细说明,可参考SDK_Folder\components\sdk\platform_sdk.h

扫描关注

打开微信,使用“扫一扫”即可关注。