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.

[参考译文] TMS320F28P650SH:DSP 在电源恢复后无法运行至主功能

Guru**** 2466670 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1470083/tms320f28p650sh-dsp-can-not-run-to-main-function-after-power-supply-recover

器件型号:TMS320F28P650SH

工具与软件:

我们将测试引导加载程序的稳健性、通过断开整个系统的电源来干扰闪烁(在擦除闪存之后、DSP 将数据写入闪存)。

然后恢复整个系统的电源、重新对 DSP 进行供电、但代码不会在主函数中运行。 我使用调试 GPIO 在 main 函数中进行切换、但 GPIO 级别为 浮动、而不是切换。

当闪存更新时、DSP 锁定是否有任何限制?

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

    您好!

    我不确定闪烁停止期间的位置(如果您的 codestart 在断开连接前未被存储)。 引导加载程序无法引导到闪存入口点是可以理解的。 我需要更多这方面的信息。

    谢谢!

    Charles

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

    引导加载程序和应用程序的存储器映射是、引导加载程序位于0x80000-0x81FFF 范围内、应用程序位于0x82000-0xBFFFF 范围内。  闪存更新通过 UART 通信来更新应用范围内的数据。

    如果请求应用更新、代码将跳转至引导加载程序并执行闪存擦除和闪存写入。  闪烁停止在哪里? 根据刷写序列、闪存擦除 完成(Fapi_issueAsyncCommandhAddress 函数已完成)、在闪存写入的循环期间发生了干扰(Fapi_issuePorgrammingCommand 函数 正在运行循环)。

    应用起点地址分配在0x80000-0x80001的地址中、在执行应用程序更新时该范围不会更新/更改。 codestart 函数位于引导加载程序范围内、在应用程序运行时无法删除。

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

    您好!

    感谢您的参与。  回到最初的点、当器件在上电复位后恢复时、程序计数器将什么声明为入口点?

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

    您好、Charles、  

    当我在电路板上进行 JTAG 调试时、 点击"CPU Reset"、PC 指针在3羽毛2上。

    但对于整个系统而言、复位后不会检查 PC 指针。 我认为这应该与 JTAG 调试相同、对吧?

    如果它在调试模式下与"CPU Reset"不同、您可以指导我如何在整个系统上获取 PC 指针吗?

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

    您好!

     写入闪存时关闭电源可能会损坏闪存。 我认为、在您的引导流程中、您应该检查闪存是否已正确编程。

    此致、

    Rajeshwary

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

    您好!

    代码起始(引导流程)中有闪存检查、如果应用起始地址和应用结束地址未更新为特定数据、它将跳转到引导加载程序代码以再次等待闪存。 但问题是、在电源复位后不会执行代码启动。

    写入闪存时可能会断电、即使速率非常低也是如此。 应防止闪存被损坏、并确保代码可以再次执行到闪存中。 这是用户的要求。

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

    您好!

    看看您的代码共享的屏幕截图、我们发现地址0x3FEAA2是 NMI 向量地址。 我认为、当您在闪存编程期间断电时、闪存未正确编程、从而导致您在 引导流程中进行应用起始地址和应用结束地址检查。 因此、ECC 错误会被触发、代码将在 NMI 结束。

    我建议在您的 代码中实现 NMI 处理程序 、以检查在哪个地址 生成 ECC 错误、并擦除该错误、然后对该扇区重新编程。

    此致、

    Rajeshwary

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

    您好!

    这个屏幕截图针对 JTAG 调试模式、点击"CPU reset"。  

    您能否指导我如何 定义 CPU 块资源、它是否在  NMI 中断中被阻止、或者未正确跳转到代码起始地址。 以及如何检查故障资源、ECC 错误或其他信息。  我是否应该在引导加载程序代码中添加一些调试代码来检查此情况? 或添加代码开始代码。  

    请举个例子、谢谢。

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

    您好!

    我可以在下周早些时候查看此主题。

    此致、

    Rajeshwary

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

    尊敬的苗苗苗王:

    关闭此主题、因为问题已解决。

    如有任何其他疑问、请打开新主题帖。

    此致、

    Rajeshwary