K210的功耗优化案例:从一块发烫的开发板说起
去年夏天做边缘语音唤醒项目,K210跑着跑着摸上去能煎鸡蛋。红外测温枪一打,核心温度飙到78度,电池供电的设备撑不过两小时。客户说“你们这芯片是不是有问题”,我心想芯片没问题,代码有问题。
那会儿刚接触TinyML,以为把模型塞进去能跑就行,压根没想过功耗这回事。后来被逼着啃K210的电源管理手册,才发现这芯片的功耗弹性比想象中大得多——从“烫手山芋”到“温温的”,中间只差几个配置开关。
罪魁祸首:默认配置的“全速空转”
K210上电后,CPU默认跑在400MHz,神经网络加速器(KPU)随时待命,所有外设时钟全开。这就像你开着V8发动机停在路边吹空调,油耗能不高吗?
实测数据很扎心:裸机空循环,400MHz全速运行,电流约180mA。加上KPU空闲轮询,直接飙到220mA。如果还开着摄像头DVP接口和LCD显示,轻松突破300mA。对于锂电池供电的设备,这基本等于宣判死刑。
第一个优化动作:降频。K210支持动态调频,从400MHz降到200MHz,电流从180mA降到110mA。语音唤醒这种轻量级任务,200MHz完全够用。关键代码就一行:
// 别傻乎乎跑400MHz,除非你在做实时视频处理sysctl_pll_set_freq