news 2026/4/15 13:49:32

MCU配置错误导致偶发的功耗异常Bug,值得一看

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MCU配置错误导致偶发的功耗异常Bug,值得一看
我记得5月份期间协助一位坛友解决了一个因MCU配置错误导致偶发的功耗异常Bug,个人认为还是比较经典的,值得大家参考的,今天就总结成文,希望对大家有所裨益。
问题描述主要如下:
用PIC24FJ512GA606-I/PT单片机,单片机平时是休眠状态,当有外部中断时,会唤醒单片机去做检测,然后把检测到的数据上传给上位机,然后又进入休眠。产品批量以后发现一个问题,大部分板子休眠模式下电流大约是30个微安,20%-30%比例的板子休眠模式下电流为100个微安。我可以确定的是:跟外围电路无关,A板子静态电流大,B板子静态正常,其他不变,我把A板子的单片机跟B板子的单片机交换焊上之后,A板子静态电流正常了,B板子静态电流变大了,也就是说是单片机造成的静态电流大。所有单片机程序都是一样的。
所有的单片机都是同一批次购买的,单片机的丝印完全一样。
从问题呈现的表象来看,貌似是MCU芯片存在一致性差问题,但这种可能性其实很小的,按我经验来看。
最开始给坛友提供的回复是:
1、正常运行时,正常板子和异常板子的功耗电流一样吗?还是也有差别?
2、板子与上位机是什么通讯方式?
3、以前做过电池供电的低功耗产品,个人经验吧,这种偶发性问题,建议还是先从程序上再排查一下;
看现象描述确实与软硬件无关,更多的是指向MCU功耗差异大,但是有时候偶发性Bug就是这样,迷惑性大。
坛友的回复:
1、正常运行时,电流差异没法准确得知,因为都是几十个毫安左右,而且是变化的,没法精确到微安。但是功能上没有差别,都满足我的功能需求。
2、板子与上位机用433M无线通讯方式。
3、我确实也怀疑是我程序上有BUG,我挂上仿真器,仿真两种板子,在休眠模式下暂停,仔细对照了所有SFR的值,除了个别定时器数值不一样(因为手动停的地方不一样)其他都完全一样
4、我把sleep模式,改成idle模式,整体电流增大了,这个是可以理解的,但是仍然存在板子之间有差异。也就是说我的板子无论是休眠模式,还是空闲模式都有这个问题。
我查看了芯片数据手册,单片机的休眠电流数据确实存在差异,但这个差异应该是在合理范围内,可以接受的:

后来也试过把RTC时钟电路关掉,把无线通讯功能关掉,但都还存在这个问题。
后面我咨询了PIC的FAE,得到的回复是:
应该是没有进休眠状态,没完全进休眠,cpu可能停了,但是别的外设,时钟可能还开着;
最好具体分析下有没有什么条件制约了进休眠;
同样的代码,但是操作流程不正确,有可能某些芯片顺利休眠了,有些没有,没看到代码不好说;
之前碰到过类似的案例,不是同款芯片,最终是客户自己代码问题(有个外设中断没关);
PIC有PMD,用好很重要:

