S32k1xx系列mcu eeprom和flash的使用方法

本文浅谈S32k1xx系列mcu的memory结构以及如何快速使用nxp官方使用的sdk对其eeprom和flash进行快速使用。

一.memory结构:

如数据手册所示,S32k1xx系列mcu的memory结构由几个方面组成:P-flash(用于代码存储),Data-flash(NVM),以及一个flexram(可用于模拟EE或作为普通的ram使用)。每个型号的各个memory大小不同,11x系列较小,14x系列较大。

 

二.eeprom的使用方法:

 使用方法为将flexram配置为EE,同时要划分一部分区域的NVM给与EE进行备份存储。划分NVM和RAM的大小需要寄存器进行配置。这里拿S32K116进行举例:

配置一个占用NVM24KB,占用ram 2KB的eeprom。

 sdk配置使用:

1.配置好各个memory的使用地址后,初始化flash

2.判断flash结构体中的ee大小是否为0,如果为0则需要调用sdk库中的FLASH_DRV_DEFlashPartition函数对ee进行配置,参数uEEEDataSizeCode与uDEPartitionCode根据寄存器配置,使用2kb的ram和24kb的NVM,分别配置为0x03和0x09,各不同的配置根据上面寄存器中所展示的值进行配置

3.调用函数FLASH_DRV_SetFlexRamFunction使能flexram作为ee的使用

4.写入ee:调用函数FLASH_DRV_EEEWrite在特定地址写入数据,需要注意地址对齐

5.读取ee:通过指针取出特定地址上的数据

6.擦除一块sector :特定地址写入四个字节的0xFF

7.在操作ee时,均需判断flash结构体中的eesize是否为0

8.在配置和操作ee之前,注意关闭mcu全局中断,完成之后再开启

三.flash的使用

s32k1xx拥有许多的flash功能,这里只介绍其擦除与写入功能。所有的flash操作都是通过一套寄存器指令进行的。具体可看数据手册。

1.擦除:s32k1xx的flash是按照sector单位进行擦除的,11x系列的sector为2kb,14x系列的sector为4kb。调用库中函数Flash_EraseSector进行擦除,在操作前需关闭全局中断

2.写入:s32k1xx的flash是按照字节单位进行写入的,一般每次可写入8字节。调用库中函数Flash_Program进行写入,在操作前需关闭全局中断

3.在每个flash的操作函数中都调用了一个FLASH_DRV_CommandSequence函数,其作用是执行flash操作的指令。如果直接调用库中的各种flash操作函数操作flash本身,则可能会造成flash错误,程序跑飞。所以在一些产品开发的过程当中(例如汽车ecu的bootloader),为了保护程序,在擦除或写入时通常将FLASH_DRV_CommandSequence作为flash驱动放入ram中运行,就可以解决这个问题。具体的方法是:使用指针函数将这个函数映射到ram的地址上运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值