Line 6:
Line 6:
MV系列和RAW系列相机是为工业领域的AI应用推出的相机。其使用MIPI CSI-2接口,尤其适合嵌入式运算平台使用。它具备丰富的数据格式和触发特性,极低的延时,极高的带宽和可靠的稳定性。
MV系列和RAW系列相机是为工业领域的AI应用推出的相机。其使用MIPI CSI-2接口,尤其适合嵌入式运算平台使用。它具备丰富的数据格式和触发特性,极低的延时,极高的带宽和可靠的稳定性。
−
本文以Firefly的ROC-RK3588S-PC主板为例,介绍怎样将MV和RAW系列摄像机接入RK3588S/RK3588系统。
+
本文以Firefly的ROC-RK3588S-PC和ROC-RK3566-PC主板为例,介绍怎样将MV和RAW系列摄像机接入RK3566/3K3568和RK3588S/RK3588系统。
我们提供了Linux(以Ubuntu为例)操作系统下的驱动。
我们提供了Linux(以Ubuntu为例)操作系统下的驱动。
Line 50:
Line 50:
|RAW系列
|RAW系列
|RAW-MIPI-AR0234M
|RAW-MIPI-AR0234M
+
|完成
+
|-
+
|RAW系列
+
|RAW-MIPI-SC535M
|完成
|完成
|}
|}
Line 57:
Line 61:
MV系列和RAW系列相机需要使用[[ADP-MV2 Adapter Board Data Sheet/zh|ADP-MV2]]转接板才能连接到ROC-RK35xx-PC主板。
MV系列和RAW系列相机需要使用[[ADP-MV2 Adapter Board Data Sheet/zh|ADP-MV2]]转接板才能连接到ROC-RK35xx-PC主板。
−
==== MV相机与ADP-MV2的连接 ====
+
==== 新版本ADP-MV2的连接 ====
+
+
===== MV相机与ADP-MV2的连接 =====
二者使用0.5mm间距*30P的FFC异面线连接,注意接触面向外。
二者使用0.5mm间距*30P的FFC异面线连接,注意接触面向外。
{| class="wikitable"
{| class="wikitable"
Line 63:
Line 69:
!BOTTOM
!BOTTOM
|-
|-
−
|[[File:ADP-MV2-MV-MIPI 01.jpg|alt=|center|thumb|600x600px|ADP-MV2 to MV-MIPI-X]]
+
|[[File:ADP-MV2-V2 to MV-MIPI-X.jpg|alt=|center|thumb|600x600px|ADP-MV2 to MV-MIPI-X]]
−
|[[File:ADP-MV2-MV-MIPI 02.jpg|alt=|center|thumb|600x600px|ADP-MV2 to MV-MIPI-X]]
+
|[[File:ADP-MV2-V2 to MV-MIPI-X No.2.jpg|alt=|center|thumb|600x600px|ADP-MV2 to MV-MIPI-X]]
|}<br />
|}<br />
−
==== RAW-MIPI-SC132M与ADP-MV2的连接 ====
+
===== RAW-MIPI-SC132M与ADP-MV2的连接 =====
二者使用1.0mm间距*15P的FFC异面线连接,注意接触面向外。
二者使用1.0mm间距*15P的FFC异面线连接,注意接触面向外。
{| class="wikitable"
{| class="wikitable"
Line 73:
Line 79:
!BOTTOM
!BOTTOM
|-
|-
−
|[[File:ADP-MV2-RAW-MIPI 02.jpg|alt=|center|thumb|600x600px|ADP-MV2 to RAW-MIPI-SC132M]]
+
|[[File:ADP-MV2 to RAW-MIPI-SC132M.jpg|alt=|center|thumb|600x600px|ADP-MV2 to RAW-MIPI-SC132M ]]
−
|[[File:ADP-MV2-RAW-MIPI 01.jpg|alt=|center|thumb|600x600px|ADP-MV2 to RAW-MIPI-SC132M]]
+
|[[File:ADP-MV2 to RAW-MIPI-SC132M No.2.jpg|alt=ADP-MV2 to RAW-MIPI-SC132M|center|thumb|600x600px|ADP-MV2 to RAW-MIPI-SC132M]]
+
|}
+
===== 其他RAW系列摄像头与ADP-MV2的连接 =====
+
二者使用0.5mm间距*22P的FFC异面线连接,注意接触面向外。
+
{| class="wikitable"
+
!TOP
+
!BOTTOM
+
|-
+
|[[File:ADP-MV2 to RAW series camera.jpg|alt=|center|thumb|600x600px|ADP-MV2 to RAW series camera]]
+
|[[File:ADP-MV2 to RAW series camera No.2.jpg|alt=ADP-MV2 to RAW series camera No.2|center|thumb|600x600px|ADP-MV2 to RAW series camera]]
|}
|}
−
==== 其他RAW系列摄像头与ADP-MV2的连接 ====
−
二者使用15转22P的FFC同面线连接,注意接触面向外。
−
[[File:RAW-MIPI-AR0234-ADP-MV2.jpg|center|thumb|800x800px|ADP-MV2 to RAW series camera]]
<br />
<br />
−
==== ADP-MV2与主板的连接 ====
+
===== ADP-MV2与主板的连接 =====
−
二者使用0.5mm间距*30P的FFC同面线连接,注意接触面向内。
+
二者使用0.5mm间距*30P的FFC同面线连接,注意接触面方向,ADP-MV2上向外,RK board上向内。
−
[[File:RK-ADP-MV2-MV-MIPI 01.jpg|center|thumb|800x800px|RK to ADP-MV2 and MV cam]]
+
[[File:RK-ADP-MV2-V2-RAW-MIPI 02.jpg|alt=|center|thumb|800x800px|RK to ADP-MV2 and MV cam]]
<br />
<br />
Line 89:
Line 101:
<br />
<br />
=== github库介绍 ===
=== github库介绍 ===
+
https://github.com/veyeimaging/rk35xx_veye_bsp
+
https://github.com/veyeimaging/rk35xx_firefly
https://github.com/veyeimaging/rk35xx_firefly
Line 99:
Line 113:
此外,在[https://github.com/veyeimaging/rk356x_firefly/releases releases]中,提供了编译好的linux系统镜像。
此外,在[https://github.com/veyeimaging/rk356x_firefly/releases releases]中,提供了编译好的linux系统镜像。
=== 更新ubuntu系统 ===
=== 更新ubuntu系统 ===
−
对于ROC-RK3588S-PC,我们提供了发布系统的烧写镜像。
+
对于ROC-RK3566-PC和ROC-RK3588S-PC,我们提供了发布系统的烧写镜像。
下载[https://github.com/veyeimaging/rk356x_firefly/releases/ https://github.com/veyeimaging/rk35xx_firefly/releases/]中最新的支持MV和RAW系列的镜像。
下载[https://github.com/veyeimaging/rk356x_firefly/releases/ https://github.com/veyeimaging/rk35xx_firefly/releases/]中最新的支持MV和RAW系列的镜像。
−
参考Firefly[https://wiki.t-firefly.com/zh_CN/ROC-RK3588S-PC/upgrade_bootmode.html 文档],烧写系统。
+
参考Firefly文档([https://wiki.t-firefly.com/en/ROC-RK3588S-PC/upgrade_bootmode.html ROC-RK3588S-PC] [https://wiki.t-firefly.com/en/ROC-RK3566-PC/03-upgrade_firmware.html ROC-RK3566-PC]),烧写系统。
=== 系统状态检测 ===
=== 系统状态检测 ===
Line 117:
Line 131:
<code>mvcam 7-003b: firmware version: 0x1290133</code>
<code>mvcam 7-003b: firmware version: 0x1290133</code>
−
可以看到识别到当前的摄像机模组的型号,版本号。摄像机挂载在i2c-7, i2c地址是0x3b。
+
可以看到识别到当前的摄像机模组的型号,版本号。
+
+
在ROC-RK3588S-PC上,摄像机挂载在i2c-7, i2c地址是0x3b。
+
+
在ROC-RK3566-PC上,摄像机挂载在i2c-4。
*执行如下命令检查video0设备节点
*执行如下命令检查video0设备节点
Line 128:
Line 146:
正确识别摄像头之后,相机被识别为/dev/video0。
正确识别摄像头之后,相机被识别为/dev/video0。
+
====状态检测并配置环境变量====
+
在[https://github.com/veyeimaging/rk35xx_veye_bsp/tree/main/mv_tools_rockchip/i2c_tools 这里],我们提供了一个<code>mv_probe.sh</code>脚本,用于自动检测识别到的相机并将相机默认的型号、宽、高、帧率等信息配置到环境变量中。
+
+
使用方法是:
+
+
<code>source ./mv_probe.sh</code>
+
+
一个典型的输出如下:
+
<code>$ source ./mv_probe.sh</code>
+
+
<code>The mvcam driver is loaded on i2c-10, but the camera is not detected!</code>
+
+
<code>Found veye_mvcam camera on i2c-11.</code>
+
+
<code>Setenv CAMERAMODEL = RAW-MIPI-SC535M</code>
+
+
<code>Setenv FPS = 49</code>
+
+
<code>Setenv WIDTH = 2432</code>
+
+
<code>Setenv HEIGHT = 2048</code>
+
+
可以通过 <code>echo $CAMERAMODEL</code>来验证环境变量的输出结果。注意,此环境变量只对当前会话有效。
+
+
注意:此脚本需要mvcam的驱动版本大于等于1.1.06才可以支持。
+
+
如你使用的驱动版本小于1.1.06,或者你希望使用不同于当前值的宽、高、帧率。请参考相机模组的手册,手动配置如下<code>WIDTH HEIGHT FPS</code>环境变量,否则可能导致后面的程序运行不正常。如:
+
+
<code>export WIDTH=2432</code>
+
+
<code>export HEIGHT=2048</code>
+
+
<code>export FPS=50</code>
+
====配置命令行全局变量 ====
+
根据主板型号,配置I2C_BUS全局变量。
+
+
* ROC-RK3588S-PC
+
+
<code>export I2C_BUS=7</code>
+
+
* ROC-RK3566-PC
+
+
<code>export I2C_BUS=4</code>
==== 使用media-ctl查看拓扑结构 ====
==== 使用media-ctl查看拓扑结构 ====
使用media-ctl指令,可以清晰的展现出当前的拓扑结构。
使用media-ctl指令,可以清晰的展现出当前的拓扑结构。
Line 156:
Line 217:
可以看到:
可以看到:
−
* 该Entity完整的名称是: <code>m00_b_mvcam 7-003b</code>。
+
* 该Entity完整的名称是: <code>m00_b_mvcam 7-003b</code>。(在ROC-RK3566-PC上该Entity名称是<code>m00_b_mvcam 4-003b</code>)
* 它是一个 V4L2 subdev (Sub-Device) Sensor。
* 它是一个 V4L2 subdev (Sub-Device) Sensor。
* 它对应的节点是 <code>/dev/v4l-subdev2</code> ,应用程序(如<code>v4l2-ctl</code>)可以打开它,并进行配置。
* 它对应的节点是 <code>/dev/v4l-subdev2</code> ,应用程序(如<code>v4l2-ctl</code>)可以打开它,并进行配置。
Line 231:
Line 292:
Y8文件可以用这个播放器: [https://yuv-player-deluxe.software.informer.com/2.6/ YUV Displayer Deluxe]。
Y8文件可以用这个播放器: [https://yuv-player-deluxe.software.informer.com/2.6/ YUV Displayer Deluxe]。
=== 应用范例 ===
=== 应用范例 ===
−
====配置命令行全局变量 ====
−
为了后面描述方便,此处根据sensor尺寸,配置全局变量。
−
−
*MV-MIPI-IMX178M
−
−
<code>export WIDTH=3088</code>
−
−
<code>export HEIGHT=2064</code>
−
−
<code>export FPS=22</code>
−
−
*MV-MIPI-SC130M
−
−
<code>export WIDTH=1280</code>
−
−
<code>export HEIGHT=1024</code>
−
−
<code>export FPS=108</code>
−
−
*MV-MIPI-IMX296M
−
−
<code>export WIDTH=1456</code>
−
−
<code>export HEIGHT=1088</code>
−
−
<code>export FPS=60</code>
−
−
*MV-MIPI-IMX287M
−
−
<code>export WIDTH=704</code>
−
−
<code>export HEIGHT=544</code>
−
−
<code>export FPS=319</code>
−
−
*MV-MIPI-IMX265M
−
−
<code>export WIDTH=2048</code>
−
−
<code>export HEIGHT=1544</code>
−
−
<code>export FPS=45</code>
−
−
*MV-MIPI-IMX264M
−
−
<code>export WIDTH=2432</code>
−
−
<code>export HEIGHT=2056</code>
−
−
<code>export FPS=28</code>
−
−
*RAW-MIPI-SC132M
−
−
<code>export WIDTH=1080</code>
−
−
<code>export HEIGHT=1280</code>
−
−
<code>export FPS=120</code>
−
−
*RAW-MIPI-IMX462M
−
−
<code>export WIDTH=1920</code>
−
−
<code>export HEIGHT=1088</code>
−
−
<code>export FPS=60</code>
−
−
*RAW-MIPI-AR0234M
−
−
<code>export WIDTH=1920</code>
−
−
<code>export HEIGHT=1200</code>
−
−
<code>export FPS=60</code>
==== 使用v4l2-ctl配置参数 ====
==== 使用v4l2-ctl配置参数 ====
<code>$ v4l2-ctl -d /dev/v4l-subdev2 -L</code>
<code>$ v4l2-ctl -d /dev/v4l-subdev2 -L</code>
Line 365:
Line 352:
可以通过下面的命令,配置摄像机的数据格式,分辨率,帧率。
可以通过下面的命令,配置摄像机的数据格式,分辨率,帧率。
−
<code>media-ctl -d /dev/media0 --set-v4l2 '"m00_b_mvcam 7-003b":0[fmt:Y8_1X8/'"$WIDTH"'x'"$HEIGHT"'@1/'"$FPS"']'</code>
+
<code>media-ctl -d /dev/media0 --set-v4l2 '"m00_b_mvcam '"$I2C_BUS"'-003b":0[fmt:Y8_1X8/'"$WIDTH"'x'"$HEIGHT"'@1/'"$FPS"']'</code>
其中:<code>"m00_b_mvcam 7-003b"</code>指的相机的<code>entity</code>完整名称,<code>Y8_1X8</code>为<code>mbus-code</code>,<code>'"$WIDTH"'x'"$HEIGHT"'</code>指明了分辨率,<code>1/'"$FPS"'</code>指明了帧率。
其中:<code>"m00_b_mvcam 7-003b"</code>指的相机的<code>entity</code>完整名称,<code>Y8_1X8</code>为<code>mbus-code</code>,<code>'"$WIDTH"'x'"$HEIGHT"'</code>指明了分辨率,<code>1/'"$FPS"'</code>指明了帧率。
Line 384:
Line 371:
<code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl roi_y=0</code>
<code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl roi_y=0</code>
−
<code>media-ctl -d /dev/media0 --set-v4l2 '"m00_b_mvcam 7-003b":0[fmt:Y8_1X8/'"$WIDTH"'x'"$HEIGHT"'@1/'"$FPS"']'</code>
+
<code>media-ctl -d /dev/media0 --set-v4l2 '"m00_b_mvcam '"$I2C_BUS"'-003b":0[fmt:Y8_1X8/'"$WIDTH"'x'"$HEIGHT"'@1/'"$FPS"']'</code>
===== 帧率统计 =====
===== 帧率统计 =====
−
<code>v4l2-ctl --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=/dev/null</code>
+
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY --stream-mmap --stream-count=-1 --stream-to=/dev/null</code>
+
+
或者
+
+
<code>./yavta -c-1 --skip 0 -f Y8 -s ${WIDTH}x${HEIGHT} /dev/video0</code>
===== 保存图片到文件 =====
===== 保存图片到文件 =====
Line 393:
Line 384:
* raw8格式
* raw8格式
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-$WIDTHx$HEIGHT.raw</code>
+
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-${WIDTH}x${HEIGHT}.raw</code>
* raw10格式
* raw10格式
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat='Y10 ' --stream-mmap --stream-count=1 --stream-to=y10-$WIDTHx$HEIGHT.raw</code>
+
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat='Y10 ' --stream-mmap --stream-count=1 --stream-to=y10-${WIDTH}x${HEIGHT}.raw</code>
* raw12格式
* raw12格式
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=$WIDTH,height=$HEIGHT,pixelformat='Y12 ' --stream-mmap --stream-count=1 --stream-to=y12-$WIDTHx$HEIGHT.raw</code>
+
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=$WIDTH,height=$HEIGHT,pixelformat='Y12 ' --stream-mmap --stream-count=1 --stream-to=y12-${WIDTH}x${HEIGHT}.raw</code>
图片格式请参考前面章节的描述。
图片格式请参考前面章节的描述。
Line 421:
Line 412:
详见github上的[https://github.com/veyeimaging/rk356x_firefly/tree/main/linux/samples samples]目录。
详见github上的[https://github.com/veyeimaging/rk356x_firefly/tree/main/linux/samples samples]目录。
−
<code>python ./v4l2dev_2_opencv_show_grey.py --width 1456 --height 1088 --fps 60</code>
+
<code>python3 ./v4l2dev_2_opencv_show_grey.py --width 1456 --height 1088 --fps 60 --i2c 7</code>
+
+
注意需要使用合适的参数来执行上述程序。
===== gstreamer应用范例 =====
===== gstreamer应用范例 =====
−
为了方便进行安装和调试,MV系列相机提供了UYVY模式。UYVY模式支持的最大宽度为2880,使用如下命令可以进行实时预览。
+
我们提供了几个gstreamer例程,实现了预览功能。详见github上的[https://github.com/veyeimaging/rk35xx_veye_bsp/tree/main/samples samples]目录。
−
−
'''注''':为了提高最高帧率和带宽,部分模组升级固件后不再提供UYVY格式。具体请通过脚本的fmtcap指令读取寄存器确认。
−
−
注意RAW系列不支持UYVY格式。
−
−
我们提供了几个gstreamer例程,实现了预览功能。详见github上的[https://github.com/veyeimaging/rk356x_firefly/tree/main/linux/samples samples]目录。
==== 触发模式 ====
==== 触发模式 ====
Line 438:
Line 425:
<code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl roi_y=0</code>
<code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl roi_y=0</code>
−
<code>media-ctl -d /dev/media0 --set-v4l2 '"m00_b_mvcam 7-003b":0[fmt:Y8_1X8/'"$WIDTH"'x'"$HEIGHT"'@1/'"$FPS"']'</code>
+
<code>media-ctl -d /dev/media0 --set-v4l2 '"m00_b_mvcam '"$I2C_BUS"'-003b":0[fmt:Y8_1X8/'"$WIDTH"'x'"$HEIGHT"'@1/'"$FPS"']'</code>
=====软触发模式=====
=====软触发模式=====
======设置模式======
======设置模式======
Line 445:
Line 432:
<code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl <small>trigger_src=0</small></code>
<code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl <small>trigger_src=0</small></code>
======开始取图======
======开始取图======
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-$WIDTHx$HEIGHT.raw</code>
+
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-${WIDTH}x${HEIGHT}.raw</code>
======进行软触发操作======
======进行软触发操作======
在其他的shell终端,可以多次执行下面命令进行多次触发。
在其他的shell终端,可以多次执行下面命令进行多次触发。
Line 458:
Line 445:
可以使用[[Mv mipi i2c.sh user guide|mv_mipi_i2c.sh]]脚本进行丰富的触发参数设置。
可以使用[[Mv mipi i2c.sh user guide|mv_mipi_i2c.sh]]脚本进行丰富的触发参数设置。
======开始取图======
======开始取图======
−
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-$WIDTHx$HEIGHT.raw</code>
+
<code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=$WIDTH,height=$HEIGHT,pixelformat=GREY --stream-mmap --stream-count=1 --stream-to=y8-${WIDTH}x${HEIGHT}.raw</code>
======进行硬触发操作======
======进行硬触发操作======
将合适的触发信号连接到摄像机的trigger引脚并进行触发。
将合适的触发信号连接到摄像机的trigger引脚并进行触发。
Line 465:
Line 452:
[[mv_mipi_i2c.sh user guide]]
[[mv_mipi_i2c.sh user guide]]
−
=== 问题反馈 ===
−
我们致力于为嵌入式平台的图像应用提供更丰富的可能性。因此,我们在嵌入式平台的软件基于开源的原则而进行。
−
−
如对我们现有软件有任何的问题、建议,欢迎提交到[http://forum.veye.cc/ 论坛:],或者给我们的技术人员发邮件xumm#csoneplus.com。
=== 参考资料 ===
=== 参考资料 ===
Line 475:
Line 458:
https://wiki.t-firefly.com/zh_CN/ROC-RK3588S-PC/
https://wiki.t-firefly.com/zh_CN/ROC-RK3588S-PC/
=== 本文修改记录 ===
=== 本文修改记录 ===
+
+
* 2025-03-23
+
+
增加mv_probe.sh的说明。
+
+
* 2024-07-09
+
+
支持RAW-MIPI-SC535M。
+
+
* 2024-04-17
+
+
支持 RK3566。
+
+
* 2024-03-10
+
+
增加新版本ADP-MV2的硬件连接的图片和说明。
*2023-08-30
*2023-08-30