嵌入式系统设计:十年项目踩过的反常识坑
别迷信芯片手册的标称参数
刚入行做嵌入式的新人,十个有九个会踩这个坑。拿到芯片第一反应就是抄手册上的参数,算出来的功耗、速度都完美,一做实物全乱套。
我前几年做工业低功耗水表项目,选了一款大厂新出的低功耗MCU,手册标称休眠电流典型值0.5uA,最大值1uA。我们按照手册算出来,一节锂电池能用六年,做出来十块样品一测,休眠电流稳定在8uA上下。那可太坑了!我们连着找了一周问题,最后发现外围电路的一个上拉电阻,我们一直让它处于挂电状态,那点漏电加起来,就比MCU本身的休眠电流高了十几倍。
嵌入式低功耗系统休眠电流测试板
说实话,实际测试永远比手册靠谱。尤其是一些刚量产的新芯片,厂商写手册的时候会把典型值当最优值放上去,环境温度一变,工艺波动一下,参数直接飘。我还遇到过一款国产ARM MCU,室温下跑80MHz没问题,到工业级的85度环境,超过60MHz就随机出错,手册上根本没标这个隐性限制。
现在我选芯片,都会先拿样片测三遍核心参数,再动手画板。多花两天时间,总比投板回来返工强。
边缘AI嵌入式的坑,大多不在算法
最近两年做嵌入式,不管做什么产品都想搭点边缘AI,这是行业大趋势没错,但踩坑的人真不少。我接触过不下五个项目,算法调得好好的,一整合进系统就出问题,最后查出来根源和算法半毛钱关系没有。
去年帮一家做智能车位锁的公司改方案,他们把目标检测模型量化到4bit,跑在带NPU的RISC-V芯片上,帧率、准确率都达标,就是连续跑两三个小时就会莫名死机重启。他们找了两个算法工程师调了半个月模型,都没解决。我过去拆了一台样机,跑了个内存监测,不到十分钟就看出来问题——动态内存分配没有做碎片回收,每次推理都会留下几字节的碎片,攒几个小时直接把片上SRAM占满,不死机才怪。
边缘AI嵌入式开发板内存占用监测图
不过话说回来,这种问题真不是算法工程师能想到的。他们习惯了在PC上调模型,内存不够操作系统帮你管,哪知道嵌入式系统里,哪怕几KB的碎片都能把整个系统搞崩。还有更离谱的,我见过一个做智能摄像头的项目,NPU满负载运行的时候功耗直接比标称高了一倍,没加散热片,核心温度十分钟飙到90度,直接触发过热降频,画面直接卡成PPT。
很多人觉得做AI嵌入式就是堆模型,其实核心还是嵌入式那套老理儿:资源有限,你得把每一字节内存每一毫瓦都算清楚。
好设计是砍完冗余再留对余地
好设计是砍完冗余再留对余地
刚学嵌入式系统设计的时候,我总喜欢留各种备用接口、备用元件,就怕哪一天要改功能。结果第一次量产,老板拿着PCB板子骂我:一个备用座子一块二,十万台就是十二万,这钱你出?
那时候才懂,嵌入式产品尤其是消费电子和工业级产品,成本和体积卡得死死的,每多一个没用的元件都是浪费。现在我做第一版设计,第一件事就是砍需求:非核心功能全砍掉,只留必须实现的核心需求。做宠物定位项圈,核心就是GPS低功耗+蓝牙通信,什么计步、温度检测那都是后话,第一版先把核心跑稳再说。
砍冗余不是不留余地,余地要留对地方。比如电源输入,你额定需要1A电流,就得选能支持1.5A的芯片,留够余量应对浪涌;做车规产品,符合安全等级要求的冗余必须留,动力相关的传感器该双份就双份,不能省。但那些不知道用不用得上的扩展接口、备用焊盘,能砍就砍。
现在行业卷成什么样大家都知道,同样功能的产品,你比别人贵五块钱,就拿不到订单。嵌入式系统设计拼到最后,就是在有限的资源里找最优解,你对冗余够狠,对核心需求够细,做出来的产品才能站得住脚。
做这行快十年,见过太多花里胡哨的设计,看起来参数漂亮,其实一用就垮。真正好的嵌入式设计,从来不是堆料堆出来的,是踩坑踩出来的。