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_BlockEras()-预取异常

Guru**** 2481465 points
Other Parts Discussed in Thread: HALCOGEN, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/698538/tms570ls3137-fapi_blockerase---prefetch-exception

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGENUNIFLASH

您好!

我正在使用引导加载程序。 我从 TI 的引导加载程序示例中复制了 BL_FLASH.c/.h 和几个其他相关文件。

包括 F021版本02.01.01并与 F021_API_CortexR4_be.lib 链接。

我使用 Halcogen 版本3.05创建驱动程序和启动代码。

除了 BL_FLASH.c 中的 Fapi_BlockErase ()抛出预取异常外、所有操作都正常。 (跳转至预取指令行)

奇怪的是,当我在 main()中注释掉 rtiStartCounter(rtiCounter_block0)时,Fapi_blockErase 不会抛出此异常。

我需要有 RTI 来满足其他要求。 不确定该症状的原因。

RTI_counter0运行与 FLASH_ERASE 操作和抛出预取有何冲突?

谢谢、

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

    如果要擦除代码组中的扇区、必须将与闪存操作相关的代码复制到 SRAM 并在 SRAM 中执行这些代码。 否则、您将遇到问题。

    BTW、提供了新版本 HALCoGen:v4.07
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    噢、是的、闪存相关代码和 F021库被复制到 SRAM 中并从 SRAM 运行。 这正是 TI 在引导加载程序示例中完成的方式。
    在这方面没有问题。

    BL_FLASH.c 中的 Fapi_BlockEras()抛出预取异常。 (跳转至预取指令行)

    奇怪的是,当我在 main()中注释掉 rtiStartCounter(rtiCounter_block0)时,Fapi_blockErase 不会抛出此异常。

    我需要有 RTI 来满足其他要求。 不确定该症状的原因。

    RTI_counter0运行与 FLASH_ERASE 操作和抛出预取有何冲突?

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

    e2e.ti.com/.../662529

    e2e.ti.com/.../926522

    2018年发布的第一篇文章说:

    "强烈建议在重新编程期间禁用中断。 这就是我们所有编程器的设置方式、包括 CCS 和 Uniflash、以便闪存编程操作不会中断。"

    根据第一个帖子、在擦除引导加载程序 ISR 所在的组上的扇区时、不允许中断(IRQ/FIQ)。
    这是真的吗?
    请注意、当我尝试擦除/编程组0的扇区4时、我的 ISR 位于组0的扇区1。

    请澄清。

    背景:
    ===================
    我的 BOOLOADER 代码位于组0的前几个扇区中、启动时与闪存相关的代码已复制到 RAM 中、这是在 TI 引导加载程序示例中完成的操作。
    我正在尝试擦除组0的扇区4、并将应用二进制文件写入组0的扇区4。

    我启用了 sci TX、Rx 中断和 RTI 比较0中断。 所有这些中断是 IRQ。
    启用 RTI 比较0中断会在擦除组0的扇区4时导致预取中止。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    将在闪存操作(擦除/编程)期间执行的代码应位于另一个闪存组或 SRAM 中。
    请将 RTI ISR 复制到 SRAM。

    再试一次:
    由于 LS3137有2个闪存组、因此擦除 bank1中的扇区并将应用程序编程到 bank1。 您可以在 bank0中执行代码、因此无需将代码复制到 SRAM。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    我刚刚尝试过、在闪存组0中启用中断并运行 RTI ISR、以及一次擦除/编程组1没有问题。