• FlexNVM无法写入成功的“问题”


    MCU:S32K146

    软件环境: S32DS Version: 2.2 

      S32 Design Studio S32K1xx RTM SDK 3.0.0 1.0.0.202001161613 com.nxp.s32ds.arm.sdk.s32k1xx_3.0.0.feature.feature.group NXP

    在实际调试中发现,可能存在以下现象:

    FlexNVM(该NXP芯片提供的硬件模拟EEPROM的功能)的功能被使用:

    ret = FLASH_DRV_Init(&Flash1_InitConfig0, &g_flashSSDConfig);
    ret = FLASH_DRV_SetFlexRamFunction(&g_flashSSDConfig, EEE_ENABLE, 0x0u, NULL);
    //ret = FLASH_DRV_SetFlexRamFunction(&g_flashSSDConfig, EEE_ENABLE, 0x4u, NULL);

     

    发现在某些情况下,调用SDK提供的FLASH_DRV_EEEWrite发现返回值不为STATUS_SUCCESS,同时数据的确没有被写入成功。
    但是在使用PE调试器进行单步或者多步调试时会发现返回值为STATUS_SUCCESS,同时数据写入成功。


    由于使用调试器无法正确复现问题,下面依然通过UDS的服务进行调试。
    发现,在首次使用调试器刷写入程序,不断电的情况下,立马运行程序。会复现上述问题。
    但是,在首次使用调试器刷写入程序后,断电的情况下,经过测试,无论板子是否连接了调试器,上述问题不会被复现。

    解决思路:
    在第一次使用调试器刷写入程序后,对板子进行断电(后,再上电)的处理。

    这种reset的操作可以将芯片内部的硬件模拟EEPROM设置正确。
    该问题无法通过代码的方式去解决(多次尝试,失败),只能通过上述正常操作进行规避。

    可见,有时候发现的问题不一定是个bug,虽然是个问题,但是可以通过对MCU(或者说硬件)的合理使用来规避该问题。

    【完】

  • 相关阅读:
    c#队列的实现
    c#队列的实现
    C# 自定义控件制作和使用实例(winform)
    常见的位运算
    Clock()函数简单使用(C库函数)
    Python全局变量的简单使用
    PyQt5+Caffe+Opencv搭建人脸识别登录界面
    python3+pyqt5+opencv3简单使用
    OpenCV实现人脸检测
    opencv 截图并保存
  • 原文地址:https://www.cnblogs.com/praiseslow/p/16471973.html
Copyright © 2020-2023  润新知