RAM存储映射
GR533x RAM起始地址为0x2000_0000,由6个内存块(RAM Block)组成(6*16 KB)。每个RAM内存块均可由软件独立打开或关闭电源。
96 KB RAM存储布局如下图所示。
程序运行模式为Execute in Place(XIP)模式,即片上运行模式。用户应用程序存储于片上Flash空间,且程序运行空间和加载空间相同。系统完成上电配置后,通过Cache Controller直接从Flash空间取指运行。
典型RAM布局
下图为包含Bluetooth LE工程程序运行时的典型RAM布局。开发者可以根据产品需求,自定义RAM布局。
-
RAM CODE字段中存储了在RAM中执行的代码。为提高执行效率,建议将其定义在同物理地址的0x00100000 Aliasing Memory区域 。
-
EM供Bluetooth LE CORE使用,并与MCU所使用的SRAM统一管理,位于SRAM的最高地址空间处。其Size取决于custom_config.h中配置的蓝牙业务数量。若工程不包含Bluetooth LE业务,则可将custom_config.h中宏EM_BUFF_ENABLE的值设置为0。
-
Stack字段中存储了任务调用栈。在不含Bluetooth LE业务的外设工程中,将Stack定义在RAM最高地址处;在含Bluetooth LE业务的工程中,将Stack定义在EM之下。Stack大小由宏SYSTEM_STACK_SIZE定义,开发者需根据工程的函数调用深度和调用栈消耗情况确定其大小。
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会掉电,其存储的数据也会丢失。因此,开发者需提前保存数据。
GR533x的电源管理单元(PMU)在系统启动时默认开启全部RAM电源。GR533x 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的前 8 KB预留给Bootloader和Bluetooth LE协议栈使用,Application不可使用。在系统Active状态下,RAM_16K_0应处于Full Power状态;在系统Sleep期间,RAM_16K_0应处于Retention Power状态。非Bluetooth LE类MCU应用可以使用该RAM Block。
- RAM_16K_1及其他RAM Block的用途可由Application进行规划定义。GR533x RAM已根据执行效率和SRAM的资源利用率进行合理布局,开发者也可根据实际应用需求重新规划。这些RAM Block的电源状态可以全部开启,也可以由Application自行控制。
- 仅当RAM Block处于Full Power状态时,MCU才能对其进行访问。
- 更多RAM电源管理API的详细说明,可参考SDK_Folder\components\sdk\platform_sdk.h。