这篇文章主要和大家讨论一下BAM和stop模式的选择问题。首先我们来看一下BAM模式和stop模式分别是什么。
BAM模式
BAM模式使数据用通信外设进行传输,但是MCU的其他部分处于低功耗模式,一般的工作方式可能会选用一个RTC加一个可以工作在这个模式下的外设再加一个DMA和SRAM,SRAM可以是系统的SRAM 1,也可以是SRAM 2,在不需要CPU干预的情况下就可以自行做数据采集,一旦数据采集到CPU需要处理的条件,再去把CPU唤醒,所以我们可以看到BAM模式从本质上实现了一个协处理器的功能。
Stop模式
Stop模式是CPU Cortex-M内核时钟被关断之外,内核供电域的时钟也被停止了,所以在stop模式下,内核供电域的时钟全部停掉,PLL内部、外部高速时钟全部停掉,电压调节器为内核供电域供电,它有保留寄存器和全部SRAM中的内容。
从低功耗模式上来看,stop模式是L4系列七种低功耗模式中的一种,但是这七种低功耗模式不包括BAM模式,所以首先要看BAM模式可以工作在什么样的功耗模式下。BAM不是这七种低功耗模式中的一种,它是可以工作在某些特定低功耗模式下的一种工作方式,这个工作模式要比stop模式功耗高一些,类似于睡眠模式、低功耗睡眠模式和低功耗运行模式,这三个模式下可以使用BAM模式。
单从功耗上来说,stop模式的功耗更低,那为什么不直接选择stop模式呢?
我们拿采样类的应用来做一个例子说明,采样类的应用整个系统是先做采样,然后去休息 ,再采样,再休息,所以整个系统是一个以采样事件作为驱动的一个状态机,采样不仅提供信息,也提供整个系统需要的脉搏,当采样到达一定程度是就需要CPU去处理,BAM模式和stop模式都可以处理采样类的应用,对于stop模式来说,CPU每次从stop模式下唤醒,在工作模式下去采样,采样完之后进入低功耗的stop模式去休眠,紧接着再被唤醒,做完采样再休眠,可以一直持续这样的过程;对于BAM模式,也可以让整个系统工作在低功耗睡眠或者睡眠模式下,然后在系统中相应的用一个定时器唤醒外设,用外设采样得到的数据再放到SRAM中,整个系统保持在低速的sleep运行状态,也是有不停的采样、保存。
所以stop模式和BAM模式都可以实现采样的应用,那到底要用stop模式还是BAM模式呢?
简而言之,哪种情况下功耗最节省,就用哪种模式。
我们的工作情况是先要工作采样,然后进入休眠,再工作采样,再休眠,所以会在工作状态和低功耗状态一直在切换,所以我们要看的整体功耗情况一定是要看完成整个应用所需要的所有功能的情况下把采样时候和休眠时候整个的功耗加起来总的功耗最低,我们就选用这种功耗低的模式。
说到BAM模式和stop模式下的电流值也就是功耗值比较,这里要提到几个新的概念。
首先是唤醒电流,这个电流是一个瞬间的电流,它是从stop 2模式下唤醒的时候瞬间会产生的电流,这个电流非常大。
也就是说,从功耗的角度来说,stop模式下的功耗值是相对比较低的,BAM因为是放在sleep模式下,所以它的功耗值相对是高的。但是stop模式有一个问题,就是唤醒的时候有一个大的唤醒电流,BAM模式没有唤醒电流,所以唤醒周期就是一个至关重要的参数,简而言之,如果唤醒周期特别短,唤醒次数特别多,那唤醒电流出现很多次肯定会很影响功耗;如果唤醒周期非常长,那一次大的唤醒电流平摊下来其实对功耗的影响没有非常大。
那唤醒周期多长适合使用BAM模式呢?多长的周期比较适合用stop模式?
如果唤醒周期长于几十毫秒,那么推荐使用standby模式;如果唤醒周期相对短一些,建议使用stop 2模式;如果温度较高,还是建议使用standby模式;如果唤醒周期更短,那建议使用BAM模式。
总结
关于BAM模式和stop模式的选择就是一个引子,这个引子引出来的话题就是去思考自己的低功耗应用设计,到底要选择什么样的模式,不仅是低功耗模式,还包括运行时候的模式,要完成应用到底要选择什么样的方式去工作,这个其实很简单,就是要选择能够满足应用的、高效的,同时功耗最低的模式。