目 录CONTENT

文章目录

S32K3通过S32DS实现:S32K3如何将FLASH驱动放到RAM里面、RAM如何实现软件复位数据不丢失操作。

moke
2024-07-25 / 0 评论 / 0 点赞 / 264 阅读 / 0 字

1、概述

        在通过RTD的SDK也好MCAL也好,始终存在一个问题,生成的代码除了看门狗模块,默认都是放在flash里面,按照正常逻辑来看没啥大的问题,思考一个问题:Flash放在0x100的位置,但是此时我们要操作0x100怎么办?那肯定不允许啊,但是将flash的驱动放在RAM里面就可以避免这个问题的产生。

        Flash的特性:PF0能操作PF1,当然PF1也能操作PF0的,以此类推,只要不操作自身,想怎么玩都可以。这也是一个物理特性吧。

2、默认flash存放位置展示

       查看flash驱动放在哪里,最方便的方式就是查看链接文件,如下默认的flash在S32K3中是在PF0的。

        0x00400000是PF的开始物理地址。

3、通过默认的链接文件将flash放置到RAM

将CODE变为RAMCODE就行了,代码的开头一个结尾一个,这个不要搞错了!

修改后代码存放位置如下

使用时出现的问题:有时候代码量上去了发现这种方式不是特别好使用了,暂时没查出来原因。

4、通过修改启动与链接文件将flash放在RAM

前面先将FLs驱动分配一下

Fls_Drv_Flash			: ORIGIN = 0x00498000, LENGTH = 0x00002000    /* 8K*/
int_fls_driver	    	: ORIGIN = 0x00000000, LENGTH = 0x00001000	  /* 4KB */

  .acfls_code_ram :
    {
    	. = ALIGN(4);
        acfls_code_ram_start  = .;
        . = ALIGN(4);
        *(.acfls_code_ram)
        . = ALIGN(4);
        acfls_code_ram_stop   = .;
    } > int_fls_driver AT>Fls_Drv_Flash

启动文件修改如下

        然后就是将flash驱动包含进去就行了,最好时需要什么包含什么,将所有的Flash驱动包含进去也行的。

结果显示如下

其实S32K3来说将flash驱动放在RAM相对来讲比较简单。

5、RAM热复位数据不丢失

        将RAM的某一部分留出来,在APP跳转Boot的时候,这个过程牵涉到软件复位,置位重编程标志位,因为在Boot里面需要判断重编程,所有不能在复位的时候丢失,所以才会用到这个操作。

链接文件使用如下:

    int_stack_dtcm          : ORIGIN = 0x2000E000, LENGTH = 0x00001000    			/* 4KB */
    int_flash_con           : ORIGIN = 0x2000F000, LENGTH = 0x00001000    			/* 4KB */

留出来4K不让其复位丢失,但是一旦这样子操作就会进ECC,所以启动文件还是要操作的。

启动文件定义寄存器地址

设置RAM地址清零范围

初始化ECC

这样子就可以避免ECC错误了,与此同时不会再热夫为丢失了。

博主关闭了所有页面的评论