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.

[参考译文] TMS320F28379D:从闪存进行双核引导- CPU2将不会执行 EALLOW

Guru**** 2587365 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1209234/tms320f28379d-dual-core-booting-from-flash---cpu2-will-not-eallow

器件型号:TMS320F28379D

我已经开发了一个双核(+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 问题?

请提供任何协助。 谢谢。

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

    Dave、您好!

    我认为 CPU2位于 ITRAP ISR (0x3FE00A)中。 您可以通过加载符号并指向源文件来确认这一点。 符号和源文件位于以下位置。

    C2KwareInstallationPath\libraries\boot_rom\f2837xd\revB\rom_sources\CCS_files\cpu02\Release

    C2KwareInstallationPath\libraries\boot_rom\f2837xd\revB\rom_sources\F2837x_bootROM\cpu02-bootROM\source

    根据您的描述、CPU2似乎正在访问 RAM、不允许对其进行访问。 您能否确认 FETCHPROTx 和 CPUWRPROTx 位字段中的设置。

    此致、PAWAN

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

    尊敬的 PAWAN:

    感谢您的答复。

    CPU2确实位于 ITRAP ISR 中、正如您所述、通过加载符号和指向源可以确认这一点。

    通过将当前链接器命令文件与 TI 提供的原始版本进行比较、我能够找出问题的原因:链接.TI.ramfunc 段以从 GS RAM 位置运行、该位置的 CPU2未在存储器配置寄存器 GSxMSEL 中配置为主控。 之前的同事已将这个部分更改为从 GS RAM 而不是 LS RAM 运行、这可能是因为在 CPU1中进行了相同的重新分配、以允许将 LS0-3用于 CLA 程序/数据。

    从闪存启动和运行我的应用程序时、我还有一些其他问题、但它们不同、因此我会将此问题标记为已解决、并在必要时为其启动新的线程。 谢谢。