搜索
bottom↓
回复: 5
打印 上一主题 下一主题

求助~PIC32MK芯片手动复位启动异常

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2022-3-21 16:27:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
芯片:PIC32MK1024MCM064
底板:参照官方底板自己画的Demo板(手焊),产品PCBA(机贴)
异常现象:
        1、底板上电可以正常启动,软件正常运行中,手动按复位键,奇数次复位时芯片复位,但是程序不会重新运行,偶数次复位程序才能正常运行;即需要按两次复位才能重新跑程序。
        2、使用寄存器“SWRST”软复位,进入到现象1中的奇数次复位状态,需要手动再按一次复位键才能正常运行程序。
异常原因猜测:
        1、复位电路设计异常;使用示波器捕捉复位信号,奇数次和偶数次复位信号波形一致没有异常情况,且尝试过更改不同容值的电容,反而影响上电启动。
        2、寄存器配置异常;偶数次复位才能正常运行,感觉像奇数次复位的时候,MCU内部寄存器有问题,需要再次复位才能正常启动。
原本以为是Demo板手焊的原因,但是最近产品样机是SMT机贴的,也还是有同样的问题。望各路大神指点迷津,感觉这问题有点诡异鸭

晶振:无源24MHz
电源:USB电源经过LDO稳压3.3V
使用MCC配置了一个新的工程,并且使用图形配置界面配置了系统时钟。做了几个测试,具体结果如下图所示:

简单的来说,就是测试了SYSCLK在不同时钟源情况下的MCU复位情况。
测试方法:
        1、在主函数系统初始函数后添加打印“AAAAAAAAAAAA”;
        2、在主函数While循环中添加LED闪烁语句。(代码在最下方)
通过上述两个条件判断MCU运行状态。
实验现象:
        1、在使用“FRC(内部8M时钟)”作为SYSCLK时,MCU复位均正常,可以LED正常闪烁;
        2、在使用“POSC(外部24M时钟)”作为SYSCLK时,在有串口输出时,MCU复位出现异常,输出多个A后,MCU卡死(应该是程序跑飞)
        3、在使用“SPLL(系统锁相环120M时钟)”作为SYSCLK时,MCU复位不正常;
        4、在MCU运行时,LED闪烁速度情况:SPLL > POSC > FRC,使用SPLL时闪烁最快。
根据测试数据,得出一下结果:
        1、POSCMOD寄存器是外部竞争的控制寄存器,在选择“HS”时,外部无源晶振可以起振;
        2、根据LED闪烁情况可知,时钟配置已经生效,并且不同时钟情况下,闪烁频率有倍数关系。
根据实验结果再次猜测:
        1、“MCU复位异常”描述不准确;MCU复位是成功且有效的,只是复位后,程序跑飞了造成卡住的情况。
        2、可能总线竞争导致MCU跑飞;此种猜测可能性不大,测试的工程只开了串口,没有其他外设。
        3、在复位后,时钟还没稳定导致MCU跑飞;此猜测也不成立,在系统初始完成之后,我使用while死等“CLKSTAT”寄存器状态,等待状态完成后才退出循环,根据寄存器可知,时钟应该是完成配置的。      
        4、可能是MCU电源电压不稳定导致MCU复位后跑飞;可能性较大,“实验现象2”并不是特别符合“偶数次复位才能正常运行”的情况,有随机性,但是我使用示波器测量MCU电源,未发现在“复位键”按下和弹起时有异常的现象。
        测试代码如下所示:
  1. int main ( void )

  2. {

  3.     int i;

  4.     /* Initialize all modules */

  5.     SYS_Initialize ( NULL );



  6. //    while ((CLKSTAT & 0x5) != 0x5);

  7.     printf("AAAAAAAAAAAAAAAAAAAAAAAAA\n");

  8.     printf("CLKSTAT: 0x%x\n", CLKSTAT);

  9.     GPIO_PinOutputEnable(GPIO_PIN_RB1);

  10.     GPIO_PinOutputEnable(GPIO_PIN_RA11);

  11.     GPIO_PinOutputEnable(GPIO_PIN_RB0);   

  12.     GPIO_PinOutputEnable(GPIO_PIN_RA12);

  13.    



  14.     while ( true )

  15.     {

  16.         

  17.         /* Maintain state machines of all polled MPLAB Harmony modules. */

  18. //        SYS_Tasks ( );

  19.         GPIO_PinWrite(GPIO_PIN_RB0, 0);

  20.         GPIO_PinWrite(GPIO_PIN_RB1, 1);

  21.         GPIO_PinWrite(GPIO_PIN_RA11, 0);

  22.         GPIO_PinWrite(GPIO_PIN_RA12, 1);

  23.         for (i = 0; i < 10000000; i++);

  24.         GPIO_PinWrite(GPIO_PIN_RB0, 1);

  25.         GPIO_PinWrite(GPIO_PIN_RB1, 0);

  26.         GPIO_PinWrite(GPIO_PIN_RA11, 1);

  27.         GPIO_PinWrite(GPIO_PIN_RA12, 0);

  28.         for (i = 0; i < 10000000; i++) ;

  29. //        printf("AAAAAAAAAAAAAAAAAAAAAAAAA\n");

  30.     }



  31.     /* Execution should not come here during normal operation */



  32.     return ( EXIT_FAILURE );

  33. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

来自 4楼
 楼主| 发表于 2022-3-29 17:40:35 | 只看该作者
已经破案了,芯片批次问题。
SMT贴了三块板子,其中一块的PIC32是工程样片,另外两块的PIC32是B1版本的。只有工程样片的那颗MCU会出现复位启动异常问题。于是我去确认了我手焊的板子,确实是工程样片版本。
MCU丝印如下图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

2
发表于 2022-3-21 23:39:50 来自手机 | 只看该作者
直接板子扔FAE调试。

出0入17汤圆

3
发表于 2022-3-22 14:42:53 | 只看该作者
PIC32比较小众,碰到问题都不好找人

出0入0汤圆

5
 楼主| 发表于 2022-3-29 17:42:12 | 只看该作者
lingdianhao 发表于 2022-3-21 23:39
直接板子扔FAE调试。
(引用自2楼)

之前打过电话,他们说“他们没遇到过这样的问题”,

出0入0汤圆

6
 楼主| 发表于 2022-3-29 17:42:59 | 只看该作者
Trylin 发表于 2022-3-22 14:42
PIC32比较小众,碰到问题都不好找人
(引用自3楼)

确实,不过功能简单还好,资料也算详细。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 21:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表