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.

[参考译文] MSP430FR5994:请求固件升级后调试锁定的提示

Guru**** 2390755 points
Other Parts Discussed in Thread: MSP430FR5994

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1011683/msp430fr5994-requesting-tips-for-debugging-lockup-after-firmware-upgrade

器件型号:MSP430FR5994

我有一个适用于 MSP430FR5994的 TI-RTOS 项目。  我为该项目实施了系统内固件升级、其操作如下:

  1. 擦除 FRAM 的上半部分
  2. 将新固件下载到 FRAM 的上半部分
  3. 验证新固件
  4. 从 RAM 运行固件升级功能
    1. 在信息内存中注意正在进行固件升级
    2. 擦除 FRAM 的下半部分
    3. 将 FRAM 的上半部分复制到 FRAM 的下半部分
    4. 使用以下代码重新启动:
    5. PMMCTL0_H = PMMPW_H;
      PMMCTL0_L |= SVSHE_1 | PMMSWPOR | PMMREGOFF;
      __bis_SR_register(LPM4_bits | GIE);

这会在固件升级完成后执行 POR、并使用新固件重新启动 MSP430。  我在位于 FRAM 开头的持久性存储器中有一些数据。  在主程序开始时、我检查信息内存以查看是否有固件升级。  如果是、我会重新初始化持久性存储器中的所有变量。

这在过去很好、但我最近进行了一项更改、更改了永久性存储器部分中的数据结构。  现在、MSP430在固件升级后锁定、但通过正确升级的固件、额外的硬件复位开始正常运行。  我正在尝试调试该问题、但我在确定如何获取调试输出方面遇到了问题。

我无法使用调试器单步解决问题、因为问题仅在从固件的最后一个版本升级到当前版本后发生。  重新初始化所有 GPIO 之前、似乎出现了问题、因此我无法切换 GPIO 以指示代码进度。  在我调用 BIOS_start()之前也会出现此问题,因此我无法使用任何 TI-RTOS 调试或检测工具来跟踪此问题。

还有其他关于如何跟踪此问题的想法吗?  我不知道如何跟踪 POR 之后发生的情况以及代码被卡住的位置。

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

    您好,

    我注意到您更改了一些持久性数据、然后 MCU 更新异常。 那么、这些变化的根本原因是什么、您能否在这些变化之外分享更多信息?  是否可能由于这些变化而影响复位或其他功能。

    谢谢!

    此致

    Johnson

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

    Johnson、

    我不听从你的问题。  我在"persistent memory"部分中更改的是什么?  如果是、我将更改我保留在永久性存储器中的数据的数据结构。  固件升级后、所有变量都不在同一位置。  我在 INFOA 中设置了一个变量(不移动位置)以注意固件升级发生。  在 main()的开头,我检查固件升级是否刚刚发生。  如果是、我会重新初始化 persistent memory 部分中的所有数据。  然后、此函数在新固件中运行、因此所有变量都位于新固件的正确位置和预期结构中。

    但是、我不想过于深入地尝试调试问题。  我怀疑问题与固件升级后如何重置数据有关。  但是、我无法观察到发生了什么。  固件升级后(仅限此最新更改)锁定在某种不可操作状态。  如果我执行硬复位、它将运行新固件、而不会出现任何问题。  我正在尝试找出一种方法来观察固件升级完成和未知锁定之间发生的情况。  在我找到一种方法来实现这一点之前、任何根本原因分析都将是纯粹的猜测。  如果您对如何跟踪正在进行的操作有任何建议、请告诉我。

    谢谢、

    Bryan

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

    我想我找到了一个调试解决方案。  我在信息存储器中有一些可用空间。  当我到达代码中的某些位置时、我在信息存储器中递增字节。  此外,在 main()的开头,我将此数据移入信息内存中的其他字节。  这样、我就能够记录多次复位后某个段的进度。  如果我仍然无法确定固件升级后系统出现故障的原因、我将创建另一个线程来调试该问题。

    谢谢、

    Bryan