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.

[参考译文] RM48L952:刷新时中断

Guru**** 2465890 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/662529/rm48l952-interrupts-while-reflashing

器件型号:RM48L952
主题中讨论的其他器件:UNIFLASH

您好!

在刷新包含中断向量的闪存组时、我在处理中断时遇到问题。

我们在闪存组0的前两个扇区中运行引导加载程序、然后在其余扇区中运行应用程序。 应用程序需要使用嵌套中断、因此我们将使用 IRQ 调度模式、请遵循 TI 应用手册。 引导加载程序中断向量都仅在应用程序开始时分支到向量、如另一个 TI 应用手册所述。

引导加载程序运行从 RAM 重新编程期间所需的所有代码、并使用 RTI 计时器中断定期为 TPS65381看门狗提供服务。 我已经将 RTI 计时器设置为使用 FIQ、因为我们正在为应用程序代码使用调度模式 IRQ。 但是、一旦触发 RTI 中断、闪存编程序列启动、引导加载程序就会崩溃。

如果我理解正确、则会出现此问题、因为您在写入闪存组时无法从闪存组执行代码(包括中断矢量)。 为了解决此问题、我尝试使用参数覆盖模块将对中断矢量的访问重定向到 RAM 副本。 遗憾的是、当闪存编程开始后触发 RTI 中断时、这仍然会由于预取中止而崩溃。  如果我们禁用 RTI 计时器和看门狗、则重新编程成功完成。

我不知道为什么我看到这个问题(就我所能告诉的那样)、我当时没有运行闪存中的任何内容。 这是一种在引导加载程序中使用中断的明智方法、还是有另一种更好的方法?

非常感谢

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

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

    话虽如此、在这段时间内处理 Q&A 看门狗变得很困难。 为此、需要复制为其提供服务的代码、以便从 RAM 以及编程算法中执行。 问题在于如何管理响应窗口和时序、前提是闪存编程操作随器件老化而变化(如果您需要满足数据表中指定的最大编程和擦除时序)。

    有两个选项可管理此任务。

    1) Brut 力。 这将是经过尝试的真正的周期计数方法以及策略性地放置 WD 消息。 鉴于编程应用程序的大小没有中断、从时序角度而言、程序执行时序应该是相对确定的。

    2) 强制 PMIC 进入诊断模式、以便您不必为 WD 提供服务。 这意味着 MCU 必须强制 TPS 器件复位。 最简单的方法可能是创建故意的 WD 违规、从而在 WD_RST_EN=1时使 WD_FAIL_CNT 超过7。 当然、这也会强制 MCU 复位、因此您需要将信息存储在 SRAM 或数据闪存中以指示复位原因、并在引导期间绕过 TPS 安全初始化(需要禁用诊断模式超时) 直接转到引导加载程序而不是应用程序。 编程完成后、清除标志并强制 SW 复位以正常引导至新的应用程序代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好、Chuck、

    非常感谢您的建议。 我最终成功地使上面的选项2运行良好。 一段时间让我感到很失望的是、PMIC 寄存器在复位期间保持其数据、以及进入诊断状态时 BIST 完成所需的21ms 时间。 在允许延迟后、我能够成功禁用看门狗并将其保持在诊断状态、以防止其在重新编程期间复位。

    非常感谢