我已经开发了一个双核(+CLA1)工程、并希望将其迁移到从片上闪存运行以实现独立运行。
从 RAM 运行时、一切都正常运行、我可以通过调试器来监控运行。
我认为我已经采取了所有必要的步骤来从闪存引导并运行:
- 正如内存分配中所确认的、所有已初始化的代码都链接到两个 CPU 中的闪存、包括开始
- 用于设置闪存控制寄存器(InitFlash)的函数存储在.TI.ramfunc 段中、该段会加载到闪存中、但从 RAM 运行。 它是在 InitSysCtrl ()中从闪存复制到 RAM 的,我可以从内存浏览器看到代码被复制。
- 初始化 PIE 矢量表的代码已经存在、但尚未实现。
当我运行应用程序时(使用正确的链接器命令文件为两个 CPU 构建代码)、在禁用自动运行的情况下、连接调试器并加载到两个 CPU、然后运行 CPU1、 然后是 CPU2)、CPU1将 Ramfuncs 复制到 RAM、初始化闪存控制寄存器、 尝试通过 IPC (IPCBootCPU2)引导 CPU2、并等待来自 CPU2的成功引导标志。
CPU2也将 Ramfuncs 复制到 RAM 中,但是当到达 InitFlash ()中的 EALLOW 命令时,它会步进到0x3FE00A,调试程序会指示"没有定义符号"。
我怀疑涉及到某种安全保护。 CPU2中访问保护 NMAVFLG 寄存器的 CPUWRITE 和 CPUFETCH 位被置位。 在 CPU1中、将 MAVFLG 寄存器的 CPUWRITE 位置位。
两个 CPU 中双代码安全模块 RAMSTAT 和 SECTSTAT 寄存器的所有字段(除了保留的字段)都设置为3、表示它们不安全、因此我认为这不是 DCSM 问题?
请提供任何协助。 谢谢。