SWM341 将部分代码放到 SDRAM 上执行。。
当程序大小超过片内 Flash 容量(512KB)时,,可将部分部分代码下载到片外 SPI Flash 中,,上电时拷贝到 SDRAM 中执行。。设置方法如下:
1、SWM341_stdperiph_lib.sct 文件中添加如下内容:
LR_IROM2 0x70000000 0x00100000{
ER_IROM2 0x80000000 0x00100000{
code_on_sdram.o (+RO)
}
}用于将 code_on_sdram.c 中的函数定位到 SDRAM 地址空间
2、添加下载算法如下,,用于将 SDRAM 中运行的代码下载到 SPI Flash 中
3、由于 code_on_sdram.c 中的代码运行地址和加载地址不同,,Keil 会自动生成代码,,将 SPI Flash 中的代码拷贝到 SDRAM 中。。但此时 SFC 和 SDRAM 都还没有初始化,,因此拷贝内容都是错误的。。我们需要添加如下代码完成拷贝工作
int main(void)
{
SystemInit();
SerialInit();
SFC_Config();
SDRAM_Config();
SFC_Read(0, (uint32_t *)SDRAMM_BASE, 0x100000/4); // 将 SPI Flash 上前 1MB 拷贝到 SDRAM 上
while(1==1)
{
run_on_sdram();
for(int i = 0; i < SystemCoreClock/8; i++) __NOP();
}
}在调用 code_on_sdram.c 中定义的函数 run_on_sdram() 之前,,调用 SFC_Config() 初始化 SFC,,调用 SDRAM_Config() 初始化 SDRAM,,然后调用 SFC_Read() 将 SPI Flash 中的代码拷贝到 SDRAM 中。。
最近在看SWM34S,想问下,如果把UI素材放在外挂的XIP QSPI FLASH里,就地执行好,还是把这些拷贝到SDRAM里执行好?SDRAM肯定快很多,但是上电拷贝时,由于UI素材一般都很大,会不会花很长的时间? tommymcu2 发表于 2024-3-23 09:47
最近在看SWM34S,想问下,如果把UI素材放在外挂的XIP QSPI FLASH里,就地执行好,还是把这些拷贝到SDRAM里 ...
素材的话,两种方式都可以。。
这里说的程序代码,,程序执行时会不断地来回跳转,,对于没有 Cache 的 XIP SPI Flash 很不友好,效率很低,,必须拷贝到 SDRAM 中执行。。
已添加例程,可直接测试:https://gitee.com/synwit-co-ltd/SWM341_Lib/tree/main/SDRAM/RunOnSDRAM
页:
[1]