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.

[参考译文] TMS570LS1224:在为 ATCM 接口启用 SECDED 后刷新存储器

Guru**** 2553260 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/992995/tms570ls1224-flash-memory-after-enable-secded-for-atcm-interface

器件型号:TMS570LS1224

您好!

在闪存被擦除并且(引导加载程序)程序被加载后-所有未使用的内存都很好地为空(0xFFFF)。 但是、为 ATCM 接口启用 SECDED 逻辑(执行 _coreEnableFlashEcc_函数)会导致这种情况(CCS 存储器浏览器的屏幕截图):

在链接器文件中、指定了一个16位存储器部分、其中 应在引导加载程序接受并加载应用软件后保存安全密钥值:

m_safety_key  (R)  :origin=0x00014000 length=0x00000002

SAFETY_KEY        :type=NoLoad >M_SAFETY_KEY  

然后、在源文件中有常量易失性变量 U16_KEY、由 #pragma DATA_SECTION (U16_KEY、"SAFETY_KEY)定义。

读取数据 地址导致数据中止-双位错误检测。 正如您在上面的屏幕截图中看到的,安全密钥的位置是???,因此会发生中止。

是否因为闪存 ECC 存储器中没有计算这些位置的正确 ECC 值? 如果是-为什么?

2.为什么在启用 SECDED 逻辑后未使用的闪存不是0xFFFF?

此致、

Tomas

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

    Tomas、您好!

    当闪存被擦除时、它的 ECC 区域也被擦除。 两个区域中的内容都是0xFFFFFFFF、这意味着 ECC 区域对于主闪存中的内容(0xFFFFFFFF)具有错误的 ECC 值(0xFF)。 当 CCS 将引导加载程序加载到闪存时、它会计算 ECC 值并将其编程到 ECC 区域。 未使用的闪存仍然具有错误的 ECC 值。 当 CCS 存储器浏览器读取未使用的闪存时、会发生多位 ECC 错误并显示错误数据。

    当您使用 F021闪存 API 对闪存密钥进行编程时、请启用计算 ECC 的选项。

    fapi_issueProgrammingCommand ((uint32_t *) dst、(uint8_t *) src、(uint32_t)字节、 0、0、 Fapi_AutoEccGeneration)

      

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

    非常感谢、QJ Wang