十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

瑞芯微RV1126B视觉SoC开发实战:从烧录到NPU部署

瑞芯微RV1126B视觉SoC开发实战:从烧录到NPU部署 1. 项目概述RV1126B 是什么解决什么问题1.1 一颗为视觉而生的 SoC规格与定位做嵌入式视觉这几年经手的处理芯片少说也有二三十颗但真正让我愿意专门写一篇长文来聊的RV1126B 算一个。这颗瑞芯微Rockchip的视觉处理器 SoC在安防 IPC、AIoT 边缘盒子和工业检测设备上出镜率极高几乎每周都有同行拿着它来问我选型、烧录和模型移植的细节。它把四核 Arm Cortex-A7、2TOPS 算力的 NPU、ISP 图像信号处理器和 H.264/H.265 视频编解码单元集成到同一颗芯片上单芯片就能完成从摄像头采图、图像增强、AI 识别到视频推流的完整闭环。适合谁来用我认为主要是三类人正在做智能摄像头产品但还在用 MCU 硬扛的嵌入式工程师想把现有模拟/普通网络相机升级成带本地 AI 识别能力又不想上太贵方案的硬件负责人以及做边缘计算盒子、需要低功耗低成本跑目标检测算法的小团队。RV1126B 对比 FPGA 方案开发门槛低得多对比纯 ARM 板卡又多出了专门的视觉加速单元属于典型的花小钱办大事。我实际用它做了一台四路 IPC 样机从画板回板到跑通第一个人形检测模型大概用了两周。这里说的“跑通”不是实验室转一转 demo而是连续运行 72 小时以上不掉链子的那种。后面我会把整个过程里涉及到的选型逻辑、启动链路、烧录细节、设备树修改、模型部署以及各类翻车现场全部摊开讲。1.2 我为什么选择 RV1126B 而不是其他型号选型阶段我对比过海思 Hi3516、君正 T40以及瑞芯微自家 RV1106 和 RK3588。海思的编码器和成本确实有吸引力但授权和供货链条在项目周期里变数太大不是小团队能完全掌控的因素RV1106 主打极低功耗适合电池类户外相机可它的 NPU 算力跑稍微大一点的检测模型明显吃紧RK3588 性能强到没话说但整板成本、功耗和 PCB 设计要求都高一大截用在一个两百元档的 IPC 上属于杀鸡用牛刀。RV1126B 正好卡在“算力够用、成本可控、设计难度低”这个甜点区。我拿到的开发板丝印是 RV1126B-P和 RV1126B 在 SDK、设备树、烧录工具上完全通用。按代理的说法-P 主要对应某些行业定制封装或温度等级采购时按具体物料编码下单即可软件层面不需要单独适配。我自己使用过程中从来没有区分过这两个型号所以后面所有内容都按 RV1126B 统一讲个别涉及变体的地方我会单独提示。2. 核心架构与关键技术拆解2.1 CPU/GPU/NPU 三引擎架构与算力分配先看整颗芯片的引擎分布。CPU 部分是四核 Arm Cortex-A7最高主频 1.5GHz 左右平时按负载动态调频。今天看这个规格不算抢眼但跑 Linux、跑网络协议栈、做视频流封装转发完全够用。RV1126B 没有像手机 SoC 那样追大核性能原因很简单视觉 SoC 的算力重心不在 CPU而在后面两个引擎。第二个引擎是这颗芯片最值得说的地方——NPU。RV1126B 集成了一颗支持 INT8 量化的神经网络加速单元官方标称算力 2TOPS。这是什么概念拿最常用的 YOLOv5s 目标检测模型来说输入 640x640、INT8 量化后我在板端实测能稳定跑在 25 到 35FPS 之间做安防领域的实时人车识别绰绰有余。作为对比用树莓派 4B 跑同一个模型CPU 推理只有每秒几帧差距非常直观。第三个引擎是视频编解码单元再往下是 ISP。这几个大模块通过芯片内部总线连接数据流的典型路径是Sensor 出 RAW 图ISP 做处理之后兵分三路——一路送编码器生成 H.265 码流、一路送 NPU 做推理、一路送 RTSP 推流或者显示。整条链路硬件化CPU 只做控制和协议处理所以一颗 A7 级别的芯片也能同时扛住多路视频负载。这种异构分工架构就是我常跟人说的“视觉 SoC 和普通 MCU 最本质的区别”。2.2 ISP 与视频编解码AI 视觉的真正主力很多第一次用视觉 SoC 的朋友会忽略 ISP 的重要性觉得摄像头模组自带 ISP 就够了。实际上IPC 场景光照复杂逆光、夜间低照度、强光源全都在考验 ISP 的 3A 算法也就是自动曝光、自动白平衡、自动对焦。RV1126B 的 ISP 支持宽动态、去噪、坏点校正这些常规功能关键是它和后面的编码器、NPU 是同一个硬件流水线延迟可控不像外置 ISP 方案那样多出一截通信和供电的成本。视频编解码方面RV1126B 支持 H.264 和 H.265 的编码与解码具体帧率和分辨率跟码流设置、DDR 带宽有关。我在项目里常用的是四路 1080p25 的 H.265 编码码率压在 4Mbps 左右画质和存储成本都能接受。如果只做单路产品余量更大甚至可以把编码器配置成更高帧率或更高分辨率。这里有个实战细节H.265 编码前先做好图像缩放和裁剪别让编码器处理超大分辨率再硬缩否则 CPU 参与过多整机功耗会明显上升。2.3 一次搞清楚启动链路与固件结构搞清启动链对排查问题太重要了。RV1126B 的启动顺序大致是芯片内部 BootROM 上电从 eMMC、SPI NOR 或 SD 卡读取 Loader 阶段程序U-Boot 初始化 DDR 和外设然后加载内核镜像和设备树最后挂载 rootfs。中间任何环节出问题现象都是串口没有输出或者卡在特定位置的打印信息能快速定位到烧录、配置还是硬件问题。瑞芯微的固件使用 Rockchip 私有打包格式常见分区包括 parameter 分区表、uboot、boot 即内核加 dtb、rootfs、misc 等。用官方工具烧录时会按照 parameter 里定义的分区表把各部分写到指定位置。这也是为什么烧录后一定要保留好和你 SDK 配套的 update.img版本一旦错位系统启动失败的概率非常大。下面的章节我会把烧录过程中最常见的问题逐个列出来。3. 开发环境搭建与烧录实战3.1 搭建 SDK 环境与编译前准备瑞芯微现在的芯片基本走统一 SDK 路线开源部分放在 GitHub 和 GitLab 上完整 BSP 一般需要和代理商签协议获取。我手头这套基于 Linux根文件系统用 Buildroot 组织目录结构大致包含 kernel、u-boot、buildroot、rknn 几个核心仓库。拿到 SDK 后第一件事不是急着编译而是先装宿主机依赖。sudo apt-get install -y git ssh make gcc libssl-dev libncurses5-dev \ device-tree-compiler lz4 python2 python3 file然后按 SDK 里的 README 做仓库同步编译一般走这几个脚本./build.sh lunch选择板型配置./build.sh kernel编内核./build.sh rootfs编文件系统./build.sh firmware打包 update.img。第一次全量编译时间取决于机器性能我的工作站大概四十分钟。重点提醒一句SDK 版本和烧录工具版本要匹配官方经常同步升级混用老工具烧新固件会出现分区表解析错乱那是相当头疼的问题。3.2 烧录进板RKDevTool、驱动与 Mode 切换Windows 下烧录用 RKDevTool。第一次插板子前先安装 DriverAssitant 并执行驱动安装再把板子 USB 接到电脑。进入烧录模式有两种常用方法一是按住板上的 recovery 键不松然后插 USB 上电二是开机后短按 reset 的同时执行一条进入 loader 的命令。正常情况下设备管理器里会出现 Rockchip USB 设备RKDevTool 上方也会显示“发现一个LOADER设备”。之后操作就简单了把编译出的 rockdev/update.img 拖进工具点“一键升级”。如果只想更新内核可以切换到分区表页签单独选 boot 分区填上 boot.img。这里有个细节我踩过好几次坑USB 线必须用带数据功能的有些充电线怎么插设备都不识别另外尽量插主板后置 USB 2.0 口比前置口和 3.0 口稳定。Linux 下对应的是 upgrade_tool 命令行工具最常用的几个操作是upgrade_tool uf update.img全量升级、upgrade_tool di -b boot.img只烧 boot。我的个人习惯是量产阶段在 Linux 下做脚本化烧录研发阶段用 Windows 图形工具看日志更方便两者配合效率最高。3.3 设备树适配与内核启动日志分析设备树在这类 SoC 开发里几乎是每天的必修课。换一颗 Sensor、改一个 GPIO、调一个 I2C 地址都要动 dts。RV1126B 的 SDK 里一般会提供一块官方 EVB 的 dts比如 rv1126b-evb.dts项目板卡的信息就在同类文件里改。下面是一个典型的 MIPI Sensor 节点配置片段关键地方我加了注释。i2c2 { status okay; clock-frequency 400000; sc3336: sc333630 { compatible smartsens,sc3336; reg 0x30; clocks cru CLK_MIPICSI_OUT; clock-names xvclk; pinctrl-names rockchip,camera_default; pinctrl-0 mipi_sensor_clk; reset-gpios gpio3 RK_PB3 GPIO_ACTIVE_LOW; power-gpios gpio3 RK_PB4 GPIO_ACTIVE_HIGH; rockchip,camera-module-index 0; rockchip,camera-module-name sc3336; rockchip,camera-module-lens-name default; }; };改完 dts 后要重新编译内核并生成新 boot.img 烧进去或者用设备树 overlay 机制在 U-Boot 阶段动态加载后者适合维护多板卡产品线。改完上电第一件事是看启动串口日志重点搜fdt、ethernet、v4l2等关键词。如果 Sensor 没亮相多半是 GPIO 复位时序没配对或者 I2C 地址错了如果网口起不来优先查时钟和 PHY 复位脚。日志是最诚实的它会告诉你配置到底有没有生效。4. 应用场景与同系芯片选型对比4.1 智能安防与 IP Camera最成熟的落地场景RV1126B 出现的最大场景就是网络摄像机。传统 IPC 方案里Sensor 数据进来后要么只做编码推流要么用一颗额外 MCU 做简单报警算法丰富度受限。RV1126B 把编码、推流和 AI 推理整合到一颗芯片上就可以直接在设备端做人形检测、区域入侵报警、越界检测甚至口罩佩戴识别。安防项目非常看重漏报率和误报率板端跑量化模型的精度损失控制不好白天还行晚上就会频繁误报。我自己在样机上跑过一个人形检测模型白天把置信度阈值调到 0.5误报率已经很低到夜间低照度场景发现检测率明显下降。排查下来不是 NPU 算力不够而是 Sensor 在弱光下出图质量差ISP 的降噪参数又偏保守。后来把 ISP 的 IR-CUT 切换策略和去噪强度按夜间场景单独配了一组参数模型几乎没改就恢复了白天级别的效果。这件事给我的经验是视觉算法的上限其实由图像质量决定调 ISP 永远比调模型参数优先。4.2 AIoT / 边缘计算盒子本地推理的价值除了摄像机RV1126B 常见的形态是边缘计算盒子。一个典型产品是把 8 路 IPC 的 RTSP 流拉进盒子用 H.265 硬解之后逐路跑结构化分析再把结果通过 MQTT 上报到平台。以前这种方案要用 X86 工控机或带 GPU 的嵌入式板卡成本高、体积大、功耗感人。RV1126B 方案整板功耗可以压在个位数瓦无风扇设计也能稳定运行安装位置灵活很多。盒子里跑模型的方式和开发板完全一样RKNN 工具链会帮你把模型转换成 .rknn 格式。这类产品有一个常见坑多路码流同时解码时 CPU 负载会突然飙升原因是某些协议栈实现把硬解后的 YUV 转换操作放在 CPU 上做。正确做法是让解码器直接输出 NV12送到后续处理模块避免多余的拷贝和格式转换。这个优化做不做实际帧率能差出 20%是非常值得花时间抠的细节。4.3 RV1103/RV1106、RV1126、RK3588 怎么选选型时最容易纠结的是瑞芯微自家产品线怎么选。我整理了一张常用型号对照表方便你按项目定位快速过滤。型号CPUNPU 算力特性适合场景RV1103单核 A7 RISC-V 协处理器0.5TOPS 级别极低功耗常配小容量 DDR电池类低功耗相机、猫眼RV1106单核 A7 RISC-V 协处理器1TOPS 级别低功耗性价比高低端 IPC、AI 带屏猫眼RV1126B四核 Cortex-A72TOPS 级别性能均衡接口丰富主流 IPC、边缘盒子RV1126四核 Cortex-A72TOPS 级别老型号物料紧张时可关注兼容替代选型RK3588八核 A76A556TOPS 级别高算力、高功耗、高成本多路视频分析、NVR、大模型端侧部署实战建议是只有一两路摄像头、对成本极其敏感的选 RV1103 或 RV1106主流项目直接 RV1126B开发资料最多如果要做 16 路以上视频分析或者跑更大的模型再升级到 RK3588。不要一开始就为了预留性能余量选高配视觉项目后期瓶颈大多数在 ISP 调优和模型优化不在 CPU 核数选高配反而增加发热和整机成本。5. 常见问题与排查技巧实录5.1 烧录失败、设备识别不到怎么办这类问题在社区里每天都能看到我按排查顺序整理了一张速查表每一行都是我自己或朋友真实踩过的坑。现象排查重点处理方向设备管理器找不到 Rockchip 设备驱动是否安装、USB 线是否数据线重装 DriverAssitant换后置 USB 2.0 口能找到设备但一键升级失败loader 固件版本和工具不匹配用 SDK 配套的 RKDevTool 版本重新下载 loader提示下载 Boot 失败eMMC 处于异常分区状态进 MaskRom 模式先擦除全部 eMMC 再烧烧完启动卡在 logo 或黑屏parameter 分区表损坏重新全量烧 update.img不要只烧 boot启动日志有乱码串口电平或波特率不匹配确认 UART0 波特率 1500000检查共地MaskRom 模式是最后的救命手段短接板上的 MaskRom 焊盘或按官方说明使芯片进入底层引导模式然后用工具擦除 eMMC。这个操作会清掉所有固件必须在确认能拿到恢复固件的前提下做。我确实见过把客户样机清成砖又找不到原厂固件的惨案所以这个提醒值回票价。5.2 NPU 推理报错与算子兼容性RKNN 工具链整体体验不错但算子兼容问题仍然存在。最常见的报错是模型里包含某些自定义层或新算子转换工具不支持。遇到这种情况先把报错贴到 RKNN 工具的日志里找到具体节点名然后在源码里把这一层拆成多个原生算子或者用 CPU 算子兜底。我的经验是Transformer 类结构的模型在这代 NPU 上兼容性不如 CNN如果项目必须上 Transformer先在工具链验证阶段就确认关键算子否则返工成本很高。部署阶段的代码框架大致是这样的。from rknn.api import RKNN rknn RKNN(verboseTrue) rknn.config(mean_values[[0, 0, 0]], std_values[[255, 255, 255]], target_platformrv1126) ret rknn.load_rknn(./model.rknn) if ret ! 0: print(load rknn failed) exit(ret) ret rknn.init_runtime(targetrv1126, device_idadb-xxxx) if ret ! 0: print(init runtime failed) exit(ret) outputs rknn.inference(inputs[img_ndarray]) rknn.release()这里最容易错的是 target_platform 和 init_runtime 的 device_id。target_platform 要写你转换时对应的芯片平台init_runtime 的 device_id 要改成实际adb devices里的序列号不能直接照抄例子。另外推理前输入图像必须按训练阶段的预处理来做mean/std、通道顺序、缩放尺寸差一点输出精度都会明显变差。很多人模型转换没问题推理结果却乱七八糟十有八九是预处理环节偷了懒。5.3 功耗、散热与长时间运行稳定性RV1126B 虽然定位低功耗但持续跑 NPU 推理时不能掉以轻心。我实测跑一路 1080p 编码加一路 YOLOv5s 推理整板功耗大概 2.5W 左右在密闭外壳里如果散热没做一小时后芯片表面温度能升到 60 度以上。长期高温对 eMMC 和 DDR 的寿命都不友好工业项目至少加一块小散热片再在系统里把 CPU 频率策略配成 ondemand 或 schedutil。还有几个值得注意的稳定性细节一是给设备加独立的硬件看门狗产品侧跑模型没有看门狗死机一次用户就流失一个二是 4G 模块和 Wi-Fi 模块共地处理不好时会在视频推流时产生偶发花屏排查起来非常隐蔽三是长时间写日志要限制 log 分区大小否则 rootfs 写满后各种怪问题都会冒出来。最后分享一个小技巧我在 SD 卡上常备一份最小 rootfs 和对应 dtb恢复系统时不用拆机烧 eMMC直接改启动顺序从 SD 启动确认环境没问题后再把正式固件写回板载存储。做开发板级调试这几年这个习惯帮我省下来的时间不是一星半点。
返回列表