XIVN1987 发表于 2024-3-22 18:07:47

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 中。。


tommymcu2 发表于 2024-3-23 09:47:48

最近在看SWM34S,想问下,如果把UI素材放在外挂的XIP QSPI FLASH里,就地执行好,还是把这些拷贝到SDRAM里执行好?SDRAM肯定快很多,但是上电拷贝时,由于UI素材一般都很大,会不会花很长的时间?

XIVN1987 发表于 2024-3-23 11:22:00

tommymcu2 发表于 2024-3-23 09:47
最近在看SWM34S,想问下,如果把UI素材放在外挂的XIP QSPI FLASH里,就地执行好,还是把这些拷贝到SDRAM里 ...

素材的话,两种方式都可以。。

这里说的程序代码,,程序执行时会不断地来回跳转,,对于没有 Cache 的 XIP SPI Flash 很不友好,效率很低,,必须拷贝到 SDRAM 中执行。。

XIVN1987 发表于 2024-6-24 14:02:34


已添加例程,可直接测试:https://gitee.com/synwit-co-ltd/SWM341_Lib/tree/main/SDRAM/RunOnSDRAM
页: [1]
查看完整版本: SWM341 将部分代码放到 SDRAM 上执行。。