工具与软件:
我们将测试引导加载程序的稳健性、通过断开整个系统的电源来干扰闪烁(在擦除闪存之后、DSP 将数据写入闪存)。
然后恢复整个系统的电源、重新对 DSP 进行供电、但代码不会在主函数中运行。 我使用调试 GPIO 在 main 函数中进行切换、但 GPIO 级别为 浮动、而不是切换。
当闪存更新时、DSP 锁定是否有任何限制?
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.
工具与软件:
我们将测试引导加载程序的稳健性、通过断开整个系统的电源来干扰闪烁(在擦除闪存之后、DSP 将数据写入闪存)。
然后恢复整个系统的电源、重新对 DSP 进行供电、但代码不会在主函数中运行。 我使用调试 GPIO 在 main 函数中进行切换、但 GPIO 级别为 浮动、而不是切换。
当闪存更新时、DSP 锁定是否有任何限制?
引导加载程序和应用程序的存储器映射是、引导加载程序位于0x80000-0x81FFF 范围内、应用程序位于0x82000-0xBFFFF 范围内。 闪存更新通过 UART 通信来更新应用范围内的数据。

如果请求应用更新、代码将跳转至引导加载程序并执行闪存擦除和闪存写入。 闪烁停止在哪里? 根据刷写序列、闪存擦除 完成(Fapi_issueAsyncCommandhAddress 函数已完成)、在闪存写入的循环期间发生了干扰(Fapi_issuePorgrammingCommand 函数 正在运行循环)。
应用起点地址分配在0x80000-0x80001的地址中、在执行应用程序更新时该范围不会更新/更改。 codestart 函数位于引导加载程序范围内、在应用程序运行时无法删除。

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

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