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(或者说硬件)的合理使用来规避该问题。
【完】