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.

[参考译文] F28377D-SEP:选择不同的 CPU

Guru**** 2862320 points

Other Parts Discussed in Thread: TMS320F28388D, SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1637285/f28377d-sep-selection-of-different-cpu

器件型号: F28377D-SEP
主题中讨论的其他器件: TMS320F28388DSysConfigC2000WARE

大家好、我正在使用 TMS320F28388D 双 μ‑内核 MCU (CPU1 + CPU2)。

我的用例如下:

  • 故障数据在 CPU1 中生成。
  • 我想将所有故障日志存储在 CPU2 拥有的专用原始闪存区域中。
  • 因此、CPU1 会将故障数据传输到 CPU2(使用 IPC)、CPU2 会将数据写入其闪存区域。

此设计是有意为之:CPU1 仅发送数据、CPU2 单独访问和写入其闪存。

根据我的理解:

  • CPU1 负责系统引导、闪存配置和总体所有权设置。
  • CPU2 由 CPU1 引导并运行自己的应用程序。
  • 应用程序编译为两个单独的 CCS 工程、一个用于 CPU1、一个用于 CPU2。

在‑设置这些闪存相关设置或对其进行编程时、我会遇到错误。  我发现一些建议说:

  • 闪存配置必须通过 CPU1‑专用工程完成。

问题在于:

  • 在 CCS 中‑新工程时、‑提供的示例工程看起来是通用的、并且不清楚如何确保工程真正特定于 CPU1/CPU2。
  • 因此、我不确定是否正确设置了 CPU1 工程来处理闪存配置和 CPU2 引导。 (因为在我写入引导命令时会引发错误)

如何正确创建或识别适合以下应用的 CPU1‑专用 CCS 工程:

  • 闪存配置
  • 闪存扇区分配
  • CPU2 引导控制

在 F28388D 上管理这种交叉‑CPU 闪存记录用例而不发生闪存所有权或引导配置错误的建议方法是什么。


下面是用于创建新工程的映像 — 没有用于选择 CPU 的选项
image.png

当我使用示例工程(根据 TI 的建议、使用 SysConfig 运行两个空工程-)时、我在 SysConfig 中启用闪存并在 C 中编写以下代码行。但构建时会出现错误

void main (void)

  设备初始化 ();
  device_initGPIO();

  BOARD_INIT ();

  MemCfg_setBusMasterAccess (MEMCFG_SECT14、MEMCFG_MASTER_CPU2);
  MemCfg_setBusMasterAccess (MEMCFG_SECT15、MEMCFG_MASTER_CPU2);

  DEVICE_BOOTCPU2 (C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH);

  while (1)
  {

  }

}
image.png

