0、简介
本文介绍了S32K3 FLS(Flash Driver Module)的使用,应用场景为在已有模块中加入FLS,环境如下:
MCU:NXP S32k312
编译器:S32 Design Studio for S32 Platform 3.5
仿真器:JLINK-V11
RTD版本:SW32K3_RTD_4.4_2.0.1_DS_updatesite_D2207.zip
(tips:3.0.0之后没有S32K312例程)
1、打开工程
方式1:基于RTD中LLD的example新建工程
方式2:当前已有工程
2、配置外设
2.1、添加c40外设
tips:添加C40_IP后Cache_IP自动添加。
2.2、配置外设
第1步、cache配置
第2步、C40配置
3、编写程序
3.1、添加头文件及宏定义
#include "C40_Ip.h"
#define FLS_MASTER_ID 0U
#define FLS_BUF_SIZE 80U
#define FLS_SECTOR_ADDR 0x10000000U
#define FLS_SECTOR_TEST C40_DATA_ARRAY_0_BLOCK_2_S000
3.2、擦写、写入、读取
uint8_t testArr[] = {1, 2, 3, 4, 5, 6, 7, 8};
uint8_t readBackArr[8];
C40_Ip_StatusType C40Status;
Clock_Ip_StatusType ClockStatus;
/* Initialize C40 driver */
C40Status = C40_Ip_Init(&C40ConfigSet_BOARD_InitPeripherals_InitCfg);
Assert(STATUS_C40_IP_SUCCESS == C40Status);
/* Unlock sector if needed */
if (STATUS_C40_IP_SECTOR_PROTECTED == C40_Ip_GetLock(FLS_SECTOR_TEST))
{
C40_Ip_ClearLock(FLS_SECTOR_TEST, FLS_MASTER_ID);
}
/* Erase sector */
C40_Ip_MainInterfaceSectorErase(FLS_SECTOR_TEST, FLS_MASTER_ID);
do
{
C40Status = C40_Ip_MainInterfaceSectorEraseStatus();
}
while (STATUS_C40_IP_BUSY == C40Status);
/* Check job result */
Assert(STATUS_C40_IP_SUCCESS == C40Status);
/* Write data */
C40_Ip_MainInterfaceWrite(FLS_SECTOR_ADDR, FLS_BUF_SIZE, testArr, FLS_MASTER_ID);
do
{
C40Status = C40_Ip_MainInterfaceWriteStatus();
}
while (STATUS_C40_IP_BUSY == C40Status);
/* Check job result */
Assert(STATUS_C40_IP_SUCCESS == C40Status);
/* Compare the data in memory with TxBuffer */
C40Status = C40_Ip_Compare(FLS_SECTOR_ADDR, FLS_BUF_SIZE, testArr);
/* Check job result */
Assert(STATUS_C40_IP_SUCCESS == C40Status);
/* Read data */
C40Status = C40_Ip_Read(FLS_SECTOR_ADDR, FLS_BUF_SIZE, readBackArr);
/* Check job result */
Assert(STATUS_C40_IP_SUCCESS == C40Status);
/* Verify data */
for (uint8_t i = 0U; i < FLS_BUF_SIZE; i++)
{
Assert(testArr[i] == readBackArr[i]);
}
tips1:库函数位于 工程\RTD\include 下
tips2:生成的配置文件位于 工程/generate/src 下 ,例如:
3、现象
程序并未Assert。且调试时查看memory可以看到写入的数组数据: