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.

[参考译文] TMS320F28384D:MCU 一直复位

Guru**** 2416710 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1536975/tms320f28384d-mcu-keeps-resetting

器件型号:TMS320F28384D


工具/软件:

您好、  

我们使用 4 个内核 (3C28 和 1cm) 开发全功能应用、我们将其称为  Main (1C28 和 1cm) 和 Control (2 个 C28 内核)。 现在、我们更新了电路板硬件并对引脚排列进行了一些修改:顺便说一下、主要变化是现在我们仅使用主 MCU 的 CPU1 内核、控制 MCU 几乎没有任何变化。

在第一次部署中、我在 Main 的 CPU1 内核(使用 FreeRTOS)中进行调试、在 INIT 部分之后、任务开始、但很快会重新发送内核。 我重复了很多次,我得到了同样的行为。 因此、我切换到了示例工程(例如:清空且闪烁,因为我们在开发板的示例中使用了 GPIO31 和 GPIO34 的 LED) 、然后我检查了空工程是否可以正常运行、但我在闪烁示例中初始化部分后获得了相同的复位行为。  闪存和 RAM 执行之间没有区别。

此外、我在控制 MCU 上尝试了相同的示例、它们完全可以正常运行、没有任何问题。

所以、我认为主 MCU 上有硬件问题、我更换了电路板、但也出现了同样的行为。 然后、我测量了电源时钟、一切似乎都正常。

然后,我尝试禁用 Device_Init () 函数中的一些 init 部分,并得到了禁用 Device_enableAllPeripherals();,闪烁示例 启动并运行良好。

    //
    // Turn on all peripherals
    //
//    Device_enableAllPeripherals();
    Device_initGPIO();

我尝试对 SoM 器件进行注释、但似乎可以获得程序启动的不同组合、但在几秒钟后或其他组合后复位、然后在调试中开始、但如果我手动复位电路板(使用正确的引导引脚执行闪存)、或通过电源循环或其他组合启动并执行、几秒钟复位后返回开始并执行、则不会开始。   

最后、我监控了 CpuSysRegs.RESC 寄存器、在调试中、我可以检查一下、在删除任何先前的原因后:

    //
    // Initialize device clock and peripherals
    //
    Device_init();
    EALLOW;

    uint16_t cause = SysCtl_getResetCause();
    SysCtl_clearResetCause(cause);

    SysCtl_disableWatchdog();  // try to disable it again

    EDIS;

我得到了、即使 WD 被禁用、也会发生 WDRSn 复位、 有时我也会进行 XRSn 复位:

   

MCU 会持续复位 14.4ms(如果可以提供帮助)。 在以下定制电路原理图中:

        

因此、我有点困惑:我可以看到代码相关性、但我仍然认为 引脚排列/复位电路和外设之间存在一些硬件问题/交互:请问您能帮帮我吗?