这使我无法继续在项目上工作。 请告诉我如何解决问题。

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

    尊敬的 Reshma:

    您的问题。 请允许我有一天的时间回复您。

    谢谢、

    IRA

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

    我已经在 12.8 和 20.5 版本的 CCS Studio 中进行了检查、但我也有同样的问题

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

    尊敬的 Reshma:

    我建议您使用 CCS 20.5、并将 CPU1、CPU2 和多工程从 C2000Ware_x_x_x\driverlib\f2837xd\examples\dual\empty_projects 导入到您的干净工作区中。

    在这里、您可以根据工程编辑 empty_driverlib_main_cpu1.c 和 empty_driverlib_main_cpu2.c。 然后、您可以调试多工程(它包含一个将正确的二进制文件映射到正确的 CPU 的 system.xml 文件)并以该方式进行开发。

    每个 CPU 都将具有独立的 sys config 和链接器命令文件、但由于在多工程中是如何设置 system.xml 文件、它们将正常协同工作。

    你能用这种方式尝试一下,让我知道它是否适合你吗?

    谢谢、

    IRA

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

    尊敬的 Ira:

    我使用了 CCS Studio 版本、两个版本都有类似的问题。

    我从示例工程开始 empty_c28x_dual_sysconfig因为它非常符合我的要求。 创建此工程时、会生成两个单独的工程 提供了迁移指南 、每个 CPU 一个。

    为了满足我的要求、我进行了以下更改:

    • 在中 CPU1 工程

      • 被启用 闪存中 SysConfig 配置。
      • 在中添加了一行main.c以引导 CPU2
      • 已配置 IPC SysConfig 文件中、以启用 CPU1 和 CPU2 之间的通信。
    • 在中 CPU2 工程

      • 配置 IPC 以生成 EOC 中断 设置特定 IPC 标志(在 CPU1 中配置的同一标志)时。
      • 写入了一小段代码来处理中断并将数据记录到闪存中。

    我还更新了 构建包含、包含选项和路径符号 根据需要。

    CPU1 工程构建成功、未出现任何错误

    问题

    时会看到这种情况 CPU2 工程 、我遇到多个构建错误。 我不确定为什么会出现这些错误或者我可能做什么错误。
    下面是错误

    下面是 CPU2 中的 main.c

    #include "driverlib.h"
    #include "device.h"
    #include "flash.h"
    #include "board.h"
    
    #define FAULT_LOG_FLASH_ADDR 0x08BE00UL // last sector example
    
    typedef struct
    {
    uint32_t source; // CPU1, peripheral ID, etc.
    uint32_t code; // fault code
    uint32_t timestamp;
    uint32_t extra;
    } FaultRecord_t;
    
    
    #pragma DATA_SECTION(cpu1FaultMsg, "MSGRAM_CPU1_TO_CPU2");
    volatile FaultRecord_t cpu1FaultMsg;
    
    
    extern uint16_t Flash_program(uint32_t *, uint32_t *, uint16_t);
    volatile uint16_t *force_flash_link = (uint16_t *)&Flash_program;
    
    
    __interrupt void IPC_0_ISR(void);
    
    void main(void)
    {
    Device_init();
    Interrupt_initModule();
    Interrupt_initVectorTable();
    
    Board_init();
    
    // Register IPC ISR
    // IPC_registerInterrupt(IPC_CPU2_L_CPU1_R,
    // IPC_INT0,
    // IPC_0_ISR);
    //
    // IPC_enableInterrupt(IPC_CPU2_L_CPU1_R, IPC_INT0);
    
    EINT;
    
    while(1)
    {
    
    }
    }
    
    
    void FaultLog_store(FaultRecord_t *fault)
    {
    Flash_claimPumpSemaphore(FLASH_CPU2_WRAPPER);
    
    // Example: append or overwrite logic here
    Flash_program((uint32_t *)FAULT_LOG_FLASH_ADDR,
    (uint32_t *)fault,
    sizeof(FaultRecord_t) / 2);
    }
    
    __interrupt void IPC_0_ISR(void)
    {
    // Acknowledge IPC flag
    IPC_ackFlagRtoL(IPC_CPU2_L_CPU1_R, IPC_FLAG0);
    
    // Copy MSGRAM fault record (important!)
    FaultRecord_t fault = cpu1FaultMsg;
    
    // Store in flash (CPU2-owned)
    FaultLog_store(&fault);
    }


    以下是链接器修改


    下面是构建配置


    以下是符号配置

    以下是一般配置

    此致、

    Reshma

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

    尊敬的 Reshma:

    对于 CPU2 工程、您能否删除 FLASH 符号并仅保留_FLASH 符号?

    谢谢、

    IRA

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

    是的、Ira。 我将其删除、但仍有相同的错误。

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

    尊敬的 Reshma:

    您能给我提供这些细节吗?  

    一些详细信息有助于进一步完善答案:

    • 您正在使用的器件 COFF 或 EABI 可执行格式?
    • 那个 C2000Ware 版本 是否已安装?
    • 您的链接器命令文件是否已.TI.ramfunc配置了段?

    谢谢、

    IRA

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

    尊敬的 Ira:

    我正在使用的器件 empty_c28x_dual_sysconfig 示例工程。 CPU2 工程的示例。 除了我之前在屏幕截图中显示的设置外、大多数设置都是相同的。

    1.这是 EABI 可执行格式。  

    2.我安装了 C2000Ware_26_00_00。 我的大多数设置都来自此文件、该文件已在之前的屏幕截图中显示。

    3..TI.RAMFUNC 已预设。

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

    尊敬的 Reshma:

    您能否检查是否 在项目中添加了“C2000Ware_26_00_00\libraries\flash_api\f2837xd\lib\f021_API_F2837xD/EABI"library?“? 如果不能、请添加它?

    谢谢、

    IRA

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

    尊敬的 Ira:

    我正在使用 F28388D MCU。 在社区门户中创建新票证期间、无法选择此 MCU。 因此、我选择了一个接近此值的 MCU。

    与您提到的类似、我已经将这些文件添加到了我的工程中。 您可以在我之前的图像中看到。 我 将再次附加它以供您参考。 在这里、我只能添加 til lib 文件。 无法进行进一步选择、因为在选择过程中它显示为空。 我还附上了对应的屏幕截图。

      

    此致、

    Reshma。

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

    尊敬的 Reshma:

    在第一个屏幕截图中的 Include Library File 字段中、选择添加选项(绿色+符号)、并尝试  从“C2000Ware_26_00_00_00\libraries\flash_api\f2838x\c28x\lib\"路径“路径中添加 F2838x_FlashAPI.lib。

    您能够做到这一点吗?

    谢谢、

    IRA

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

    尊敬的 Ira:

    否、我无法从“C2000Ware_26_00_00\libraries\flash_api\f2838x\c28x\lib\" 路径“路径中添加“F2838x_FlashAPI.lib"。“。 我的第二个屏幕截图显示了相同的。

    现在、我已将这些库放在 settings/C2000 链接器/文件搜索路径下。 这是正确的地方吗?

    我是否应该将它们放入 include 选项>(settings/build//c2000 编译器/包含选项)? 在这里、我还尝试了 从 “C2000Ware_26_00_00\libraries\flash_api\f2838x\c28x\lib\"路径“路径中添加“F2838x_FlashAPI.lib"。“。 但在这里、我看不到该选项。

    此致、

    Reshma。

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

    尊敬的 Reshma:

    我已经向您发送了一封电子邮件、请求进行调试呼叫。

    谢谢、

    IRA

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

    谢谢 Ira、

    电话真的帮助我了解发生了什么。

    由于出现错误、未正确调用“Flash_program"函“函数。 就会删除它以进行测试。 构建良好。

    再次感谢。