当前位置:首页 > 厂商动态 > 米尔电子
[导读]本文基于 MYD-LR3576开发板测试,完整记录使用米尔电子的5路1080P摄像头从驱动修复到五路同时预览、H.265硬件编码的全流程。四个驱动级Bug,逐一拆解,附完整验证命令和实测截图。

米尔电子技术实战:

五路摄像头同时拉流,MIPI CRC错误刷屏?DPHY锁不住时钟?VBLANK和ISP打架?通通不存在

本文基于 MYD-LR3576开发板测试,完整记录使用米尔电子的5路1080P摄像头从驱动修复到五路同时预览、H.265硬件编码的全流程。四个驱动级Bug,逐一拆解,附完整验证命令和实测截图。

五路摄像头模组与测试板硬件接线图

五路摄像头模组实测效果

软硬件环境

五路 MIPI 通道映射

RK3576拥有独立的5路MIPI CSI-2接口,每路对应独立的DPHY和CSI2 Host。五颗摄像头分别挂载如下:

驱动修改总结

commit: FIX: OV5640 - correct link_freq to 336MHz, fix VBLANK race condition

在五路高密度MIPI场景下暴露了四个问题。需要对通用摄像头驱动进行调整,以下按排查顺序逐一拆解。

1MIPI 链路频率修正

问题 V4L2_CID_LINK_FREQ默认值=19(对应192MHz),DPHY按384Mbps/lane配置时序参数。但OV5640 PLL实际输出672Mbps/lane。频率不匹配,DPHY冷启动时时钟锁定失败,产生MIPI CRC/ECC错误。

修复 将默认链路频率索引从19改为15(对应336MHz → 672Mbps/lane),同步修正pixel_rate使其匹配PLL实际输出。

验证方法:冷启动后拉流,dmesg应显示data_rate_mbps 672,而不是384。

2VBLANK 竞态条件修复

问题 ov5640_update_pixel_rate()中调用__v4l2_ctrl_modify_range + __v4l2_ctrl_s_ctrl修改VBLANK控制值,与ISP(rkaiq)的s_ctrl(VBLANK)路径产生锁竞争。ISP在每帧都可能调VBLANK,handler lock短暂阻塞sensor寄存器写入,MIPI链路失步导致持续CRC错误。

修复 从ov5640_update_pixel_rate()中彻底移除VBLANK相关操作(参考gc05a2.c的做法)。VBLANK仅通过ov5640_s_ctrl()回调路径修改,与ISP的控制变更走同一入口,避免锁竞争。

3MIPI 时钟模式声明

问题 OV5640使用非连续MIPI时钟模式(寄存器0x4800 bit[5]=1,帧间隙时钟gated到LP11),但驱动未向DPHY声明此特性。DPHY按连续时钟模式等待,帧间隙超时触发错误。

修复 在g_mbus_config中显式声明V4L2_MBUS_CSI2_NONCONTINUOUS_CLOCK标志,让DPHY正确处理帧间隙。

4current_link_freq 初始化修正

问题 current_link_freq存储的是频率值(Hz),初始化时误赋为menu index(15),导致后续计算全部基于15Hz而非336MHz。

修复 初始化时查表取实际频率值,而非存储索引。

PLL 时钟配置

1080P30 RAW8 2-lane模式下,OV5640 PLL寄存器配置:

时钟推导链路:

一句话总结:24MHz晶振经过PLL倍频到672MHz系统时钟,MIPI DDR分频后每lane跑672Mbps。DPHY必须按这个速率配置,否则冷启动锁不住。

预览验证流程

单路 RAW 抓流验证

先停掉rkaiq 3A server,用CIF节点直接抓RAW数据,验证MIPI链路本身是否干净:

逐路执行RAW抓流,每路100帧:

# Camera1 (CIF节点 /dev/video0)

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=BGGR \

--stream-mmap=3 --stream-count=100 --stream-skip=10 --stream-to=/root/test_cam0.raw

# Camera2 (CIF节点 /dev/video11)

v4l2-ctl -d /dev/video11 --set-fmt-video=width=1920,height=1080,pixelformat=BGGR \

--stream-mmap=3 --stream-count=100 --stream-skip=10 --stream-to=/root/test_cam1.raw

# Camera3 (CIF节点 /dev/video22)

v4l2-ctl -d /dev/video22 --set-fmt-video=width=1920,height=1080,pixelformat=BGGR \

--stream-mmap=3 --stream-count=100 --stream-skip=10 --stream-to=/root/test_cam2.raw

# Camera4 (CIF节点 /dev/video33)

v4l2-ctl -d /dev/video33 --set-fmt-video=width=1920,height=1080,pixelformat=BGGR \

--stream-mmap=3 --stream-count=100 --stream-skip=10 --stream-to=/root/test_cam3.raw

# Camera5 (CIF节点 /dev/video44)

v4l2-ctl -d /dev/video44 --set-fmt-video=width=1920,height=1080,pixelformat=BGGR \

--stream-mmap=3 --stream-count=100 --stream-skip=10 --stream-to=/root/test_cam4.raw

实测结果:五路均稳定30fps,无MIPI错误:

cam0: /dev/video0 — 稳定 30.00 fps

cam1: /dev/video11 — 稳定 30.00 fps

cam2: /dev/video22 — 稳定 29.97~29.99 fps

cam3: /dev/video33 — 稳定 29.97~29.99 fps

cam4: /dev/video44 — 稳定 29.97~29.99 fps

· dmesg中每个DPHY应显示 data_rate_mbps 672

· 不应出现 MIPI_CSI2 ERR1 / MIPI_CSI2 ERR2 错误