Fabio

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

    您好、

    我得到、即使 WD 被禁用、也会发生 WDRSn 重置、 有时我也会进行 XRSn 重置:

    您是否在代码中的任意位置启用 WD? 您能否在调试寄存器视图中检查 WD 寄存器并查看看门狗是否处于运行状态(如果计数器正在运行)?  

    如果可以帮助
    、MCU 会持续复位 avery 14.4ms

    是否有外部连接到 XRSn 引脚将复位拉至器件?

    谢谢

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

    您好 Prathan Bhatt:

    我在任何地方都不启用 WD、我检查了原始示例(例如 led_ex1_blinky.c)、如果它们没有启用、我还 在 Device_Init () 之后添加了另一个 sysctl_disableWatchdog ()、以更加肯定。

    我检查了 WD 寄存器,这就是我得到的:在 Device_Init () 之后,我得到了这些值  

    在输入示例的 while (1) 之后、紧接着执行一些指令(在本例中,是在 device_delay_US () 之后)、MCU 开始复位、我得到以下信息:

    e2e.ti.com/.../WdRegs.mp4

    关于复位电路、您可以看到主 MCU 的复位引脚没有下拉的内容:如果主 MCU 复位、只有一个复位控制 MCU 的电路。

    我只能强调、如果禁用某些外设、我可以完全运行代码、并且 WD 保持禁用状态。

    非常感谢、

    Fabio

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

    您好、

    只能强调、如果我禁用了某些外围设备、我可以完美地运行代码并且 WD 保持禁用状态。

    这些外设是哪些? 禁用其他外设不应影响 WD。

    您是否能够看到与 GPIO 闪烁示例相同的行为? 这只是一个多核盲的例子或其他你指的东西?

    因此、我切换到了示例工程(例如:空且闪烁,因为我们使用了 LED 的 GPIO31 和 GPIO34 作为开发板的示例)

    我将尝试查看末尾的示例、以便在我这边进行调试

    谢谢

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

    您好、

    这些外设是哪些? 禁用其他外设不应影响 WD。

    您是否能够看到与 GPIO 闪烁示例相同的行为? 这只是一个多核盲的例子或其他你指的东西?

    [/报价]

    是的、这也发生在闪烁的示例中。 我尝试了单核和多核示例 (led_ex1_blinky 和 led_ex1_c28x_dual_blinky_cpu1/2)、但我始终会得到相同的复位行为。 我尝试了启用的外设的不同组合,这是一个工作的:

    void Device_enableAllPeripherals(void)
    {
    
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLA1);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_DMA);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TIMER0);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TIMER1);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TIMER2);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CPUBGCRC);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLA1BGCRC);
    //#ifdef CPU1
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_HRCAL);
    //#endif
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ERAD);
    //
    //#ifdef CPU1
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EMIF1);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EMIF2);
    //#endif
    
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM1);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM2);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM3);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM4);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM5);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM6);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM7);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM8);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM9);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM10);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM11);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM12);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM13);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM14);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM15);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM16);
    //
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAP1);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAP2);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAP3);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAP4);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAP5);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAP6);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAP7);
    //
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EQEP1);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EQEP2);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EQEP3);
    //
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SD1);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SD2);
    //
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SCIA);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SCIB);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SCIC);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SCID);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SPIA);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SPIB);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SPIC);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_SPID);
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_I2CA);
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_I2CB);
    
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CANA);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CANB);
    
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_MCBSPA);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_MCBSPB);
    
    //#ifdef CPU1
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_USBA);
    //#endif
    
        SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCA);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCB);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCC);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ADCD);
    
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS1);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS2);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS3);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS4);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS5);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS6);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS7);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CMPSS8);
    //
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_DACA);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_DACB);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_DACC);
    //
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLB1);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLB2);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLB3);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLB4);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLB5);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLB6);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLB7);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_CLB8);
    //
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_FSITXA);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_FSITXB);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_FSIRXA);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_FSIRXB);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_FSIRXC);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_FSIRXD);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_FSIRXE);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_FSIRXF);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_FSIRXG);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_FSIRXH);
    //
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_PMBUSA);
    //
    //#ifdef CPU1
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_DCC0);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_DCC1);
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_DCC2);
    //
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_ECAT);
    //
    //    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_MCANA);
    //
    //#endif
    
    }

    这个 事实与这个事实相结合:

    [引述 userid=“567818" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1536975/tms320f28384d-mcu-keeps-resetting

    此外、我在控制 MCU 上尝试了相同的示例、它们完全可以正常运行、没有任何问题。

    所以、我认为主 MCU 上有硬件问题、我更换了电路板、但也出现了同样的行为。 然后、我测量了电源时钟、一切似乎都正常。

    [/报价]

    让我困惑:这似乎是硬件和软件原因的综合结果 、可能是 MCU 外部原因而不是内部原因、这就是我发送 MCU 引脚排列和舍入电路的原因。

    为了让我更加困惑、如果我可以在调试模式下成功执行闪烁代码(从闪存,我的引导引脚具有 2 个上拉硬件)、并禁用某些外设、那么如果我手动复位电路板或断电并且 MCU 不断复位、则无法执行相同的代码。

    最终,使用之前的 Device_enableAllPeripheral() 时,在调试和释放模式下,代码可以在没有复位 的情况下运行,但我观察到,几秒钟后, MCU 复位,然后再次启动。 我检查过、如果我处于调试模式、则不会发生这种情况、在释放模式下则会发生这种情况。 我正在检查是否存在散热问题、因为 MCU 位于背负板的底部、在强制通风的情况下、不会发生这种情况。

    现在、一切都... 有什么想法/建议?

    再次感谢、

    Fabio

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

    Fabio、

    为了解耦硬件连接和散热问题、我们是否可以使用您的代码仅在控制卡上独立运行器件、看看是否可以重现问题。

    如果我在控制卡上运行多核示例,因为它是独立的,我看不到任何问题。

    谢谢

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

    你好 Prarthan、

    抱歉困扰你,但这个模糊的例子是正确的(显然)工作的控制卡:我做了这个测试几年前。

    现在、我的自定义代码与定制板的硬件和软件之间存在问题(在 1.0 版本的定制板中完美运行、但在 2.0 版本中未运行)、这就是我要求 帮助的原因:我切换到了原始示例、只是为了验证创建问题的不是我的自定义代码。

    现在、我使用原始示例遇到了相同的问题、我发送了所有原理图以及我的试验和测量结果:我将开始销毁电路板原型、以便了解是否有外部电路产生了问题、同时、您是否能够给我一些建议、让我从何处查找原因?

    谢谢、此致、

    Fabio