Memory Organization of DA1458x Software Platform

1.Overview

DA1458x包含一个嵌入式的一次性可编程(OTP)存储器,用于存储蓝牙配置文件和自定义应用程序代码。Bluetooth®低能耗协议栈存储在专用ROM中。低泄漏保留RAM用于在深度睡眠模式下存储敏感数据和连接信息。内存块大小如下:
●84 kB ROM。包含Boot ROM代码和Bluetooth Low Energy协议相关的代码。
●32 kB一次性可编程(OTP)。在DA1458x上电或复位时,主引导代码(ROM代码)检查是否对OTP存储器进行了编程,如果已编程,则将OTP内容镜像到系统RAM并执行该代码。
●128 kB闪存(只有DA14583具有)。在DA14583上电或复位时,主引导代码(ROM代码)加载辅助Bootloader(从OTP存储器或FLASH),并且辅助Bootloader继续将FLASH映像复制到系统RAM并对其执行进行编程。
●42 kB系统SRAM。
●8 kB保留SRAM。

2.Memory Map

BLE内核需要访问名为“ Exchange Memory”的存储空间来存储控制结构和帧缓冲区。 BLE内核地址空间到系统总线地址空间的映射是通过寄存器字段GP_CONTROL_REG [EM_MAPPING]控制的。
在SDK应用程序示例中,选择了案例23,并且寄存器的编程位于文件sdk \ platform \ arch \ boot \ rvds \ system_ARMCM0.c中:
SetBits32(GP_CONTROL_REG,EM_MAP,23);
请注意,需要通过初始化文件sdk \ common_project_files \ misc \ sysram_case23.ini将内存映射选择传递到Keil(J-Link)调试器中,以便调试器可以使用正确的内存映射。 在此文件中,以下行提供了此信息:
E long 0x50003308 = 0x2e
下图说明了案例23的地址映射,该情况在SDK的所有示例应用程序中使用。
在这里插入图片描述
如上图所示,区域0x0到0x7FFFF和0x83000到0x1FFFFFFF被保留并且不能使用。 保留RAM位于0x80000至0x81FFF中。 在其上方,在0x82000至0x82FFF处有4 kB RAM空间,当芯片进入深度睡眠模式时,RAM空间不会保留。
从0x20000000到0x200097FF,有38 kB的RAM空间(SysRAM)。 该存储空间中的某些区域已保留,用户无法使用。 这些是:
●向量表,放置在0x20000000。
●跳转表,位于0x20000160。
●Timeout table,位于0x200002C0。
●NVDS存储,位于0x20000340。
●ROM代码数据,位于0x20009000。
在剩余的存储空间(〜37 kB)中,可以放置应用程序的代码和数据。 请注意,代码和初始化数据的大小受32 kB的OTP大小限制。 在0x80000到0x82FFF区域中还留有空间用于存储数据。

3.ARM Scatter File

Scatter File分散文件指示链接器将代码和数据放置在何处。它由加载区描述符和执行区描述符组成。
加载区域指示链接器将代码和数据放置在何处,以及用于加载代码和数据的初始化代码。在代码到达arch_main.c中的main_func()之前,将执行初始化代码。在初始化期间,如有必要,会将代码和数据从加载区域复制到执行区域。例如,当使用闪存存储代码和数据时,此体系结构允许将数据和代码区域无缝传输到系统RAM。
对于DA1458x,不需要此功能,因为从OTP复制,在系统加电期间或退出深度睡眠模式时是由BootROM代码完成的,并且此过程对应用程序代码完全透明。因此,DA1458x分散文件中的加载区域至少与0x20000000到0x200097FF的内存范围匹配它们各自的执行区域。
其余的加载区应仅包含零个初始化数据。应该将区域0x80000到0x82FFF声明为包含不必初始化的数据(UNINIT)。由于芯片启动时该区域为零,因此可以在此处放置零个初始化数据。必须为所有区域禁用数据压缩。
可以在sdk \ common_project_files \ scatterfile中找到示例应用程序的分散文件。

发布了19 篇原创文章 · 获赞 4 · 访问量 1680

猜你喜欢

转载自blog.csdn.net/ydgd118/article/details/104467459