这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 行业应用 » 汽车电子 » 【S32K3XX】UTEST 区域更新写入

共1条 1/1 1 跳转至

【S32K3XX】UTEST 区域更新写入

高工
2026-03-31 08:29:08     打赏

【简介】

在之前的帖子我么介绍了S32K3 的DFLASH(【S32K3XX】DFLASH写入擦除验证) 和 PFLASH 的编程(【S32K3XX】Flash驱动使用 )。除了上述的DFLASH 和 PFLASH S32K3系列芯片还有一块OTP的memory UTEST 区域可以使用。

8KB UTEST 地址空间的作用NXP 已经做了划分,有一部分区域是给应用程序来使用。

image.png 

如下的区域是可以给应用程序来进行操作的区域,我们可以使用这部分区域来保存用户的配置信息等数据。

image.png

从上述的说明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 数据 已经按照预期的完成了更新

image.png



   


           


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]