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.

[参考译文] TMS320F280041C:使用 F280041和 XDS110的调试操作与独立运行不同

Guru**** 2482105 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1451011/tms320f280041c-debugging-operation-with-f280041-and-xds110-is-different-than-running-stand-alone

器件型号:TMS320F280041C

工具与软件:

您好!

我们遇到了一个问题、即我们的独立固件在特定条件下会失败、但当该代码(在启动调试时不会重建代码)与 XDS110一起运行时、它运行正常。  我想了解独立操作与调试操作之间的区别、并想知道是否有介绍这些区别的文档。

我们看到的问题是、我们的引导加载程序在首次使用引导加载程序的独立操作或调试操作时就可以成功加载应用程序。  可重新启动控制器、在这两种情况下、引导加载程序现在都将找到有效的应用程序并跳转到该应用程序。  但是、如果在首次成功下载后我们重新启动新的下载(不需要重新启动、只需告诉与 TI 目标通信的工具启动另一个引导加载)、连接了调试功能的系统将成功启动并完成(您可以重复执行此操作)。  但是、独立电路板在尝试第二次启动加载时将失败。

感谢您提供的任何帮助。

Bruce

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

    Bruce、您好!

    我想了解独立操作和调试操作之间的区别、并想知道是否有文档涵盖了这些区别。

    我建议您首先参考 TRM 中独立引导和仿真引导的引导流程 图(第5.5节器件引导流程图)以了解这些差异。 在"引导 ROM"一章中包含了许多详细信息。  

    我对此问题有几个问题:

    1. 您能否展示自己编程到 OTP 中的独立引导配置和编程到 RAM (0xD00)中的仿真引导配置?
      1.  您选择什么引导模式选择引脚和引导定义?
      • Unknown 说:
        但如果在首次成功下载后我们重新启动新下载
      1. 器件是在重新启动下载之前跳转到新应用 、还是 在 仍处于引导加载程序中时会发生这种情况?

    此致!

    Matt

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

    Matt、

    我不会为原型修改 OTP 中的引导配置。  为了实现生产、我们修改了 GPREG1、GPREG3和 BOOTCTRL、以强制引导加载程序从闪存引导。  我在使用0xD00进行调试期间不执行任何操作。  我的调试是使用闪存构建完成的、并且为闪存引导配置了用于确定引导模式的两个引脚。

    引导加载程序基于 J1939。  引导周期完成后、引导加载程序保持活动状态。  我们可以指示引导加载程序跳转到应用程序、但在此周期中不会这样做。  我们根据 CAN 命令运行引导加载、然后当第一个周期成功完成时、我们通过发送相同的 CAN 命令重新运行同样的周期。   如果我在 JTAG 中运行、该过程看起来会成功运行、但如果我在命令闪存擦除时独立运行、引导加载程序会挂起。  它是我尝试了解的这个差异。

    我们发现了一个有趣的现象、在第2次尝试后引导加载程序的 JTAG 和非 JTAG 操作都无法正确对闪存进行编程、就像我们在移除 JTAG (如果需要)的情况下断电和上电时、程序会保持在引导中、因为它会认为应用程序无效、这通常是因为 EEPROM 中存储的 CRC 与在应用闪存上计算的 CRC 不匹配。

    谢谢- Bruce

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

    Bruce、您好!

    感谢您的澄清、我将 邀请闪存 API 专家来提供帮助。

    同时、我还有几个额外的 问题:

    闪存 API 是否与.TI.ramfunc 一起复制到 RAM 中?  您能否共享引导加载程序的链接器命令文件和.map 文件(在 BUILD CONFIG 文件夹中)?  此外、如何在引导加载程序中初始化闪存 API?

    此致!

    Matt

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

    Matt、

    因此、我们的独立版本可以正常工作、这样、如果您在停留于引导加载程序的情况下运行多个编程周期、它可以正常工作。  事实证明这是一个指针问题。

    我在上一次答复的最后一段中所述的问题也得到了处理。  这是由于通过 CAN 发送了不正确的标志。  这一问题也已得到解决。

    我仍感到困惑的是、当 JTAG 调试下的相同代码重复运行时、独立运行的相同代码会锁定。一旦我们修复了 CAN 标志问题、JTAG 版本将按预期工作、而独立运行在第二次编程操作期间锁定。  由于您无法通过 JTAG 进行调试来捕捉问题、因此很难解决此问题。  我认为这可能是某些错误捕获、但这些例程使用了 ESTOP0、因此、在调试期间、我不应该命中这些、在运行模式期间、我应该命中 ESTOP0后面的无限循环。

    谢谢- Bruce

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

    Bruce、您好!  

    感谢您更新具有分辨率的主题! JTAG 调试无法捕获这一问题是很不常见的、我将对此进行调查、如果发现原因、则更新此线程。  

    此致!
    Matt