1、存储功耗基础:嵌入式存储系统概述、功耗来源分析、功耗单位与测量方法

大家好,我是老张。做嵌入式功耗优化这行当十几年了,今天咱们聊聊存储功耗的基础。说实话,很多人一上来就盯着CPU、GPU的功耗看,却忽略了存储子系统——这个“沉默的耗电大户”。我见过不少项目,优化了半天主控,结果发现存储功耗占了整机的一半还多。嗯,这章咱们就把底层的账算清楚。

1.1 嵌入式存储系统概述

嵌入式存储系统,说白了就是芯片内部或板级的那一小块“记忆体”。它不像PC那样有独立的硬盘,而是跟主控封装在一起,或者紧贴着放。常见的包括:

  • SRAM:片上缓存,速度快但面积大,功耗也不低。我习惯叫它“黄金地段的小户型”。
  • DRAM:比如LPDDR系列,容量大、成本低,但需要定期刷新。你想想看,光刷新这件事就吃掉不少电。
  • Flash:NOR Flash和NAND Flash,掉电不丢数据。NOR适合存代码,NAND适合存大文件。
  • 新型非易失存储:比如MRAM、RRAM,还在普及中,但功耗优势明显。

我在一个IoT手环项目里遇到过,SRAM只用了64KB,但待机时漏电占了总功耗的30%。当时我建议换成更低功耗的定制SRAM,才把续航从3天拉到7天。所以,别小看任何一块存储。

核心观点:存储系统的功耗,往往不是由“工作时”决定的,而是由“空闲时”决定的。很多嵌入式设备99%的时间都在待机,这时候漏电就是头号敌人。

1.2 功耗来源分析

存储功耗的来源,我一般分成三类:动态功耗、静态功耗和接口功耗。咱们一个一个说。

1.2.1 动态功耗

动态功耗,就是读写操作时产生的功耗。公式很简单:P_dyn = C * V² * f。C是负载电容,V是电压,f是频率。你想想看,电压降一半,功耗能降到四分之一。所以为什么大家都拼命降电压?就是这个道理。

动态功耗主要来自:

  • 位线充放电:每次读或写,位线都要充放电,这是大头。
  • 字线选通:选中某一行存储单元,也要耗电。
  • 数据总线翻转:数据从0变1或1变0,总线上的电容充放电。

我记得有一次做摄像头缓存优化,发现数据总线翻转率高达60%。我建议用格雷码编码,把翻转率降到20%以下,动态功耗直接砍了一半。嗯,这就是细节的力量。

1.2.2 静态功耗

静态功耗,也叫漏电功耗。芯片不干活的时候,电流照样在跑。主要来源:

  • 亚阈值漏电:晶体管关不严,电流从源极漏到漏极。
  • 栅极漏电:栅氧化层太薄,电子直接隧穿过去。
  • PN结漏电:反向偏置的PN结,总有那么点漏。

我曾经做过一个NB-IoT模块,待机时存储漏电占了80%。我换了低漏电的工艺库,又把未使用的存储块用电源门控彻底关掉,待机功耗从50μA降到了5μA。避坑指南:千万别以为“不访问”就等于“不耗电”。很多芯片的漏电,你关不掉。

注意:静态功耗随温度指数级上升。温度从25°C升到85°C,漏电能翻10倍。如果你做的是户外设备,一定要留足余量。

1.2.3 接口功耗

接口功耗,就是存储跟主控之间通信的功耗。比如SPI、QSPI、LPDDR接口。这部分功耗跟频率、电压、信号完整性都有关系。

我建议你关注两个点:

  • 信号摆幅:摆幅越小,功耗越低。比如LPDDR4用了VDDQ=1.1V,比DDR3的1.5V省了不少。
  • 终端匹配:匹配电阻会吃掉一部分功耗,但能保证信号质量。别为了省电把匹配去掉,否则数据出错更麻烦。

1.3 功耗单位与测量方法

做功耗优化,首先得会算账。咱们先统一一下单位。

单位 含义 典型场景
W (瓦特) 功率,1W=1J/s 整机功耗,比如2W
mW 毫瓦,1mW=0.001W 芯片功耗,比如200mW
μW 微瓦,1μW=0.001mW 待机功耗,比如5μW
nW 纳瓦,1nW=0.001μW 极低功耗场景,比如RTC备份
mAh 毫安时,电量单位 电池容量,比如1000mAh
μAh 微安时 纽扣电池容量,比如225μAh

测量方法这块,我踩过不少坑。给你几个实用建议:

1.3.1 用示波器测瞬时功耗

别只看平均电流。存储读写是突发性的,峰值电流可能很高。我习惯用示波器+电流探头,抓取读写瞬间的波形。比如读一次Flash,峰值可能冲到100mA,但持续时间只有几微秒。平均下来可能只有1mA,但电源设计必须按峰值来。

// 伪代码:测量一次Flash读操作的功耗
enable_current_probe();
start_timer();
read_flash(0x1000, buffer, 256);
stop_timer();
disable_current_probe();
// 积分计算:功耗 = ∫I(t)*V(t) dt / 时间

1.3.2 用精密万用表测平均功耗

对于长时间运行的场景,比如待机,用万用表更准。我建议用6位半的万用表,采样率不用太高,但精度要够。注意:万用表的内阻会影响测量,尤其是低功耗场景。我曾经用普通万用表测1μA的电流,结果内阻压降导致芯片电压掉到1.8V以下,直接复位了。嗯,这是个教训。

小技巧:测量极低功耗时,可以用“积分法”。在电源回路串一个小电阻(比如10Ω),然后用示波器测电阻两端的电压降,再积分。这样既不影响电路,又能看到细节。

1.3.3 用功耗分析仪做全流程分析

如果预算允许,买个专用的功耗分析仪,比如Joulescope或Otii。这些设备能同时测电压、电流、功率,还能导出数据做后处理。我习惯把存储的读写操作分成几个阶段:

  • 唤醒阶段:从休眠到就绪,功耗逐渐上升。
  • 操作阶段:读写进行中,功耗最高。
  • 休眠阶段:回到低功耗状态,功耗最低。

每个阶段的功耗和时间都要记录,最后算总账。比如:

阶段        时间(μs)    平均电流(mA)    功耗(mW)
唤醒        10          5              15
读操作      50          20             60
休眠        1000000     0.001          0.003

你看,休眠占了99.99%的时间,但功耗几乎可以忽略。所以优化重点应该放在“读操作”阶段,而不是休眠。

1.4 本章小结

这一章咱们把存储功耗的底子打好了。你记住三件事:

  1. 存储功耗分三类:动态、静态、接口。别只盯着动态看。
  2. 单位要统一:W、mW、μW、mAh,换算别搞错。
  3. 测量要分场景:瞬时用示波器,平均用万用表,全流程用分析仪。

下一章,咱们会深入SRAM的功耗优化。我会分享一个实际案例——怎么把SRAM的读写功耗降低40%,同时不影响性能。到时候见。