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:F28379D -调试期间 CPU1和 CPU2的分组

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/566760/tms320f28379d-f28379d---grouping-of-cpu1-and-cpu2-during-debug

器件型号:TMS320F28379D

我已与 CCS 团队一起解决了这个问题、得出的结论是、这个问题更有可能与 F28379D 中的引导固件相关。

这是原始帖子、演示了如何重现问题的步骤。 总之、对内核进行分组后、CCS 无法在第一次尝试时恢复和暂停执行、而不会产生错误。  https://e2e.ti.com/support/development_tools/code_composer_studio/f/81/t/559771

以下是客户直接提出的一些结论和问题、他们精通 C2000器件的引导加载程序流程:

  1. 由于引导 ROM 中存在 ESTOP0、运行两个内核会导致它们停止。  为什么代码中会出现这种情况?  为什么在连接调试器时停止代码执行?  我们只希望代码在启动时读取硬件跳线以确定引导模式。 这是引导 ROM 源代码声明的内容:
  2. void WaitBoot (void)
    {
    // sysctl_wdog_enable ();//用于调试
    if ((((otp_boot_configure_word & 0xFF000000)>> 24)= 0x5A)//检查键匹配是否失败
    {
    if ((((otp_boot_configure_word >> 8)& 3)= 0x1)
    }{
    cbrothe_boot};}in
    
    
    
    1}
    sysctl_wdog_enable();
    }
    
    //如果仿真器在这里停止
    // a)将 EMU_KEY 更改为0x55AA
    // b)将适当的引导模式写入 EMU_BMODE
    // c)执行调试器复位并运行
    asm (" ESTOP0");
    
    for (;)
    {
    }
    
    

谢谢!

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

    这是为了帮助识别(调试时)引导代码处于等待引导状态。 此时、将仿真启动设置写入每个内核的 KEY 和 EMUBMode 位置、然后复位、它将运行所请求的启动模式、该模式不会停止仿真器。

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

    您能否提供有关如何设置 Emu BMODE 的更多详细信息? 我尝试使用这些脚本、并将每个 CPU 设置为从闪存引导。 我看不出问题有什么不同。

    我将借用李基秀的以下案文,更好地解释如何重现这一问题:

    我首先启动了一个调试会话、对内核进行分组、然后将程序加载到各自的内核(首先是 CPU1、然后是 CPU2)。 然后、我以组的形式运行内核。 工作正常。 我可以运行并暂停多次、没有问题。 我可以停止单个内核并恢复执行、没有问题。 然后再次以组的形式运行。 一切都很好。

    当我暂停目标并执行 CPU 重置和重新启动(R&R)时、问题开始。 在以下情况下、我可以重现此问题:

    I R&R CPU2在 CPU1之前。 那么、无论我如何恢复执行(无论是运行该组、还是先运行 CPU1、还是运行 CPU2等…) 我遇到一个内核无法正常运行的问题。

    I R&R CPU1在 CPU2之前运行、然后作为一个组运行、或者我在 CPU1之前运行 CPU2。 CPU2未正确运行(中止)。

    它唯一正常工作的时间是在 CPU2之前 I R&R CPU1、然后在 CPU2之前首先运行 CPU1。 然后、它再次正常工作、之后我可以作为组或单个内核运行并停止、而不会出现任何问题。

    这是一个奇怪的问题、2个内核之间存在一些细微的相关性。 最好让 C2000专家深入了解…
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Lenio、

    每当 CPU1复位时、CPU2也会复位。 因此调试这种情况的正确方法是在 CPU1上执行调试复位并重新启动,在应用程序中 CPU1在 main()等待时,在 CPU2上执行调试复位并重新启动,这样现在两个 CPU 都位于各自的 main()上,现在您可以运行这两个 CPU。  

    因此、CPU1的调试复位必须在 CPU2之前始终发生。 在 CPU1复位时、不能期望 CPU2仍在运行。

    现在、要一个接一个运行一个内核、这取决于应用。 CPU2应用程序在 CPU1应用程序根据需要配置系统资源之前无法运行、 因此、只要 CPU1应用程序向 CPU2应用程序发出运行就绪信号、并且只要 CPU2应用程序等待来自 CPU1应用程序的此信号、您就可以按任何顺序运行内核。 但是、如果不是、CPU1应用程序必须在 CPU2应用程序之前运行。

    希望这对您有所帮助。

    此致

    Santosh Athuru