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.

[参考译文] CCS/UCD3138A:CPU 因干扰而崩溃

Guru**** 2553260 points
Other Parts Discussed in Thread: UCD3138A

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/861062/ccs-ucd3138a-cpu-crashed-by-interference

器件型号:UCD3138A

工具/软件:Code Composer Studio

尊敬的 TI 专家:

当电源电路启动时、我的 UCD3138A 崩溃。 详情如下:

电源电路开始工作时、主程序的指令流崩溃。(全部由示波器监控。) CPU 被复位、直到看门狗时间(2s)增加。

2.虽然主程序已崩溃,但中断服务仍然正常工作。

3、复位管脚无异常信号。 当程序被置为崩溃时、CPU 尚未复位。

Vin 越高、碰撞越严重。

5.温度越低,情况就越严重。 仅当温度低于-30摄氏度时发生。

3.3V 数字电源和 BP18引脚上的电压正常、没有明显的干扰信号。 这两个引脚都连接到电容器、示波器探针的接地端几乎连接到芯片引脚。

如果您对干扰如何使 CPU 崩溃有任何疑问、请帮助我!

谢谢!

这是 CPU 启动和复位时的两张图片。

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

    您好 Arthur

    我们的实用设计指南中提供了布局指南、如果 您尚未这样做、则值得您查看、因为 UCD 对布局非常敏感。 可在以下网址找到: http://www.ti.com/lit/an/slua779b/slua779b.pdf

    可以调用 ARM7异常处理程序之一:中止预取异常、中止数据提取异常或未定义指令异常。

    我想,在程序到达无限循环之前,也可能会在 main()中的某个位置卡住。

    我建议在 main()中设置一个备用 GPIO,以确定它通过范围崩溃的确切位置,以及它是否可重复。  

    因此将 GPIO 设置在 main()的不同位置(使用二进制搜索方法),每次重新编译并下载新代码,直到您在 main()中处理器被轰炸的位置收窄为止。 显然、这只有在可重复时才有效。

    我还将使用相同的方法来检查是否正在调用一个异常处理程序:逐个切换异常处理程序中的 GPIO 以检查触发哪个异常处理程序、就像这样

    void abort_data_fetch_exception (void)

      在此处切换 GPIO  

    在每个异常处理程序中再次逐一执行此操作、以确定触发哪个异常。

    我建议您在异常处理程序中复位 ARM7。 我猜您已经没有这样做、就好像处理器弹出后中断处理程序不起作用一样。 很明显、当你添加复位时、你不能再像我在上面建议的那样通过切换 GPIO 进行调试。

    例如、对于中止数据提取异常处理程序、您应该添加以下代码(突出显示)、对于其他异常处理程序 、您也应该添加以下代码(中止数据提取异常和未定义指令异常)。

    #pragma 中断(ABORT_DATA_Fetch_EXception、DABT)

    #pragma CODE_STATE (ABORT_DATA_获取 异常、32)//这将确保此代码在 ARM 模式下编译
    void abort_data_fetch_exception (void)

      SysRegs.SYSECR.bit.reset = 2;

    此致

    Cormac

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

    谢谢、Cormac、

    您的建议非常有用、我将在例外情况下执行更多测试并改进 PCB 设计。