【简介】
在之前的帖子我么介绍了S32K3 的DFLASH(【S32K3XX】DFLASH写入擦除验证) 和 PFLASH 的编程(【S32K3XX】Flash驱动使用 )。除了上述的DFLASH 和 PFLASH S32K3系列芯片还有一块OTP的memory UTEST 区域可以使用。
8KB UTEST 地址空间的作用NXP 已经做了划分,有一部分区域是给应用程序来使用。
如下的区域是可以给应用程序来进行操作的区域,我们可以使用这部分区域来保存用户的配置信息等数据。

从上述的说明offset 0x20~0x2f 的区间是用户可配置的OTP区域,本地未进行写入操作前对应的数据内容为全FF数据。因为utest 区域为OTP 区域不可以进行擦除,我们编写如下的代码写入utest 区域进行写入验证。
void flash_write_test(void)
{
C40_Ip_StatusType t_ReturnValue = C40_IP_STATUS_ERROR;
const uint8_t wBuffer[8] = {0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
t_ReturnValue = C40_Ip_ClearLock(C40_UTEST_ARRAY_0_S000, FLS_MASTER_ID);
if(C40_IP_STATUS_SUCCESS != t_ReturnValue)
{
/* erase failed */
PRINTF("Flash clear lock failed %x \r\n", t_ReturnValue);
}
else
{
PRINTF("Flash clear lock success \r\n");
}
/* Write data */
t_ReturnValue = C40_Ip_MainInterfaceWrite(0x1b000020, 8, wBuffer, FLS_MASTER_ID);
if(C40_IP_STATUS_SUCCESS != t_ReturnValue)
{
/* erase failed */
PRINTF("Flash write failed %x \r\n", t_ReturnValue);
}
else
{
PRINTF("Flash write success \r\n");
}
t_ReturnValue = WaitForFlag(FLASH_MCR_PGM_MASK);
if(C40_IP_STATUS_SUCCESS != t_ReturnValue)
{
/* erase failed */
PRINTF("Flash wait write failed %x \r\n", t_ReturnValue);
}
else
{
PRINTF("Flash wait write success \r\n");
}
}写入后读取utest 的 OTP 数据 已经按照预期的完成了更新

我要赚赏金
