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.

[参考译文] CCS:TMS570LC4357 - SafeTI 诊断库- MPU 设置错误(RAM 范围)

Guru**** 2534260 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/833091/ccs-tms570lc4357---safeti-diagnosis-library---mpu-setting-error-ram-range

工具/软件:Code Composer Studio

我使用 SafeTI 诊断库。 此外、我想将 MPU 设置更改为 RAM 范围(0x080000 ~ 0x803FFFF)内的 MPU_NORMAL OIWBWA_NONSHARED (0x000B)

将 MPU RAM 设置 为 MPU_NORMAL _OIWBWA_NONSHARED 后 、在 libaray 中、sl_SelfTest_Flash 会发生异常错误、即"_except_vec_abort_data()"。

我想知道发生此错误的原因。

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

    大家好、Minwoo、

    应用程序中的什么操作导致了异常? 您可以读取数据故障地址和状态寄存器以确定异常的确切原因。

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

    我检查 在 sl_SelfTest_Flash (flash_ecc_test_mode_1bit、true、failInfoFlash) 函数中是否发生错误。

     函数之后调用"_expt_vec_abort_data()"函数并停止固件。 错误消息是内存点为0x08040004 (这是保留区)。  

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

    TMS570LC 具有512KB 的 RAM、因此高达0x08080000的地址有效。 如何配置0x08040000至0x08080000的存储器范围?

    请在调试器窗口中读取 CPU 的数据故障状态寄存器、以确定错误的原因。 这将指示该错误是由后台故障(对存储器的访问不在任何定义的区域内)还是权限故障(MPU 配置现在允许读取访问)引起的。

    此致、

    Sunil

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

    您好、Sunil、

    我想知道地址。 故障地址为0x08080004。

    此外、从0x08040000至0x08080000的存储器范围配置为 MPU_NORMAL _OIWBWA_NONSHARED。

    错误状态如图所示。

    此致、

    米尼宇。

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

    大家好、Minwoo、

    该地址不在 RAM 定义的存储器区域内、这就是您观察 CPU 中止响应的原因。 其中一个自检例程通过访问位于任何定义的存储器区域之外的存储器位置0x08080000特意导致数据中止。 调用 sl_SelfTest_MemoryInterconnect (MEMINTRCNT_RESERVE_ACCESS)函数时会完成此操作。

    我怀疑您正在观察由于执行此测试而导致的中止。 请确认。

    此致、Sunil

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

    您好、Sunil

    我将检查  这个问题。   错误 发生 在 sl_SelfTest_Flash()测试中。  

    我以这种方式解决问题。 我想知道这个解决方案是正确的。

    我 想缩短计算时间。 我 将   RAM MPU 设置更改为0x008 -> 0x00B 在范围内(0x08000000 ~ 0x0803FFFF)

    2.闪存 ECC 测试在 RAM 中执行(起始地址为0x803A800、大小为2kbytes)。

    3、我将这个 RAM 范围更改为0x008。 然后、不会发生并传递错误。

    此致、

    米尼宇

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

    大家好、Minwoo、

    CPU RAM 的 MPU 的原始配置是什么?在您发现 RAM 地址超出范围问题之前、您进行了哪些更改?

    此致、Sunil

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

    您好、Sunil、

     SAFeti 库默认将整个 MPU 区域设置为 MPU_NORMAL OINC_NONSHARED。

     我将 RAM 范围(0x08000000 ~ 0x803FFFF)更改为 MPU_NORMAL _OIWBWA_NONSHARED、以缩短计算时间。

    然后、当 sl_SelfTest_Flash()正在运行时、通过指向地址0x08080004发生"_excpt_vec_abort_pref()"。 (我不确定在 sl_SelfTest_Flash ()中错误发生的确切位置

    此致,

    米尼宇

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

    大家好、Minwoo、

    3、我将这个 RAM 范围更改为0x008。 然后、不会发生并传递错误。

    上述更改使得 RAM 范围被定义为不可高速缓存、正如在原始演示项目中所做的那样。 通过将此范围定义为可缓存回写、我还能够看到尝试从0x08080000提取指令的代码的预取中止、这超出了可用 RAM 的范围。

    请使用与原始演示应用具有相同 MPU 设置的演示应用。

    此致、

    Sunil

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

    感谢你的帮助。

    此致、

    米尼宇