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 42: |
Line 42: |
| |RAW系列 | | |RAW系列 |
| |RAW-MIPI-SC132M | | |RAW-MIPI-SC132M |
| + | |完成 |
| + | |- |
| + | |RAW系列 |
| + | |RAW-MIPI-IMX462M |
| + | |完成 |
| + | |- |
| + | |RAW系列 |
| + | |RAW-MIPI-AR0234M |
| |完成 | | |完成 |
| |} | | |} |
| + | 此外,在ubuntu系统下,已经调通V-by-One HS连接模式的驱动。 |
| + | |
| === 硬件准备及安装 === | | === 硬件准备及安装 === |
| 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异面线连接,注意接触面向外。 |
| + | {| class="wikitable" |
| + | !TOP |
| + | !BOTTOM |
| + | |- |
| + | |[[File:ADP-MV2-V2 to MV-MIPI-X.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 /> |
| + | |
| + | ===== RAW-MIPI-SC132M与ADP-MV2的连接 ===== |
| + | 二者使用1.0mm间距*15P的FFC异面线连接,注意接触面向外。 |
| + | {| class="wikitable" |
| + | !TOP |
| + | !BOTTOM |
| + | |- |
| + | |[[File:ADP-MV2 to RAW-MIPI-SC132M.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]] |
| + | |} |
| + | <br /> |
| + | ===== ADP-MV2与主板的连接 ===== |
| + | 二者使用0.5mm间距*30P的FFC同面线连接,注意接触面方向,ADP-MV2上向外,RK board上向内。 |
| + | [[File:RK-ADP-MV2-V2-RAW-MIPI 02.jpg|alt=|center|thumb|800x800px|RK to ADP-MV2 and MV cam]] |
| + | <br /> |
| + | |
| + | ==== 老版本ADP-MV2的连接 ==== |
| + | |
| + | ===== MV相机与ADP-MV2的连接 ===== |
| 二者使用0.5mm间距*30P的FFC异面线连接,注意接触面向外。 | | 二者使用0.5mm间距*30P的FFC异面线连接,注意接触面向外。 |
| {| class="wikitable" | | {| class="wikitable" |
Line 57: |
Line 105: |
| |}<br /> | | |}<br /> |
| | | |
− | ==== RAW相机与ADP-MV2的连接 ==== | + | ===== RAW-MIPI-SC132M与ADP-MV2的连接 ===== |
− | 二者使用0.5mm间距*30P的FFC异面线连接,注意接触面向外。
| + | 二者使用1.0mm间距*15P的FFC异面线连接,注意接触面向外。 |
| {| class="wikitable" | | {| class="wikitable" |
| !TOP | | !TOP |
| !BOTTOM | | !BOTTOM |
| |- | | |- |
− | |[[File:ADP-MV2-RAW-MIPI 02.jpg|alt=|center|thumb|600x600px|ADP-MV2 to RAW-MIPI-X]] | + | |[[File:ADP-MV2-RAW-MIPI 02.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-X]] | + | |[[File:ADP-MV2-RAW-MIPI 01.jpg|alt=|center|thumb|600x600px|ADP-MV2 to RAW-MIPI-SC132M]] |
− | |}<br /> | + | |} |
− | ==== ADP-MV2与主板的连接 ==== | + | ===== 其他RAW系列摄像头与ADP-MV2的连接 ===== |
| + | 二者使用15转22P的FFC同面线连接,注意接触面向外。 |
| + | [[File:RAW-MIPI-AR0234-ADP-MV2.jpg|center|thumb|800x800px|ADP-MV2 to RAW series camera]] |
| + | <br /> |
| + | ===== ADP-MV2与主板的连接 ===== |
| 二者使用0.5mm间距*30P的FFC同面线连接,注意接触面向内。 | | 二者使用0.5mm间距*30P的FFC同面线连接,注意接触面向内。 |
| [[File:RK-ADP-MV2-MV-MIPI 01.jpg|center|thumb|800x800px|RK to ADP-MV2 and MV cam]] | | [[File:RK-ADP-MV2-MV-MIPI 01.jpg|center|thumb|800x800px|RK to ADP-MV2 and MV cam]] |
| <br /> | | <br /> |
| | | |
| + | ==== V-by-One-HS-KIT摄像机连接示意图 ==== |
| + | [[File:VBYONE connection with rk3588.jpg|center|thumb|800x800px|VBYONE connection with rk3588]] |
| + | <br /> |
| === github库介绍 === | | === github库介绍 === |
| https://github.com/veyeimaging/rk35xx_firefly | | https://github.com/veyeimaging/rk35xx_firefly |
Line 82: |
Line 137: |
| 此外,在[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 100: |
Line 155: |
| <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 139: |
Line 198: |
| 可以看到: | | 可以看到: |
| | | |
− | * 该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 215: |
Line 274: |
| === 应用范例 === | | === 应用范例 === |
| ====配置命令行全局变量 ==== | | ====配置命令行全局变量 ==== |
| + | 根据主板型号,配置I2C_BUS全局变量。 |
| + | |
| + | * ROC-RK3588S-PC |
| + | |
| + | <code>export I2C_BUS=7</code> |
| + | |
| + | * ROC-RK3566-PC |
| + | |
| + | <code>export I2C_BUS=4</code> |
| + | |
| 为了后面描述方便,此处根据sensor尺寸,配置全局变量。 | | 为了后面描述方便,此处根据sensor尺寸,配置全局变量。 |
| | | |
Line 267: |
Line 336: |
| *RAW-MIPI-SC132M | | *RAW-MIPI-SC132M |
| | | |
− | <code>export WIDTH=1080</code> | + | <code>export WIDTH=1024</code> |
| | | |
| <code>export HEIGHT=1280</code> | | <code>export HEIGHT=1280</code> |
Line 273: |
Line 342: |
| <code>export FPS=120</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 333: |
Line 417: |
| 可以通过下面的命令,配置摄像机的数据格式,分辨率,帧率。 | | 可以通过下面的命令,配置摄像机的数据格式,分辨率,帧率。 |
| | | |
− | <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 352: |
Line 436: |
| <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 361: |
Line 449: |
| * 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 383: |
Line 471: |
| | | |
| <code>./yavta -c1 -Fy8-${WIDTH}x${HEIGHT}.raw --skip 0 -f Y8 -s ${WIDTH}x${HEIGHT} /dev/video0</code> | | <code>./yavta -c1 -Fy8-${WIDTH}x${HEIGHT}.raw --skip 0 -f Y8 -s ${WIDTH}x${HEIGHT} /dev/video0</code> |
| + | |
| + | ===== 将相机数据导入OpenCV的范例 ===== |
| + | <code>sudo apt install python3-opencv</code> |
| + | |
| + | 详见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 --i2c 7</code> |
| | | |
| ===== gstreamer应用范例 ===== | | ===== gstreamer应用范例 ===== |
| 为了方便进行安装和调试,MV系列相机提供了UYVY模式。UYVY模式支持的最大宽度为2880,使用如下命令可以进行实时预览。 | | 为了方便进行安装和调试,MV系列相机提供了UYVY模式。UYVY模式支持的最大宽度为2880,使用如下命令可以进行实时预览。 |
| + | |
| + | '''注''':为了提高最高帧率和带宽,部分模组升级固件后不再提供UYVY格式。具体请通过脚本的fmtcap指令读取寄存器确认。 |
| | | |
| 注意RAW系列不支持UYVY格式。 | | 注意RAW系列不支持UYVY格式。 |
| | | |
− | 我们提供了几个gstreamer例程,实现了预览功能。详见github上的[https://github.com/veyeimaging/rk356x_firefly/tree/main/linux/examples examples]目录。 | + | 我们提供了几个gstreamer例程,实现了预览功能。详见github上的[https://github.com/veyeimaging/rk356x_firefly/tree/main/linux/samples samples]目录。 |
| ==== 触发模式 ==== | | ==== 触发模式 ==== |
| | | |
Line 397: |
Line 494: |
| <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 404: |
Line 501: |
| <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 417: |
Line 514: |
| 可以使用[[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 434: |
Line 531: |
| https://wiki.t-firefly.com/zh_CN/ROC-RK3588S-PC/ | | https://wiki.t-firefly.com/zh_CN/ROC-RK3588S-PC/ |
| === 本文修改记录 === | | === 本文修改记录 === |
| + | |
| + | * 2024-04-17 |
| + | |
| + | 支持 RK3566. |
| + | |
| + | * 2024-03-10 |
| + | |
| + | 增加新版本ADP-MV2的硬件连接的图片和说明。 |
| + | |
| + | *2023-08-30 |
| + | |
| + | 增加对RAW-MIPI-IMX462M和RAW-MIPI-AR0234M的支持。 |
| + | |
| + | * 2023-07-31 |
| + | |
| + | 在ubuntu系统下,已经调通V-by-One连接的驱动。 |
| | | |
| * 2023-04-12 | | * 2023-04-12 |
| | | |
| 第一个版本。 | | 第一个版本。 |