STM32WB SRAM2

SRAM2存储:

1、挂接总线及地址大小

2、地址镜像

3、RDP(read protection)等级

 

4、不同等级下的访问状态

 

5、声明位于SRAM2区中的数据

1)在icf文件中定义region

每个芯片开发商都会针对每款芯片来编写一个.icf文件就是传说中的链接文件。对于基本的应用,这个.icf文件足以满足你的工程需要。但有时也会需要改动,比如当你的项目要添加外部RAM时就要修改一下icf。

给MEM1、MEM2、MAPPING_TABLE添加了region区,定义region区大小位置。

2)在.sct文件中声明SRAM2区地址以及可用大小(除开安全区的大小)

分散加载文件是一个文本文件,通过编写一个分散加载文件来指定ARM连接器在生成映像文件时如何分配RO,RW,ZI等数据的存放地址

这里定义了地址位于0X20030000大小为0X2800(10K)的存储区,标记为RW_RAM_SHARED

定义了三个段:MAPPING_TABLE、MB_MEM1、MB_MEM2,这三个段共享从地址0X20030000处开始大小为0X2800(10K)的数据存储区

3)使用#define PLACE_IN_SECTION( __x__ )  __attribute__((section (__x__)))来放置数据在哪一段

PLACE_IN_SECTION("MB_MEM2") ALIGN(4) static uint8_t MB_MEM2_var[2]; //MB_MEM2_var放在MB_MEM2段
PLACE_IN_SECTION("MAPPING_TABLE") ALIGN(4) static uint8_t MAPPING_TABLE_var[2]; //MAPPING_TABLE_var放在MAPPING_TABLE段
PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static uint8_t MB_MEM1_var[2]; //MB_MEM1_var放在MB_MEM1段

地址如下:

可以看到地址从0X20030000处开始

如果定义的数据超过.sct文件中定义的大小,就会报错:

PLACE_IN_SECTION("MB_MEM1") ALIGN(4) static uint8_t MB_MEM1_var1[20000];

XXXXX.axf: Error: L6220E: Execution region RW_RAM_SHARED size (22880 bytes) exceeds limit (10240 bytes). Region contains 4 bytes of padding and 0 bytes of veneers (total 4 bytes of linker generated content).
Finished: 0 information, 0 warning and 1 error messages.

提示超过RW_RAM_SHARED定义的大小限制10K(10240bytes)

6、SRAM2安全区大小

SRAM2分为SRAM2a与SRAM2b两块,每块32KB大小

SRAM2a安全区:

SRAM2b安全区:

通过设置FLASH_SRRVR寄存器可以设置安全区大小,位于安全区内的存储空间只能被CPU2访问

通过在线仿真可以看到,SBRSA设置的值为0X0A,SNBRSA设置的值为0X14

即SRAM2a安全区起始地址为SRAM2a Base address + [SBRSA x 0x0400] = 0X20030000 + 10 * 1024 = 0X20032800;安全区范围0X20032800-0X20038000

所以CPU1、CPU2可共享的SRAM2a大小为10K,CPU2专用SRAM2a区大小为32-10=22K

SRAM2b安全区起始地址为SRAM2b Base address + [SNBRSA x 0x0400] = 0X20038000 + 20 * 1024 = 0X2003D000;安全区范围0X2003D000-0X2003FFFF

所以CPU1、CPU2可共享的SRAM2b大小为20K,CPU2专用SRAM2b区大小为32-20=12K

由此可以看出SBRSA、SNBRSA设置的值就是CPU1、CPU2共享的SRAM大小,剩余的数据存储区为CPU2专用SRAM区

 

posted @ 2019-05-13 16:09  yeshenmeng  阅读(915)  评论(1编辑  收藏  举报