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.

[参考译文] MSP430FR6879:重启后 Uniflash 程序验证失败

Guru**** 2511985 points
Other Parts Discussed in Thread: UNIFLASH, MSP430FR6879, MSP430FR6989

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/805617/msp430fr6879-uniflash-program-verification-fails-after-power-cycle

器件型号:MSP430FR6879
主题中讨论的其他器件:UNIFLASHMSP430FR6989

您好!

我的客户报告了 Uniflash 和 MSP430FR6879的奇怪行为。
他们按以下顺序测试产品。

1) 1)使用 Uniflash 编写程序
2) 2)验证正常
3) 3)执行多项功能测试、所有测试均通过。
4) 4)对器件进行下电上电(断电后重新上电)。
5) 5)再次验证 Uniflah =>验证失败*某些*设备

错误地址因电路板而异、但地址都在 MPU 保护区内。

电路板#40:
[2019/5/28 13:45:43][错误] MSP430:文件加载器:验证失败:地址0x0D558处的值不匹配请验证目标存储器和存储器映射。

电路板24:
[2019/5/28 13:57:33][错误] MSP430:文件加载器:验证失败:地址0x0D7EC 处的值不匹配请验证目标存储器和存储器映射。

电路板42:
[2019/5/28 13:39:08][错误] MSP430:文件加载器:验证失败:地址0x0D7F6处的值不匹配请验证目标存储器和存储器映射。

电路板#63:
[2019/5/28 13:51:44][错误] MSP430:文件加载器:验证失败:地址0x0C832处的值不匹配请验证目标存储器和存储器映射。

电路板#22:
[2019/5/28 14:15:09][错误] MSP430:文件加载器:验证失败:地址0x0AE34处的值不匹配请验证目标存储器和存储器映射。

在同一电路板上、始终相同的地址失败。 例如、Board#40总是在0x0D558处失败。
这与 MPU 功能相关吗? 还有许多其他电路板的故障过程完全相同。
此类问题的可能原因是什么?

