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:从对 Fapi_initializeFlashBanks 的调用中的数据中止

Guru**** 2481885 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/699194/tms570ls3137-data-abort-from-call-to-fapi_initializeflashbanks

器件型号:TMS570LS3137

总之、我从对 Fapi_initializeFlashBanks 的调用中获得了数据中止(我认为不精确)、我认为此代码起作用、因此(我认为)在调用之前 CPU 处于不正确的状态。 在致电之前需要满足哪些条件、或者我可以查看哪些条件来解决此问题?

详细信息:我将用户配置变量存储在闪存的1个上段中、因此该代码块尝试仅擦除该段。 这个代码过去是有效的--在我实施引导加载程序之前,它允许用户在没有 JTAG 的情况下升级固件,所以这个新的引导加载程序代码有新的闪存操作代码,必须使闪存控制器处于错误状态。 我已经尝试了多种操作:从 RAM 或闪存中调用 Fapi_initializeFlashBanks、禁用或启用 ARM FlashECC、所有这些操作都无效。 此外、我还在 系统模式下调用 Fapi_initializeFlashBanks。 我已经阅读了您的 F021闪存 API 指南、其中规定 在执行任何其他操作之前调用 Fapi_initializeFlashBanks。

此外、在中止处理程序中、ESM 寄存器都为零、并且 CPSR-A 标志被置位、这意味着它是一个不精确的数据中止。  

谢谢、

Jim

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

    1、所有与闪存擦除/编程 API 相关的代码不能在与待擦除扇区相同的组中执行。 您可以将这些代码复制到 SRAM 并在 SRAM 或另一个闪存组中执行它们。
    2. Fapi_initiataleFlashBanks ((uint32_t) CLK_FREQ)中使用的时钟应与系统时钟(HCLK)相同。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    QJ、

    问题不是你的两种可能之一--我正在从 RAM 执行闪存 API 调用,我使用的频率与 HCLK 相同-- 160MHz。 您还能想到其他任何可能性吗?

    谢谢、

    Jim

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

    用于在 bank1中存储用户配置变量的上段、以及位于 bank0中的代码吗? 在您的闪存擦除/编程操作期间是否触发了任何中断?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    QJ、

    我修复了这个问题--到 RAM 的 FAPI 复制发生在 MPU 被初始化之后,所以 RAM 复制只是没有做任何事情;随后对 FAPI 函数的调用跳转到无代码。  

    感谢你的帮助。

    Jim