RV1126BRK801-2实战如何用瑞芯微SoC打造低功耗AI视觉终端附配置清单说实话做AI视觉终端的硬件选型这几年我前后试过好几套方案。从最早的高通方案到后来的一些国产边缘SoC最后真正让我稳定用下来的反而是这套看起来不算顶配、但处处透着“够用就好”思路的瑞芯微组合RV1126B这颗视觉SoC配合RK801-2电源管理芯片。这篇文章就把我这段时间从画板子、调驱动、抠功耗到最终跑通AI推理的完整过程记录下来包括遇到的各种坑和最终的配置清单希望对准备做低功耗视觉产品的朋友有点帮助。这套方案最适合的场景很明确电池供电或对整机功耗有严格要求的AI摄像头、智能闸机、低功耗猫眼、巡检机器人视觉模组以及需要长时间待机、事件触发唤醒的视觉终端。无论你是硬件工程师、嵌入式Linux开发者还是想快速评估方案的创客这篇文章里关于硬件选型思路、系统搭建步骤、电源调优方法以及最终的物料清单都可以直接参考着抄作业。1. 项目定位与方案取舍1.1 为什么选RV1126B而不是RV1126或RK3566先说结论RV1126B不是RV1126的简单降频版它更像是瑞芯微针对“极致功耗比”场景单独拉出来的一条产品线。单从算力看RV1126B内置的NPU算力标称2TOPS和RV1126一致但关键差异在于整个SoC的制程、电源域设计和内部IP的取舍。RV1126B去掉了不少视觉终端用不到的接口。比如它不再像RV1126那样强调多路显示输出能力而是把资源集中到了MIPI CSI输入、ISP处理和NPU推理这三条主线上。对于做单目或者双目AI摄像头来说这种“削减外围、专注核心”的思路非常友好BOM成本和Layout面积都下来了。另一个我深有体会的点是RV1126B对DDR的适配更宽容。RK3566虽然性能更高但功耗摆在那里对于电池供电的场景满负荷跑起来整机功耗轻松超过3W散热和电池容量都是麻烦。RV1126B在典型视觉场景下整机功耗可以压到1.5W左右如果是事件触发式的低占空比工作模式平均功耗能做到更低。这个数字对于手持设备、无线摄像头来说意义是决定性的。1.2 RK801-2 PMIC电源链路的隐形功臣很多人做嵌入式硬件时喜欢随便拿一颗DC-DC加上几颗LDO就把电给供了一开始确实能跑等到系统负载一上来或者要做低功耗休眠时问题就全暴露了。RV1126B的电源轨很多核心电压、DDR电压、IO电压、模拟电压每一路的上下电时序都有要求。RK801-2这颗PMIC就是专门为这类SoC配套的电源管理芯片。它把多路DCDC和LDO集成在一起硬件上只需要通过I2C接口配置寄存器就能精确控制各路电源的开关和电压。更关键的是它能配合SoC完成休眠唤醒时的电源域切换。我举个例子RV1126B进入深度睡眠模式时内核电压可以降到0.8V左右唤醒时再快速拉高到0.95V左右。用分立器件做这个动态电压调节控制逻辑非常麻烦而RK801-2直接支持这种动态调压软件上只需要在设备树里配好调压表就行。这就是为什么我强烈建议不要省掉PMIC的钱在量产阶段电源的稳定性和低功耗性能远比省那几块钱的物料成本重要。1.3 明确的功能边界与目标场景动手之前我得先想清楚这个终端到底要干什么。我的目标场景是做一个低功耗AI抓拍机平时处于休眠状态PIR传感器检测到人体活动时唤醒系统然后通过MIPI接口抓拍一帧图像送到NPU做目标检测比如检测人形或车辆如果命中目标就把图片通过Wi-Fi或4G上传然后重新进入休眠。这个场景对硬件的要求非常明确待机功耗要尽量低目标是在0.1W以下从休眠到出图的时间要短最好在1秒以内NPU需要能够实时处理一帧1080P或720P的图像检测耗时在几百毫秒级别整机尺寸要小适合嵌入到各种外壳里面有了这些边界条件方案选型就不会跑偏。RV1126B的ISP性能足够处理主流Sensor的输出2TOPS的NPU跑一个轻量级检测模型也绰绰有余。RK801-2提供低功耗待机通路让DDR进入自刷新、CPU核断电系统整体待机电流可以压到几十毫安级别。2. 硬件设计与核心细节2.1 内存选型1GB DDR3到底怎么搭这是我最想展开讲的部分因为项目初期在这块吃了不少亏。RV1126B原生支持DDR3和DDR3L官方SDK适配过的颗粒型号也不少。很多朋友问“RV1126B可用的DDR3内存1GB的有哪些”我直接给结论。1GB的DDR3通常有两种搭法一是两颗512MB4Gbit颗粒拼接二是使用单颗1GB8Gbit颗粒。对于RV1126B这种消费级SoC我更推荐双片选方案理由有三点第一双片选可以降低单颗粒的位宽压力布线更容易第二散热更均匀不至于让一颗颗粒承受全部热量第三物料采购灵活512MB颗粒的供应链成熟度更高。具体到颗粒型号我实测下来比较稳的有这几种容量颗粒型号厂商单片位宽片选数量实测频率512MBK4B4G1646E-BYMA三星x161片/通道1866Mbps512MBMT41K512M16HA-125美光x161片/通道1866Mbps1GBK4B8G1646D-BYK0三星x16单颗粒1866Mbps如果你要组1GB两颗512MB设备树里的内存配置需要把rank数设为2同时确认地址映射是正确的。瑞芯微SDK里有一个DDR初始化工具编译后会生成一个DDR bin文件烧录时会根据你在工具里选择的颗粒型号自动配置时序参数。这里有个非常重要的坑RV1126B对DDR3的VREF校准很敏感。如果PCB layout时DQ和DQS的等长没做好在量产时就会出现“这批板子能启动那批板子启动不稳定”的问题。我的经验是DDR部分的走线等长误差控制在50密耳以内并且预留VREF分压电阻的调试位置这样后续调起来会省很多事。2.2 MIPI CSI接口与Sensor选型低功耗AI视觉终端逃不掉Sensor选型的问题。RV1126B的MIPI CSI接口支持1路4-lane或者2路2-lane支持虚拟通道也就是说你可以同时接两个Sensor做双目。对于抓拍机这种场景我建议优先考虑低照度性能好的Sensor。我最终选了SC530AI这颗500万像素的Sensor。选它的理由有几个一是功耗相对较低工作在30fps时典型功耗在150mW左右二是它支持RAW输出可以把ISP的处理能力完全发挥出来三是动态范围不错适用于光线变化比较大的室外场景。接Sensor时需要关注几个信号MCLK时钟、I2C控制、复位脚、电源。RV1126B的MCLK默认可能是24MHz而SC530AI的最佳工作频率也是24MHz这个匹配上问题不大。但要注意RV1126B的MCLK输出幅度如果Sensor的输入时钟幅度不足会导致图像出现条纹干扰。我遇到过的一个典型问题是Sensor的AVDD电源如果直接用PMIC的LDO供电上电瞬间可能会有毛刺导致Sensor初始化偶尔失败。解决办法是在LDO输出端加一颗10uF的电容同时把复位时序拉长一些在IORESET拉低后等至少10ms再拉高确保Sensor内部稳压器完全稳定。2.3 硬件配置清单草案画板子之前我把核心物料清单先拉了出来方便后续采购和layout模块物料型号/规格备注SoCRV1126BBGA封装主控PMICRK801-2QFN封装电源管理DDR3K4B4G1646E x2512MB x2共1GBeMMC8GBFBGA153系统存储SensorSC530AI500万像素MIPI接口Wi-FiRTL8188FUUSB接口低功耗Wi-Fi电源MP2162DC-DC输入5V转3.8V系统供电接口USB Type-C调试供电支持UVC这个清单不是固定的如果你做的是纯有线供电的闸机Wi-Fi可以去掉如果要做4G版本需要额外加一颗4G模组功耗预算也要相应提高。3. 系统搭建与AI推理链路3.1 SDK环境与首次编译瑞芯微的SDK体积比较大建议在Ubuntu 18.04或20.04的机器上编译。编译环境有几个关键依赖需要装齐repo工具、make、gcc-arm-linux-gnueabihf交叉编译链、python2.7SDK里有部分脚本依赖。拉代码的过程就不展开说了基本就是repo init加repo sync。SDK编译的第一步是选择配置文件cd sdk source build/envsetup.sh lunch rv1126b-userdebug ./build.sh -A首次编译的时间比较长我这边双路E5的服务器大概要二十分钟左右。编译完成后输出目录里会有update.img用瑞芯微的烧录工具烧录即可。有一个我踩过的坑SDK默认的编译工具链版本在Ubuntu 20.04上会有兼容性问题报错通常是找不到某个GCC依赖的文件。解决方法是安装lib32gcc-9-dev和lib32stdc-9-dev或者直接装lib32readline-dev基本能覆盖大部分缺失的依赖。3.2 设备树与内核配置要点系统的低功耗能力很大程度上取决于内核配置。RV1126B的SDK内核版本是Linux 4.19这个版本对电源管理的支持已经比较完善了。设备树中需要重点配置的几个节点PMIC节点RK801-2的I2C地址一般是0x20需要在i2c总线下注册。关键要配好各路regulator的电压范围和调压表。举个例子vdd_core这个regulator的调压范围我设为0.8V到1.2Vvdd_core: vdd_core { regulator-name vdd_core; regulator-min-microvolt 800000; regulator-max-microvolt 1200000; regulator-always-on; };DVFS配置要让CPU和NPU能够根据负载动态调频必须确保CPU的operating-points表正确。RV1126B的CPU最高频率一般是1.5GHz但在低功耗场景下我把最高频率约束到了1.2GHz实测性能损失不大但功耗可以降低约15%。休眠唤醒配置需要配置好唤醒源。我的方案中PIR传感器输出的高电平接到SoC的一个GPIO上这个GPIO在设备树里配置为wakeup-sourcegpio_keys { compatible gpio-keys; pinctrl-names default; pinctrl-0 pir_int_l; status okay; wakeup { label PIR Wakeup; gpios gpio2 RK_PB1 GPIO_ACTIVE_HIGH; linux,code KEY_WAKEUP; gpio-key,wakeup; }; };3.3 NPU推理从模型转换到端侧部署RV1126B的NPU使用RKNN框架模型转换流程一般是训练好的模型PyTorch/TensorFlow/Paddle转成ONNX再用瑞芯微提供的RKNN-Toolkit转成.rknn格式。我用的检测模型是修改过的轻量版YOLOv5s输入分辨率设为640x384考虑到抓拍场景的宽高比检测类别只有person和vehicle两类。转换命令大致如下python3 rknn_convert.py --model yolov5s.onnx --input_size 640 384 --output yolov5s_rv1126b.rknn导入时会根据RV1126B的NPU特性做算子优化。这里有个经验如果模型里有某些不支持的算子可以尝试开启NPU的混合精度模式把不支持的层留在CPU上跑但这会明显增加推理耗时。我最终的做法是调整了模型结构把一些自定义的激活函数替换成了RELU整个模型在RV1126B上的推理耗时稳定在150ms以内。NPU的推理接口使用比较简单#include rknn_api.h // 初始化 rknn_context ctx; rknn_init(ctx, model_data, model_size, 0); // 输入 rknn_input inputs[1]; inputs[0].index 0; inputs[0].type RKNN_TENSOR_UINT8; inputs[0].size width * height * 3; inputs[0].buf image_data; // 推理 rknn_run(ctx, NULL); // 输出 rknn_output outputs[2]; rknn_outputs_get(ctx, 1, outputs, NULL);整个推理链路从Sensor出帧、ISP处理到NPU输出检测框在720P分辨率下能做到300ms以内的端到端延迟这个成绩对于低功耗抓拍机来说完全够用。4. 低功耗调优实战4.1 功耗到底从哪里来低功耗设计的第一步是搞清楚功耗都消耗在哪些环节。我花了整整两天时间用高精度功率计做了RV1126BRK801-2方案的功耗分布测试结果很有参考价值。工作状态CPU频率整机功耗主要功耗来源深度休眠关闭35mWPMIC待机、DDR自刷新浅度休眠关闭120mW额外唤醒逻辑空闲待机200MHz450mW内核子系统视频预览1.2GHz1.15WISP、DDR、SensorAI推理1.2GHz1.85WNPU、DDR从表里可以看得出来DDR的功耗占比非常高。深度休眠时DDR进入自刷新模式功耗主要在维持数据不丢失上AI推理时DDR带宽占用高功耗自然上去了。这也是为什么选1GB内存而不是2GB的原因之一内存越大自刷新功耗越高。4.2 动态调频与任务调度策略RV1126B的CPU和NPU都支持动态调频。我采用了系统级的功耗管理策略平时CPU频率固定在最低档200MHz只有收到唤醒信号后才切换到高性能档位。这里有一个调度技巧把AI推理任务绑定到指定的CPU核心上避免任务在不同核心间迁移时产生不必要的cache刷新开销同时可以更精准地控制系统负载。我用的方法是# 把NPU进程绑定到CPU核心3 taskset -c 3 /usr/bin/ai_detect配合cpufreq的conservative调度器可以避免CPU在空闲时反复调整频率。实测下来在等待事件触发的空转状态下CPU频率稳定在200MHz整机功耗比默认的interactive调度器降低了约20%。4.3 深度休眠唤醒的完整流程深度休眠是整个低功耗方案的核心。RV1126B支持多种休眠模式深度休眠意味着CPU核断电、NPU断电、大部分外设断电只保留PMIC和唤醒源的电。休眠可以通过sysfs接口触发echo mem /sys/power/state但实际产品中不能这么简单粗暴需要先停止Sensor、关闭Wi-Fi、卸载摄像头驱动确保所有设备都处于可断电状态后再进入休眠。我建议在驱动里实现suspend/resume回调函数确保在休眠前保存好Sensor的寄存器状态唤醒后能快速恢复。唤醒流程的时间线大概是这样的时间点事件T0msPIR触发GPIO中断T50msPMIC恢复各路供电CPU开始启动T200msBootloader加载内核开始初始化T600ms驱动加载完成Sensor出流T800ms系统就绪等待应用层指令T1.2s第一帧AI推理完成输出检测结果这个1.2秒的唤醒出结果时间在大多数场景下可以接受。如果你需要更快可以考虑让系统保持浅度休眠、部分外设不断电这样可以把唤醒时间缩短到300ms以内但代价是待机功耗会上升到120mW左右。4.4 实测数据与优化心得优化前后我记录了整机的平均功耗变化。在模拟真实使用场景每小时触发5次每次工作10秒的情况下初始版本平均功耗约180mW电池供电时5000mAh电池理论上可以撑约27小时优化后版本平均功耗约75mW同样的电池可以撑到约66小时这个优化幅度主要来自三处深度休眠的充分利用、AI推理后快速回睡而不是空转等待超时、以及Wi-Fi模组的功耗管理平时关闭只在需要上传数据时打开。有个细节值得提醒Wi-Fi模组的功耗管理非常关键。很多低功耗Wi-Fi模组虽然标称待机电流很低但实际上beacon监听会让功耗悄悄上来。我在驱动里把Wi-Fi的漫游扫描关掉同时只在需要上传结果时才真正打开数据通路这一项就省了约40mW的平均功耗。5. 常见问题与排查技巧5.1 启动阶段时序问题RV1126B对电源上电时序有明确要求RK801-2虽然能保证输出顺序基本正确但如果你在板子上额外加了外设一定要确认外设的电源不会早于SoC核心电压上电。我遇到过的情况是Sensor的AVDD上电早于VDD_CORE导致Sensor内部锁存器状态异常偶尔出现无法初始化的问题。排查方法是用示波器同时抓VDD_CORE、VDD_DDR、Sensor AVDD三路电源的上电波形确认时序偏差不超过规定范围。如果发现异常在PMIC配置里调整对应的regulator delay参数。5.2 DDR稳定性问题的定位思路DDR不稳定是最难排查的问题之一。我踩过的坑包括某批次板子在高温环境下频繁重启、偶发内存校验错误、休眠唤醒后dmesg报ECC错误。这类问题有一个系统的排查流程跑内存压力测试比如用memtester连续跑24小时检查DDR走线阻抗DDR3的差分线阻抗要求是100欧姆单端40欧姆确认设备树中DDR时序参数和实际颗粒匹配如果上述都没问题检查VDD_DDR的纹波峰值纹波不能超过30mV最终我那次问题的根因是VDD_DDR的负载瞬态响应不够在CPU频率切换的瞬间电压跌落超过阈值。解决办法是在VDD_DDR输出端多放了一颗22uF的大电容问题随即消失。5.3 图像异常排查速查表现象可能原因解决思路整幅图像偏绿/偏红Sensor白平衡参数错误检查ISP参数配置图像有横向条纹MCLK时钟质量差检查时钟走线、加串阻图像下半部分有条带Sensor配置分辨率与输出不匹配确认寄存器设置图像闪烁Sensor曝光时间与光源频率不匹配修改曝光行数或PLL配置时好时坏初始化失败Sensor复位时序不稳定延长复位时间检查AVDD滤波5.4 低功耗调试的独家秘籍最后分享一个压箱底的调试技巧判断系统是否真正进入了深度休眠不要只看电流表数字更可靠的方法是检查系统日志。当系统成功进入深度休眠时内核会执行所有设备的suspend回调最后输出类似“PM: suspend exit”的日志。如果某个设备的suspend回调卡住了系统会一直停留在浅睡状态电流表上可能看起来不高但实际上没有进入真正的低功耗模式。检查方法很简单cat /sys/kernel/debug/suspend_stats这个文件里记录了每次休眠的成功/失败状态和耗时。如果看到失败的记录可以用echo 1 /sys/power/pm_print_times开启suspend/resume耗时打印然后去看dmesg里哪个设备的suspend环节耗时异常。6. 完整配置清单BOM参考6.1 核心硬件配置清单这是我最终定稿的配置清单可以直接参考类别型号规格数量备注主控SoCRV1126B四核A7, 2TOPS NPU1核心物料PMICRK801-26路DCDC2路LDO1核心物料DDR3LK4B4G1646E-BYMA512MB, x16, 1866Mbps2组1GBeMMC8GB eMMC5.1FBGA1531系统盘SensorSC530AI500万像素, MIPI1星光级镜头M12接口, 3.6mm水平视角约80度1根据场景调整Wi-FiRTL8188FU802.11 b/g/n1USB接口DC-DCMP2162同步降压, 2A15V转系统电压PIR模块AM3123.3V供电1人体感应唤醒指示灯蓝色LED0603封装2状态指示连接器0.5mm FPC24Pin1Sensor连接PCB四层板1.6mm厚度1阻抗控制6.2 软件配置清单模块版本/配置说明SDKRockchip RV1126B SDK 1.2基于Linux 4.19BootloaderU-Boot 2017.09支持DDR初始化内核Linux 4.19.111开启电源管理相关选项NPU框架RKNN 1.7.3模型转换与推理ISPRockchip ISP驱动支持3A算法文件系统Buildroot最小化rootfs约120MB6.3 可以优化的成本项如果你要量产有几个成本优化空间Sensor可以根据实际应用降级到200万像素比如SC2336单价能便宜20%以上eMMC可以用更低成本的TF卡方案替代但要注意可靠性如果不需要Wi-Fi直接删掉这个模组BOM成本能降5%左右DDR3如果量产达到一定规模可以考虑直接用1GB单颗粒方案省掉一颗物料的贴片成本不过在压缩成本的同时一定不要动PMIC、DDR VREF校准电路、以及SoC电源滤波电容这些关键部分。这些地方省下的钱最后大概率会变成售后返修的成本。写在最后这套RV1126BRK801-2方案我从评估到量产跟了快半年最大的感受是瑞芯微这套组合在低功耗视觉终端这个定位上确实做得比较平衡。它没有把算力堆得很夸张但每一个环节——从Sensor进来说、到NPU推理、再到系统休眠——都让人觉得是经过仔细考量过的。尤其是配合RK801-2这颗PMIC整个电源链路的可控性非常好不像以前用分立方案那样调个功耗要跟时序搏斗半天。如果你手头正好在做类似的低功耗AI视觉产品我建议先照着这个配置清单打一版验证板把系统跑起来、把功耗测出来再去纠结具体算力够不够、要不要换更高端的SoC。很多时候方案选型的瓶颈不在SoC本身而是在电源、在Sensor、在系统软件这些配套环节。这套方案里我踩过的坑和总结的经验希望能帮你少走一些弯路。