谢谢、此致、
田志郎一郎

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

    你(们)好

    我正在与线程所有者合作。

    发生验证错误时、我获得了 Uniflash 生成的调试服务器日志。

    (执行文件的路径被删除、因为它包含客户信息。)

    e2e.ti.com/.../no40.zip

    如果有问题、请参考。

    贝斯特雷加兹

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

    从您的测试过程来看、在功能测试期间或在下电上电期间、可能会覆盖这些特定位置的存储器。

    如果您只对电路板进行编程、对其进行循环通电、然后验证同一程序、您是否仍然会看到这种现象?

    此致、

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

    您好、Matt

    感谢你的答复。

    客户在40号电路板上检查了以下步骤10次。

    1) 1)使用 Uniflash 编写程序
    2) 2)验证正常
    3) 3)对器件进行下电上电(断电后重新上电)。
    4) 4)再次验证 Uniflah =>验证失败
    5) 5)擦除

    在上面的过程中、它们在 Uniflash 控制台上收到相同的错误消息、但地址已更改。
    这意味着错误消息中的"0x0D558"更改为其他值。

    贝斯特雷加兹

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

    感谢您确认该步骤。 缩小问题范围的步骤可能需要多条路径,因为我们使用的是多个变量(即自定义电路板、自定义软件、Uniflash 版本等)。

    为了澄清一点、您的客户使用的是 Uniflash 的哪个版本?

    我下载了最新版本、并尝试在 MSP430FR6989 Launchpad 上重新创建测试设置、并从 TI Resource Explorer 中重新创建示例代码、即使在多次重启后也无法看到验证失败。 您的客户能否尝试从 TI Resource Explorer 上传 TI 提供的 MSP430FR6879示例代码 并再次尝试测试? 如果验证失败与示例代码一同消失、则会开始指向自定义软件的方向。

    此致、

    Matt

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

    感谢你的答复。

    我现在可以回答以下问题。
    >为了澄清、您的客户使用的是 Uniflash 的哪个版本?
    Uniflash 为 v4.5.0。

    贝斯特雷加兹
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    相关知识! 首先,我建议升级到最新版本( Uniflash 5.0 ),并确认这种现象仍在发生。 如果是这样、我们可以继续执行我在前面注释中建议的初始调试步骤。

    此致、

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

    您好、Matt

    感谢你的答复。

    我们尝试了 Uniflash5.0,但看不到改进。

    顺便说一下、我们的项目使用 MPU 函数。

    您能看到我们的配置吗?
    我附加了 CCS 设置和源代码片段。

    - CCS 设置

    源代码片段

    --------

    void main (void)

      WDT_A_HOLD (WDT_A_base);  // WDT 停止

      //设置段

      MPUCTL0_H =0xA5;         //写入 PWD 以访问 MPU 寄存器

      MPUCTL0 = MPUPW;         //写入 PWD 以访问 MPU 寄存器

      MPUSEGB1 = 0x0800;        // B1 = 0x0800;B2 = 0x2280

      MPUSEGB2 = 0x2280;        //将边框分配给句段

      MPUSAM = MPUSEG1RE |/* MPUSEG1WE |*/ MPUSEG1XE |    //段1 -执行、读取

          MPUSEG2RE |/* MPUSEG2WE | MPUSEG2XE |*/  //段2 -执行、读取、写入

          MPUSEG3RE |/* MPUSEG3WE | MPUSEG3XE |*/  /段3 -      读取、写入

          MPUSEGIRE /*|MPUSEGIWE         */;  //信息   -执行、读取

      MPUCTL0 = MPUPW | MPUENA | MPUSEGIE;    //启用 MPU 保护

    ***

    --------

    您是否在此 MPU 配置上看到任何问题?

    贝斯特雷加兹

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

    作为启用 MPU 的源代码的初始直通、我注意到注释与实际情况不同。

    MPUSAM 寄存器正在初始化、以便:
    段1 (0x4400 - 0x7FFF)被读取和执行
    段2 (0x8000 - 0x227FF)是只读的
    段3 (0x22800 - 23FFF)为只读
    信息为只读

    注释描述了与当前实施的段具有不同访问权限的段。

    我注意到的另一件事是不需要"MPUCTL0_H =0xA5;"这一行、您访问 MPU 寄存器时唯一需要做的就是下面的代码行:MPUCTL0 = MPUPW;

    客户是否能够使用 TI 在其当前故障的定制板上提供的示例代码确认类似行为(意外验证失败)? 如果他们无法使用 TI 示例代码重新创建行为、则会导致我相信源代码的某些方面会导致验证失败。

    此致、

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

    感谢你的答复。

    >我注意到的另一件事是不需要"MPUCTL0_H =0xA5;"这一行、
    关于 MPU 设置、我知道不需要 MPUCTL0_H=0xA5。
    同时、我可以认为 MPUCTL0_H=0xA5对我们的设置没有影响、对吧?

    我下载并验证了一个仅使用 main()生成为新项目的项目。
    未复制错误。 错误可能是由源代码引起的。

    我必须检查客户项目、包括链接器和属性设置。
    关于链接器或工程属性方面、请告诉我您是否有任何查看位置的想法。

    贝斯特雷加兹
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对 MPUCTL0_H 的写入应该可以;对 MPUCTL0_H 寄存器的错误访问将禁用对 MPU 模块的写入访问、因此如果您能够看到 MPU 外设寄存器正在被正确初始化、那么它就可以了。

    最好将重点放在运行时处理或影响内存的项目区域。 也许您可以开始删除源代码的块、直到您能够识别哪个块在下电上电后会导致验证失败。


    关于链接器文件和工程属性、客户是否对默认设置进行了任何重大修改?

    此致、

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

    您好、Matt

    感谢你的答复。

    我将客户的项目与空白源代码一起使用、即所有功能代码都已注释掉、
    然后复制验证错误。

    另一方面、创建新项目并将客户的功能代码添加到其中、
    然后验证错误未被复制。

    >关于链接器文件和项目属性,客户是否对默认设置进行了任何重大修改?
    是的。 它们似乎使用默认修改后的链接器命令文件。 (存储器映射和中断矢量)

    我可能需要一点时间来调查和答复。
    给您带来的不便、我深表歉意。

    贝斯特雷加兹

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

    现在、这是一些相当有趣的发现!

    不必担心需要额外的调查时间,这是调试的乐趣:)

    如果您能够使用默认项目设置、TI 提供的链接器文件和客户的功能源代码来解决问题、这是否是开发最终解决方案的可行起点? 必须对功能进行测试以确保正常运行、并且可能需要根据客户的要求进行微调、但从已知的工作软件解决方案开始、这是一个不错的选择。

    此致、

    Matt

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

    您好!

    从回听到现在已经有几天了、所以我要继续、现在将此主题标记为"TI 认为已解决"。

    根据我们之前的信函、对链接器文件和/或工程设置进行的一些修改导致验证失败似乎非常有效、因为将工程的所有功能移植到新工程可解决此问题。 如果此主题锁定、并且有更多有关该故事的详细信息、请随时打开链接此主题的另一篇文章。

    此致、

    Matt