为什么我的处理器这么耗电?原因不只是一个小小的限流电阻...-程序员宅基地

记得有一次,客户拿着处理器板走进我的办公室,说它的功耗太大,耗尽了电池电量。由于我们曾骄傲地宣称该处理器属于超低功耗器件,因此举证责任在我们这边。我准备按照惯例,一个一个地切断电路板上不同器件的电源,直至找到真正肇事者,这时我想起不久之前的一个类似案例,那个案例的“元凶”是一个独自挂在供电轨和地之间的LED,没有限流电阻与之为伍。LED最终失效是因为过流,还是纯粹因为它觉得无聊了,我不能完全肯定,不过这是题外话,我们暂且不谈。


从经验出发,我做的第一件事是检查电路板上有无闪闪发光的LED。但遗憾的是,这次没有类似问题的希望曙光。另外,我发现处理器是板上的唯一器件,没有其他器件可以让我归咎责任。客户接下来抛出的一条信息让我的心情更加低落:通过实验室测试,他发现功耗和电池寿命处于预期水平,但把系统部署到现场之后,电池电量快速耗尽。此类问题是最难解决的问题,因为这些问题非常难以再现“第一案发现场”。这就给数字世界的问题增加了模拟性的无法预测性和挑战,而数字世界通常只是可预测的、简单的1和0的世界。


在最简单意义上,处理器功耗主要有两方面:内核和I/O。当涉及到抑制内核功耗时,我会检查诸如以下的事情:PLL配置/时钟速度、内核供电轨、内核的运算量。有多种办法可以使内核功耗降低,例如:降低内核时钟速度,或执行某些指令迫使内核停止运行或进入睡眠/休眠状态。如果怀疑I/O吞噬了所有功耗,我会关注I/O电源、I/O开关频率及其驱动的负载。

  

我能探究的只有这两个方面。结果是,问题同内核方面没有任何关系,因此必然与I/O有关。这时,客户表示他使用该处理器纯粹是为了计算,I/O活动极少。事实上,器件上的大部分可用I/O接口都没有得到使用。

  

“等等!有些I/O您没有使用。您的意思是这些I/O引脚未使用。您是如何连接它们的?”

  

“理所当然,我没有把它们连接到任何地方!”

  

“原来如此!”

  

这是一个令人狂喜的时刻,我终于找到了问题所在。虽然没有沿路尖叫,但我着实花了一会工夫才按捺住兴奋之情,然后坐下来向他解释。

  

典型CMOS数字输入类似下图:


图1.典型CMOS输入电路(左)和CMOS电平逻辑(右)


当以推荐的高(1)或低(0)电平驱动该输入时,PMOS和NMOS FET一次导通一个,绝不会同时导通。输入驱动电压有一个不确定区,称为“阈值区域”,其中PMOS和NMOS可能同时部分导通,从而在供电轨和地之间产生一个泄漏路径。当输入浮空并遇到杂散噪声时,可能会发生这种情况。这既解释了客户电路板上功耗很高的事实,又解释了高功耗为什么是随机发生的。


图2.PMOS和NMOS均部分导通,在电源和地之间产生一个泄漏路径


某些情况下,这可能引起闩锁之类的状况,即器件持续汲取过大电流,最终烧毁。可以说,这个问题较容易发现和解决,因为眼前的器件正在冒烟,证据确凿。我的客户报告的问题则更难对付,因为当您在实验室的凉爽环境下进行测试时,它没什么问题,但送到现场时,就会引起很大麻烦。


现在我们知道了问题的根源,显而易见的解决办法是将所有未使用输入驱动到有效逻辑电平(高或低)。然而,有一些细微事项需要注意。我们再看几个CMOS输入处理不当引起麻烦的情形。我们需要扩大范围,不仅考虑彻底断开/浮空的输入,而且要考虑似乎连接到适当逻辑电平的输入。


如果只是通过电阻将引脚连接到供电轨或地,应注意所用上拉或下拉电阻的大小。它与引脚的拉/灌电流一起,可能使引脚的实际电压偏移到非期望电平。换言之,您需要确保上拉或下拉电阻足够强。


如果选择以有源方式驱动引脚,务必确保驱动强度对所用的CMOS负载足够好。若非如此,电路周围的噪声可能强到足以超过驱动信号,迫使引脚进入非预期的状态。


我们来研究几种情形:


1.在实验室正常工作的处理器,在现场可能莫名重启,因为噪声耦合到没有足够强上拉电阻的RESET(复位)线中。


图3.噪声耦合到带弱上拉电阻的RESET)引脚中,可能引起处理器重启


2.想象CMOS输入属于一个栅极驱动器的情况,该栅极驱动器控制一个高功率MOSFET/IGBT,后者在应当断开的时候意外导通!简直糟糕透了。

    

图4.噪声过驱一个弱驱动的CMOS输入栅极驱动器,引起高压总线短路

    


另一种相关但不那么明显的问题情形是当驱动信号的上升/下降非常慢时。这种情况下,输入可能会在中间电平停留一定的时间,进而引起各种问题。

    

图5.CMOS输入的上升/下降很慢,导致过渡期间暂时短路


我们已经在一般意义上讨论了CMOS输入可能发生的一些问题,值得注意的是,就设计而言,有些器件比其他器件更擅长处理这些问题。例如,采用施密特触发器输入的器件能够更好地处理具有高噪声或慢边沿的信号。


我们的一些最新处理器也注意到这种问题,并在设计中采取了特殊预防措施,或发布了明确的指南,以确保运行顺利。例如,ADSP-SC58x/ADSP-2158x数据手册清楚说明了有些管脚具有内部端接电阻或其他逻辑电路以确保这些管脚不会浮空。


最后,正如大家常说的,正确完成所有收尾工作很重要,尤其是CMOS数字输入。


1.为什么原来每换一个CPU就必须改写程序,但现在不用了?

2.Linux 将不再支持旧 CPU 架构,可节省 50 万行代码!

3.单片机的外围功能电路,学完这个才能运行系统!

4.在选不选择ROS这个问题上,资深嵌入式工程师如是说!

5.十年开发经验总结的 Java 程序员架构学习路线

6.2018年第4期《单片机与嵌入式系统应用》电子刊新鲜出炉!

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/DP29syM41zyGndVF/article/details/79925428

智能推荐

c# 调用c++ lib静态库_c#调用lib-程序员宅基地

文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib

deepin/ubuntu安装苹方字体-程序员宅基地

文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang

html表单常见操作汇总_html表单的处理程序有那些-程序员宅基地

文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些

PHP设置谷歌验证器(Google Authenticator)实现操作二步验证_php otp 验证器-程序员宅基地

文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器

【Python】matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距-程序员宅基地

文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距

docker — 容器存储_docker 保存容器-程序员宅基地

文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器

随便推点

网络拓扑结构_网络拓扑csdn-程序员宅基地

文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn

JS重写Date函数,兼容IOS系统_date.prototype 将所有 ios-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios

如何将EXCEL表导入plsql数据库中-程序员宅基地

文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql

Git常用命令速查手册-程序员宅基地

文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...

分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120-程序员宅基地

文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120

【C++缺省函数】 空类默认产生的6个类成员函数_空类默认产生哪些类成员函数-程序员宅基地

文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数

推荐文章

热门文章

相关标签