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.

[参考译文] TMS570LS3137:F021 v02.01.01 API 会导致预取中止

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/863102/tms570ls3137-f021-v02-01-01-api-causes-prefetch-abort

器件型号:TMS570LS3137

您好!

我使用 TI 的 F021 API 来擦除和写入组0和组1。

整个 F021 API 都在 RAM 中运行、我的代码也在调用它。 我的其余代码在组0中运行。

擦除/写入组1工作正常、但当擦除/写入组0时、我会非常一致(大约9 / 10次)、得到一个非常令人困惑的预取中止。

有关详细信息、请参阅 :https://community.arm.com/developer/ip-products/processors/f/cortex-r-forum/44736/atcm-ecc-error-causes-prefetch-abort-despite-ecc-check-being-disabled 

两个问题:

  1. 我使用 API 的方式是否不正确/我是否需要将更多内容移入 RAM?
  2. 在哪里可以找到有关 FSM 寄存器的更多信息? TRM (http://www.ti.com/lit/ug/spnu499c/spnu499c.pdf)仅引用其中两个(FSM_WR_ENA、FSM_Sector)、使我无法实现自己的闪存例程。

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

    您好!

    请查看此主题:

    e2e.ti.com/.../452343

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

    谢谢、

    我已经将 API 代码以及调用代码重新定位到 RAM 中、并按照该线程中的说明从 RAM 中执行。 我想看一下 QJ Wang 在答复中提到的"引导加载程序"。 我对如何获得"bootloader"的源代码有何想法?

    此致、

    Lukas

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

    Lukas、您好!

    您可以从 此处下载引导加载程序和更多示例代码:

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

    Lukas

    请查看此 E2E:

    https://e2e.ti.com/support/microcontrollers/hercules/f/312/p/849928/3150652#3150652

    要下载 Hercules 示例、包括引导加载程序:

    Ubuntu 用户:使用 git、git 克隆 git://git.ti.com/hercules_examples/hercules_examples.git

    Windows 用户: 下载 "提交 "页面下的压缩文件格式之一。

     在您的情况下、可导入 CCS 的示例工程如下所示:

    \Hercules 示例\bootloader \SafetyMCU_bootloader \TMS570LS31x

    请看一下 bl_link.cmd 文件、当您将闪存 API 从闪存移动到 RAM 时、请注意不要忘记 const 段:

     闪存 API:
      {
        .\f021_Flash_API\02.01.01\source\fapi_UserDefinedFuncations.obj (.text)
        .\source\bl_flash.obj (.text)
        //.\source\BL_dCAN.obj (.text)
        --library=..\..\..\F021_Flash_API\02.01.01\F021_API_CortexR4_be.lib (.text)
      }palign = 8 load = FLASH0、run = SRAM、load_start (apiLoadStart)、run_start (apiRunStart)、size (apiLoadSize)

      .text :{}>FLASH0/*已初始化的可执行代码和常量*/
      .const:{} load=FLASH0, run = SRAM,load_start (constLoadStart),run_start (constRunStart),size (constLoadSize)

    请注意、在 SafeetyMCU_bootloader \source 文件夹下的 bl_flash.c、该文件夹调用闪存 API。 因此、在您的情况下、请确保所有调用闪存 API 的源代码都包含在此加载和运行结构中、即包含在命令文件中的 flashAPI{}中。

    另请  查看:

    \Hercules 示例\bootloader \SafetyMCU_bootloader \source\BL_main.c. 确保同时复制两个段:


        /* 将  闪存 API 复制 到 SRAM*/
        //_copyAPI 2RAM_(&apiLoadStart、 &apiRunStart、 &apiLoadSize);
        memcpy (&apiRunStart、 &apiLoadStart、 (uint32)&apiLoadSize);

        /* 复制  .const 段 */
        //_copyAPI 2RAM_(&constLoadStart、 &constRunStart、 &constLoadSize);
        memcpy (&constRunStart、 &constLoadStart、 (uint32)&constLoadSize);

    希望这对您有所帮助。

    此致、

    周德伟

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

    您好!

    感谢您的详细回答。

    与示例引导加载程序和一些其他操作进行比较后、问题似乎是由我们使用的另一个库引起的。

    此致、

    Lukas