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.

[参考译文] TMS320F280021:刷写后、独立代码在没有 ERTM 的情况下不会引导/运行?

Guru**** 2535750 points
Other Parts Discussed in Thread: TMS320F280021

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1135593/tms320f280021-after-being-flashed-the-standalone-code-does-not-boot-run-without-ertm

器件型号:TMS320F280021

团队、
以下是此 E2E 帖子的后续内容:
https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1123529/tms320f280021-standalone-code-not-running-without-ertm?tisearch=e2e-sitesearch&keymatch=TMS320F280021%252520boot%252520flash#
您能帮助进一步调试行为吗?
已根据硬件设计指南 SPRACZ9 (如上拉/下拉、clk、REST 时序、引导序列等原理图建议)检查了硬件板:

由于我们在运行时写入闪存、因此启动序列中的错误会在 POR 或复位期间发生。
我们使用 Fapi_DataOnly 进行写入、即我们不会生成额外的 ECC (->Flash_disableECC (FLASH0ECC_BASE))。
如果我们在运行时在没有 ECC 的情况下写入闪存区域、则在重新启动后的引导序列中会检测到不可纠正的闪存错误、因为在 f28002x_syctrl.c 中再次启用 ECC ECC 未在引导序列中启用。

ERTM 或 DBGM 确保不会处理由闪存错误引起的 NMI。
在库文件 f28002x_syctrl.c 中、如果没有 ERTM、NMI 将被处理并调用复位、并且由于不可纠正的闪存错误、引导序列停止。
在这种情况下、我们的电子产品不再工作。
正如我们所理解的、ERTM 可确保在这种情况下忽略 NMI。


在我们的 TMS320F280021软件中、我们使用闪存中的1KB 扇区来存储数据。 此扇区已锁定、无法上传源代码。 这也是有效的。 程序顺序如下:
1.装置初始化
2. ERTM (进入实时模式)
3.禁用 ECC 检查
4.闪存的初始化
5.数据被写入闪存扇区的正常操作(无 ECC 计算)
在这种情况下、即使在写入闪存扇区后、电子器件也能完美工作。

现在我们已经发现、如果我们在没有步骤2的情况下运行软件、MCU (软件)将在步骤5中写入闪存后无法启动。
执行以下步骤:
器件的初始化
2.(无 ERTM)
3.禁用 ECC 检查
4.闪存的初始化
5.数据被写入闪存扇区的正常操作(无 ECC 计算)

我们假设基于文档(TMS320F28002x 实时微控制器技术参考手册(修订版 A) 2020年10月5日)->表4-37。 引导状态位字段)、我们在第20步"发生闪存不可纠正的错误 NMI "之后进入 NMI。
因为在步骤1的初始化期间、ECC 由 TI 基础软件重新启用。
InitSysCtrl()
   InitFlash()
      Flash0EccRegs.ecc_enable.bit.enable = 0xA;
此 NMI 用于不可纠正的闪存错误、可防止我们的 F280021电路板再次启动。
我们可以通过执行以下操作在调试模式下重现问题:
1.执行步骤1-5
2.重新启动
3.执行步骤1
4.尝试重新引导->但我们只获得 NMI

我们在这里无法理解的是它导致该误差的位置。
忽略 ERTM 意味着、当在引导序列中检查闪存时、来自 FlashAPI_F28002x 库且与 Fapi_DataOnly 关联的函数 Fapi_issueProgrammingCommand 将始终导致闪存错误。

因此、如果相应 NMI 未被抑制、则该函数无效。

同样、我们不理解为什么在首次启动序列后调用 ERTM 会在刷写数据并重新启动后使电子设备仍然正常工作。
ERTM 是否永久存储在 POR 中? 或者为什么具有 ERTM 的器件仍然引导?
是否还有其他寄存器必须确保其值、以便器件引导或对引导过程产生影响?

提前感谢、

A.

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

    您好、A.、

    这方面的专家将在接下来的几天内离开、请预计会延迟回复。 他们应该能够在周三之前回复您

    此致、

    Peter

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

    您好、Anber、

    ECC 检查在加电时默认启用。  因此、如果对没有 ECC 编程的闪存空间进行访问、则会发生 NMI。  在您的应用程序初始化序列中、您的应用程序是否在 ECC_ENABLE 配置为值0之前读取该1KB 扇区中的任何一个(无 ECC)?

    谢谢、此致、
    Vamsi

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

    您好、Anber、

    我将关闭此帖子、因为我在过去3周没有收到您的回复。

    如果您需要进一步的帮助、请打开新帖子。

    谢谢、此致、
    Vamsi