· 帧率应稳定在 30fps(实测29.97~30.00,正常)

单路 ISP 预览(GStreamer)

RAW链路确认干净后,启动rkaiq 3A server,走ISP路径验证图像质量:

# 如果前面停止了 rkaiq 3A server,这里需要重新启动

/etc/init.d/S40rkaiq_3A start

# ISP 路径预览(逐路验证)

# Camera1:

gst-launch-1.0 v4l2src device=/dev/video55 ! 'video/x-raw,width=1920,height=1080,framerate=30/1' ! waylandsink

# Camera2:

gst-launch-1.0 v4l2src device=/dev/video64 ! 'video/x-raw,width=1920,height=1080,framerate=30/1' ! waylandsink

# Camera3:

gst-launch-1.0 v4l2src device=/dev/video73 ! 'video/x-raw,width=1920,height=1080,framerate=30/1' ! waylandsink

# Camera4:

gst-launch-1.0 v4l2src device=/dev/video82 ! 'video/x-raw,width=1920,height=1080,framerate=30/1' ! waylandsink

# Camera5:

gst-launch-1.0 v4l2src device=/dev/video91 ! 'video/x-raw,width=1920,height=1080,framerate=30/1' ! waylandsink

五路同时预览

五路摄像头同时预览实录

IQ 文件帧率配置

IQ文件路径:/etc/iqfiles/ov5640_default_default.json

如需修改帧率,在IQ文件中调整:

录像存储验证流程

H.265 硬件编码(MPP)

RK3576内置硬件编码器,通过MPP接口直接调用,CPU几乎零负载。

单路录像(1080P30 CBR 6Mbps,录300帧即10秒):

实测编码输出,PSNR稳定在38dB以上,QP 20~21,码率精确锁定6Mbps:

MPP H.265编码实测:CBR 6Mbps, PSNR≈38.5dB, QP 20~21

五路同时录像(输出到U盘/SD卡):

码率参考(1080P30 H.265)

CBR vs VBR 怎么选?

-rc 1 为恒定码率(CBR),带宽可预测,适合嵌入式监控和网络传输;-rc 0 为可变码率(VBR),同码率下画质更好,适合本地存储。五路监控场景推荐CBR,带宽规划更可控。

GStreamer 录像(MP4封装)

写在最后

五路MIPI CSI-2同时工作,本质上考验的是三件事:PLL频率对齐、DPHY时序匹配、驱动与ISP的控制权边界。把这三个问题解决了,RK3576的五路摄像头方案就能稳定落地。

从单路RAW抓流验证链路干净,到ISP预览确认画质,再到五路H.265硬件编码同时录像——整条链路在MYD-LR3576上已跑通,30fps稳定无丢帧,编码PSNR 38dB+。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

一台NE503边缘AI摄像头正在监控一个建筑工地的实时画面。它需要实时统计佩戴头盔和未佩戴头盔的工人数量,而无需将图像帧发送到云端。训练YOLOv8模型来完成这项任务是简单的部分。但要让训练好的模型真正运行在NE503内...

关键字: 边缘AI 摄像头 NE503

摘要:安森美(onsemi)推出的Premier图像传感器模块参考设计(PRISM)平台,是一套预先优化的子系统解决方案,旨在简化数字成像产品的开发流程。PRISM为创新者提供低成本、预调校、已优化的模块化器件,这些器件...

关键字: 图像传感器 FPGA处理器 摄像头

ESP32-CAM 是物联网、无线摄像头系统、智能家居自动化、机器人以及嵌入式视觉项目中最受欢迎的低成本开发板之一。它集强大的 ESP32 微控制器与内置 Wi-Fi、蓝牙和摄像头功能于一体,无论是初学者还是经验丰富的开...

关键字: 物联网 摄像头 智能家居 ESP32-CAM

PantryPal 是一款轻量级的智能食品储物追踪器,可记录杂货清单、估算保质期,并提示哪些食物即将过期,避免被扔进垃圾桶。该应用完全基于 Java 26 标准库构建,通过一个真实且日常的场景——减少家庭食物浪费,展示了...

关键字: 摄像头 USB 树莓派 Java

手势Spotify控制器是一款完全基于Arduino UNO Q运行的手势音乐遥控器,无需云端、视频流或配套应用程序来监控你。抬起手,做出四种手势之一,你的Spotify播放就会相应响应:播放、暂停、下一首、上一首。摄像...

关键字: 边缘人工智能 USB 摄像头 Arduino UNO Q

交通摄像头可生成有用信息,但向云端持续发送视频需要大量带宽,并可能引发隐私问题。

关键字: 摄像头 RK3576 NPU 传感器

整个系统通过摄像头进行数据采集,获取模型,并借助reComputer AI Lab平台实现快速部署,同时在reComputer RK3576边缘计算设备上运行算法。在模型推理阶段,设计并优化了推理流程和跌倒判断逻辑,最终...

关键字: 摄像头 边缘计算 RK3576

GC50B5搭载双转换增益(Dual Conversion Gain, DCG)单帧高动态技术,支持100%全像素相位检测自动对焦(4-Cell PDAF)、2x In-Sensor Zoom、NOMF(Non-Over...

关键字: 图像传感器 折叠机 摄像头

MIPI(移动产业处理器接口):由ARM、诺基亚、ST和TI等公司于2003年成立的联盟制定的一种接口标准。其目的是标准化移动设备内部接口(如摄像头、显示屏、射频/基带接口),从而降低移动设备的设计复杂度,提高设计灵活性...

关键字: 摄像头 显示屏 RV1126B
关闭