Other Parts Discussed in Thread: MSPM0G3507, MSPM0G3107
器件型号: MSPM0G3107
Thread 中讨论的其他器件: MSPM0G3507、
我遇到了写入闪存似乎成功、但读取相同数据会导致系统崩溃/到达默认中断处理程序的问题。
在这里、我们可以看到、当我使用 DL_FlashCTL_programMemoryFromRAM64 写入数据时、数据会成功写入闪存。
DL_FlashCTL_programMemoryFromRAM64(FLASHCTL, u32_dataAddress, u32a_dataArray);

执行这行代码后、程序跳转到 Default_Handler。 有时、程序会继续照常执行、直到我读取数据。 当我读取数据时、程序便会到达 Default_Handler。
为了找出问题所在、我在具有精简应用程序(单源文件,无 RTOS)的 MSPM0G3507 LaunchPad 上进行了测试、闪存操作成功完成、无需触发默认处理程序。
DL_FlashCTL_unprotectSector(FLASHCTL, MAIN_BASE_ADDRESS, DL_FLASHCTL_REGION_SELECT_MAIN);
gCmdStatus = DL_FlashCTL_programMemoryFromRAM64(FLASHCTL, MAIN_BASE_ADDRESS, &gDataArray64[0]);
uint64_t *u64p_data = *((volatile uint64_t *)MAIN_BASE_ADDRESS);
在启用 RTOS 的 MSPM0G3507 LaunchPad 上运行类似的代码序列时、程序再次在 Default_Handler 中运行、指向 RTOS 作为可能的罪魁祸首。
我最终发现使用 DL_FlashCTL_programMemoryFromRAM64WithECCGenerated 完全解决了问题。 但是、我正在尝试理解这种情况下为什么需要生成 ECC。 我知道 ECC 是实现数据完整性和错误检测的最佳实践、但我很好奇为什么我的简单示例在没有 ECC 和 RTOS 的 MSPM0G3507 上可以正常工作、但我的 MSPM0G3107 应用需要 ECC。

