MCU 电流测试

MCU电流测试说起来似乎就是加个电流表读读数就可以了,但实际上并没有那么简单,我们知道MCU里面为了低功耗考虑,各种模块都会加入门控时钟,这样可以在不用的时候关掉时钟,从而降低功耗,另外core的频率,bus频率,flash频率等等都是可以配置的,所以在测量电流的时候,这些因素都要考虑。这个也提高了电流测试的难度,尤其是不同人,不同芯片,不同程序,不同配置下测试都会有偏差。

这里我也不能规定一个电流测试的标准配置,只是针对电流测试中可能遇到的一些问题做一个简单的总结。

神奇的while(1)

首先我们来看一个比较奇怪的现象,在电流测试中我们常常会测试while(1)下面的电流,不过在测试中我发现代码稍有变动(不影响同好配置的情况下)电流也会有很大的变化,后面跟design的人沟通后发现这个实际上是一个客观存在的现象。出现这个差异的根本原因是我们的cache设计,我们知道在MCU中core的频率是比较高的,而flash等模块频率是比较低的,这个时候为了充分发挥CPU的性能,我们一般会引入流水线等技术,当然还有一个方法就是增加cache,cache可以一次从flash中读取批量数据,而当代码在循环中的时候,可能一个循环的代码都在cache中,这样就不需要每次都从flash中读取数据了。所以说cache实际上是提高了CPU的执行效率,不过cache的大小毕竟有限,所以必要的时间还是要从flash中读取数据刷新的。这个就是问题所在,如果我们的while(1)刚好在cache的边界上,这个时候cache就需要不断的刷新,这势必就会增加功耗,这个时候我们可以在while(1)之前插入几个asm("nop"),然后测试电流,这样可以保证cache一直生效。

clock gate

这个是最近测试中发现的,当clock gate全部打开再关闭之后,电流并没有明显下降,具体原因不明,比较稳妥的方法是不要开了之后再关clock,而是直接关闭clock,这样电流就会少很多,算下来大概可以节省1mA电流。

板载电流消耗

在电流测试中一定要注意是否有除MCU之外的板载电流消耗,包括各种LED指示灯,上拉电阻,reset电路等等,必要的时候更换测量点或者移除不必要的电路。

current_measure.gif


本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。

发表新评论