团队、
以下是此 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.