后面反复与坛友来回沟通,坛友开始怀疑:
休眠模式下,我的单片机引脚没处理好,PIC单片机休眠模式下,GPIO口应该怎么处理,第一种是未用的引脚,第二种是已用但是外部电路未供电的引脚(比如UART的TX、RX连接了外部的485芯片,但是休眠模式下485芯片的电源是切断的)、我的处理方法是:第一种未用的引脚全部设成输出,输出位0,第二种引脚,我用PMD禁止了相关外设,比如关闭UART功能,然后又把引脚设成输出,输出为0,当单片机唤醒的时候,我打开PMD,然后重新初始化一下UART。
后来坛友所在区域的PIC的技术支持也协助帮忙分析了。
最后终于找到原因了:
先说原因:静态电流异常是因为休眠之前对IO口处理不当造成引脚悬空产生漏电流。
我详细说说进休眠之前应该怎么处理GPIO口。
第一种:没有接任何电路的GPIO口,这种引脚在程序初始化的时候,就把它们设置成数字输出,输出0。我一直也是这样做的,所以电流异常的现象跟这种情况无关。
第二种:接了外部电路但是休眠模式下外部电路不工作的IO口。以我的板子为例,UART5接了红外通信电路,但是休眠模式下,红外电路是断电的。这款片子本身就有UART5引脚不需要做映射,但TXD5跟D1口是复用的,RXD5跟D6口是复用的。我是这样处理的:休眠前,通过给外设模块禁止寄存器PMD写1禁止UART5,PMD8bits.U5MD=1;我之前理解的是禁止了UART5就是把复用管脚切成普通IO口了,所以我接着就把D1和D6设成数字输出,输出为0。万万没想到问题就出在这里。我先把datasheet里的相关描述贴出来。
为了降低功耗,这款单片机允许有选择的禁止外设模块,而且提供了两种方式,可以写XXXEN位,也可以写PMD,红框下面详细描述了这两种方式对功耗、寄存器读写的区别。当我看到这里的时候,我就试着把我的程序里禁止PMD后面又加了一条语句, U5MODEbits.UARTEN=0; 然后很神奇的,问题就解决了。问题解决了,我就分析原因,我认为资料这个地方只是说了这两种禁止外设的方法在功耗和寄存器方面的区别,但是没有说对复用管脚的影响,对于有复用管脚的外设,如果只是禁止PMD,其实并没有把管脚切换成普通IO口,还是TXD、RXD口,这时你对端口写0是没用的,必须用XXXEN位来禁止外设才能把复用管脚切换成普通IO口,对普通IO口写0才有用。
综上所述,开发低功耗产品很容易出现一致性问题,需要认真仔细分析才能找到根因。
有兴趣的可以去看一下原贴,链接如下:
https://bbs.21ic.com/icview-3453022-1-1.html


---------------------
作者:dffzh
链接:https://bbs.21ic.com/icview-3491427-1-1.html?_dsign=6af2e8f4
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 13:48:19

微信聊天记录永久备份:免费开源工具WeChatExporter完整指南

微信聊天记录永久备份:免费开源工具WeChatExporter完整指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因手机丢失、系统升级或误操作而丢失珍贵…

作者头像 李华
网站建设 2026/4/15 13:47:27

实战指南:利用Metasploit框架检测与利用BlueKeep漏洞(CVE-2019-0708)

1. BlueKeep漏洞背景与危害 BlueKeep(CVE-2019-0708)是Windows远程桌面服务(RDP)中存在的一个严重远程代码执行漏洞。这个漏洞的特殊之处在于它属于"蠕虫级"漏洞,意味着不需要用户交互就能在系统间传播。201…

作者头像 李华
网站建设 2026/4/15 13:45:40

高效数据处理 | 利用EXCEL插件实现度分秒与弧度、度的快速互转

1. 为什么需要度分秒与弧度、度的转换? 在日常科研和地理数据处理中,我们经常会遇到各种角度单位的转换需求。比如GPS设备采集的经纬度数据通常以度分秒(DMS)格式呈现,而大多数科学计算软件和编程语言则需要使用十进制…

作者头像 李华
网站建设 2026/4/15 13:41:14

Apple Cursor:为Windows和Linux用户带来的macOS风格鼠标指针完整指南

Apple Cursor:为Windows和Linux用户带来的macOS风格鼠标指针完整指南 【免费下载链接】apple_cursor Free & Open source macOS Cursors. 项目地址: https://gitcode.com/gh_mirrors/ap/apple_cursor 你是否厌倦了Windows或Linux系统默认的单调鼠标指针&…

作者头像 李华
网站建设 2026/4/15 13:41:14

Office 2021装MathType 7.8后Word工具栏灰色?三步搞定宏加载与文件拷贝

Office 2021安装MathType 7.8后Word工具栏灰色问题终极解决方案 最近在技术社区看到不少用户反馈,在64位Office 2021上安装MathType 7.8后,Word工具栏中的MathType图标显示为灰色且无法使用。作为一名长期使用数学公式编辑工具的技术撰稿人,我…

作者头像 李华