This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSPM0G3107:MSPM0G3107:闪存写入导致在写入数据后读取 Default_Handler 而不生成 ECC 时达到 ECC

Guru**** 2815985 points

Other Parts Discussed in Thread: MSPM0G3507, MSPM0G3107

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1627276/mspm0g3107-mspm0g3107-flash-write-causes-default_handler-to-be-reached-when-data-is-read-after-being-written-without-ecc-generation

器件型号: MSPM0G3107
Thread 中讨论的其他器件: MSPM0G3507

我遇到了写入闪存似乎成功、但读取相同数据会导致系统崩溃/到达默认中断处理程序的问题。

 

在这里、我们可以看到、当我使用 DL_FlashCTL_programMemoryFromRAM64 写入数据时、数据会成功写入闪存。

DL_FlashCTL_programMemoryFromRAM64(FLASHCTL, u32_dataAddress, u32a_dataArray);

image.png

执行这行代码后、程序跳转到 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。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Camden:

    根据您分享的屏幕截图、似乎您正在写入已进行 ECC 校正的闪存区域:

    当从 ECC 校正区域中的闪存读取时、会执行 ECC 校验。 不清楚从哪个地址读取数据、但如果从要写入的同一地址读取数据、这会导致您看到问题、因为您不允许硬件在写入时生成 ECC 或手动指定(除非使用 DL_FlashCTL_programMemoryFromRAM64WithECCGenerated  () 函数调用)。

    这应该不是与 RTOS 相关的问题。

    当编程到 ECC 校正区域时、也可以从未校正区域读取数据。 如果您不想使用 ECC、则应从未校正区域读取。

    此致、

    Owen