|
|
| (6 intermediate revisions by 2 users not shown) |
| Line 5: |
Line 5: |
| | MV系列和RAW系列相机是为工业领域的AI应用推出的相机。其使用MIPI CSI-2接口,尤其适合嵌入式运算平台使用。它具备丰富的数据格式和触发特性,极低的延时,极高的带宽和可靠的稳定性。 | | MV系列和RAW系列相机是为工业领域的AI应用推出的相机。其使用MIPI CSI-2接口,尤其适合嵌入式运算平台使用。它具备丰富的数据格式和触发特性,极低的延时,极高的带宽和可靠的稳定性。 |
| | | | |
| − | 本文以Radxa的ZERO 3W主板为例,介绍怎样将MV和RAW系列摄像机接入RK3566/3K3568系统。 | + | 本文以Radxa的ZERO 3W/3E主板为例,介绍怎样将MV和RAW系列摄像机接入RK3566/3K3568系统。 |
| | | | |
| | 我们提供了Linux(以Radxa OS Debain为例)操作系统下的驱动。 | | 我们提供了Linux(以Radxa OS Debain为例)操作系统下的驱动。 |
| Line 55: |
Line 55: |
| | |} | | |} |
| | ===硬件准备及安装=== | | ===硬件准备及安装=== |
| − | ====MV相机与Radxa ZERO 3W的连接==== | + | ====MV相机与Radxa ZERO 3W/3E的连接==== |
| − | MV系列相机需要使用[[ADP-MV1 Adapter Board Data Sheet/zh|ADP-MV1]]转接板才能连接到Radxa ZERO 3W主板。 | + | MV系列相机需要使用[[ADP-MV1 Adapter Board Data Sheet/zh|ADP-MV1]]转接板才能连接到Radxa ZERO 3W/3E主板。 |
| | | | |
| − | ADP-MV1和Zero 3W之间使用15转22P的FFC同面线连接,注意接触面向外。 | + | ADP-MV1和Zero 3W/3E之间使用15转22P的FFC同面线连接,注意接触面向外。 |
| | {| class="wikitable" | | {| class="wikitable" |
| | !TOP | | !TOP |
| | !BOTTOM | | !BOTTOM |
| | |- | | |- |
| − | |[[File:Radxa Zero 3W connect to MV camera.jpg|alt=|center|thumb|600x600px|Radxa Zero 3W connect to MV camera]] | + | |[[File:Radxa Zero 3W connect to MV camera.jpg|alt=|center|thumb|600x600px|Radxa Zero 3W/3E connect to MV camera]] |
| − | |[[File:Radxa Zero 3W connect to MV camera 2.jpg|alt=|center|thumb|600x600px|Radxa Zero 3W connect to MV camera 2]] | + | |[[File:Radxa Zero 3W connect to MV camera 2.jpg|alt=|center|thumb|600x600px|Radxa Zero 3W/3E connect to MV camera 2]] |
| | |}<br /> | | |}<br /> |
| − | ====RAW-MIPI-SC132M与Radxa ZERO 3W的连接==== | + | ====RAW-MIPI-SC132M与Radxa ZERO 3W/3E的连接==== |
| | 二者使用15转22P的FFC同面线连接,注意接触面向外。 | | 二者使用15转22P的FFC同面线连接,注意接触面向外。 |
| | {| class="wikitable" | | {| class="wikitable" |
| Line 72: |
Line 72: |
| | !BOTTOM | | !BOTTOM |
| | |- | | |- |
| − | |[[File:Radxa Zero 3W connect to RAW-MIPI-SC132M.jpg|alt=|center|thumb|600x600px|Radxa Zero 3W connect to RAW-MIPI-SC132M]] | + | |[[File:Radxa Zero 3W connect to RAW-MIPI-SC132M.jpg|alt=|center|thumb|600x600px|Radxa Zero 3W/3E connect to RAW-MIPI-SC132M]] |
| − | |[[File:Radxa Zero 3W connect to RAW-MIPI-SC132M 2.jpg|alt=|center|thumb|600x600px|Radxa Zero 3W connect to RAW-MIPI-SC132M 2]] | + | |[[File:Radxa Zero 3W connect to RAW-MIPI-SC132M 2.jpg|alt=|center|thumb|600x600px|Radxa Zero 3W/3E connect to RAW-MIPI-SC132M 2]] |
| | |} | | |} |
| − | ====其他RAW系列摄像头与Radxa ZERO 3W的连接==== | + | ====其他RAW系列摄像头与Radxa ZERO 3W/3E的连接==== |
| | 二者使用0.5mm间距*22P的FFC异面线连接,注意接触面向外。 | | 二者使用0.5mm间距*22P的FFC异面线连接,注意接触面向外。 |
| | {| class="wikitable" | | {| class="wikitable" |
| Line 81: |
Line 81: |
| | !BOTTOM | | !BOTTOM |
| | |- | | |- |
| − | |[[File:Radxa Zero 3W connect to RAW series camera.jpg|alt=|center|thumb|600x600px|Radxa Zero 3W connect to RAW series camera]] | + | |[[File:Radxa Zero 3W connect to RAW series camera.jpg|alt=|center|thumb|600x600px|Radxa Zero 3W/3E connect to RAW series camera]] |
| − | |[[File:Radxa Zero 3W connect to RAW series camera 2.jpg|alt=ADP-MV2 to RAW series camera No.2|center|thumb|600x600px|Radxa Zero 3W connect to RAW series camera 2]] | + | |[[File:Radxa Zero 3W connect to RAW series camera 2.jpg|alt=ADP-MV2 to RAW series camera No.2|center|thumb|600x600px|Radxa Zero 3W/3E connect to RAW series camera 2]] |
| | |} | | |} |
| | ===github库介绍=== | | ===github库介绍=== |
| Line 96: |
Line 96: |
| | | | |
| | 此外,在[https://github.com/veyeimaging/rk35xx_radxa/releases releases]中,提供了编译好的linux系统镜像。 | | 此外,在[https://github.com/veyeimaging/rk35xx_radxa/releases releases]中,提供了编译好的linux系统镜像。 |
| | + | |
| | + | 国内用户可以访问gitee仓库: |
| | + | |
| | + | https://gitee.com/veyeimaging/rk35xx_veye_bsp |
| | + | |
| | + | https://gitee.com/veyeimaging/rk35xx_radxa |
| | + | |
| | + | 国内用户可通过百度云下载:https://pan.baidu.com/s/1LdK0n_uCx1yGej4PB8-bxg<nowiki/>。 |
| | + | |
| | ===更新主板的Radxa Debain系统=== | | ===更新主板的Radxa Debain系统=== |
| | ====概述==== | | ====概述==== |
| Line 106: |
Line 115: |
| | 在RK35xx板子上,执行: | | 在RK35xx板子上,执行: |
| | | | |
| − | 下载[https://github.com/veyeimaging/rk356x_radxa/releases/ https://github.com/veyeimaging/rk35xx_radxa/releases/]中最新的rk356x_radxa_zero3w.tar.gz。 | + | 下载[https://github.com/veyeimaging/rk356x_radxa/releases/ https://github.com/veyeimaging/rk35xx_radxa/releases/]中最新的rk356x_radxa_zero3w.tar.gz或rk356x_radxa_zero3e.tar.gz。 |
| | | | |
| | <code>tar -xavf rk356x_radxa_zero3w.tar.gz</code> | | <code>tar -xavf rk356x_radxa_zero3w.tar.gz</code> |
| Line 133: |
Line 142: |
| | 可以看到识别到当前的摄像机模组的型号,版本号。 | | 可以看到识别到当前的摄像机模组的型号,版本号。 |
| | | | |
| − | 正确识别摄像头之后,MIPI-CSI2接口的摄像头识别为/dev/video0。对于Radxa zero 3W,相机挂载在i2c-2。 | + | 正确识别摄像头之后,MIPI-CSI2接口的摄像头识别为/dev/video0。对于Radxa zero 3W/3E,相机挂载在i2c-2。 |
| | | | |
| | *执行如下命令检查video0设备节点 | | *执行如下命令检查video0设备节点 |
| Line 144: |
Line 153: |
| | | | |
| | 正确识别摄像头之后,相机被识别为/dev/video0。 | | 正确识别摄像头之后,相机被识别为/dev/video0。 |
| − | ====使用media-ctl查看拓扑结构====
| |
| − | 使用media-ctl指令,可以清晰的展现出当前的拓扑结构。
| |
| − |
| |
| − | <code>media-ctl -p -d /dev/media0</code>
| |
| − | =====链接关系=====
| |
| − | mv camera->rockchip-csi2-dphy0->rockchip-mipi-csi2->stream_cif_mipi_id0 - - ->DDR(/dev/video0)
| |
| − |
| |
| − | 应用程序可以通过/dev/video0节点获取图像。
| |
| − | =====mv camera entity信息=====
| |
| − | 以MV-MIPI-IMX296M为例:
| |
| − |
| |
| − | <code>- entity 63: m00_b_mvcam 2-003b (1 pad, 1 link)</code>
| |
| − |
| |
| − | <code> type V4L2 subdev subtype Sensor flags 0</code>
| |
| − |
| |
| − | <code> device node name /dev/v4l-subdev2</code>
| |
| | | | |
| − | <code> pad0: Source</code>
| + | ===相机应用开发指南=== |
| − | | + | [[MV Camera Application Development Guide on Rochchip/zh|应用开发指南]] |
| − | <code> [fmt:Y8_1X8/1456x1088@100/6000 field:none]</code>
| |
| − | | |
| − | <code> -> "rockchip-csi2-dphy0":0 [ENABLED]</code>
| |
| − | | |
| − | 可以看到:
| |
| − | | |
| − | *该Entity完整的名称是: <code>m00_b_mvcam 2-003b</code>。
| |
| − | *它是一个 V4L2 subdev (Sub-Device) Sensor。
| |
| − | *它对应的节点是 <code>/dev/v4l-subdev2</code> ,应用程序(如<code>v4l2-ctl</code>)可以打开它,并进行配置。
| |
| − | *它的输出格式是 [<code>fmt:Y8_1X8/1456x1088@100/6000 field:none</code>] ,其中<code>Y8_1X8</code>是一种mbus-code的简写,下一小节会列出支持的mbus-code。
| |
| − | *当前分辨率是<code>1456x1088。</code>
| |
| − | *当前帧间隔是<code>100/6000</code>,即帧率是60。
| |
| − | | |
| − | 摄像机输出的数据格式,可以通过media-ctl指令修改。
| |
| − | ====相机支持的mbus-code====
| |
| − | MV系列和RAW系列相机具备不同的数据格式能力,具体请参考每个型号的相机的数据手册。
| |
| − | {| class="wikitable"
| |
| − | |+格式对应关系
| |
| − | !Format on datasheet
| |
| − | !mbus-code for media-ctl
| |
| − | !FourCC pixelformat for v4l2-ctl
| |
| − | |-
| |
| − | |RAW8
| |
| − | |Y8_1X8
| |
| − | |GREY
| |
| − | |-
| |
| − | |RAW10
| |
| − | |Y10_1X10
| |
| − | |'Y10 '
| |
| − | |-
| |
| − | |RAW12
| |
| − | |Y12_1X12
| |
| − | |'Y12 '
| |
| − | |-
| |
| − | |UYVY
| |
| − | |UYVY8_2X8
| |
| − | |UYVY
| |
| − | |}
| |
| − | ===raw图片格式说明===
| |
| − | RK35xx的VICAP模块支持两种数据保存格式,Compact和Noncompact RAW。可以通过RKCIF的RKCIF_CMD_SET_CSI_MEMORY_MODE ioctl指令修改模式。默认情况下,输出的是Compact RAW格式。[[File:Compact raw and noncompact raw of rk3588 vicap.png|center|thumb|800x800px|Compact raw and noncompact raw of rk3588 VICAP|link=http://wiki.veye.cc/index.php/File:Compact_raw_and_noncompact_raw_of_rk3588_vicap.png]]<br />
| |
| − | ====具有填充位的图片格式(Noncompact RAW)====
| |
| − | 对于10bit深度、12bit深度的像素数据,总是使用两个字节来存储一个像素。这种存储方式方便软件处理,缺点是空间占用较大。根据数据有效数据保存在高位还是低位,又分为high align和low align两种。
| |
| − | =====Noncompact RAW(high align)=====
| |
| − | 数据保存到高位,用不到的低位以0填充。RK VICAP支持的一种数据格式。
| |
| − | =====Noncompact RAW(low align)=====
| |
| − | 数据保存到低位,用不到的高位以0填充。V4L2标准的'Y10 ' (10-bit Greyscale),'Y12 ' (12-bit Greyscale)格式都是以这种方式存储的。
| |
| − | | |
| − | 后文提到的pixel_layer_convert转换工具,也是将Compact RAW转换为此种存储方式。方便使用图片播放器打开显示。
| |
| − | ====紧密排列的图片格式(Compact RAW)====
| |
| − | 如上图所示,像素和像素之间不会进行空bit位填充。
| |
| − | ====行对齐(line stride)====
| |
| − | 为了方便对图像进行快速操作,系统通常为每行数据提供行对齐的buffer大小。RK3588使用256字节对齐。
| |
| − | | |
| − | line_stride = ALIGN_UP(image_width*bits_per_pixel/8,256)
| |
| − | | |
| − | 比如当图像宽度是1456时:
| |
| − | | |
| − | 8bit depth,line_stride=1536。
| |
| − | | |
| − | 10bit depth,preferred_stride=2048。
| |
| − | | |
| − | 12bit depth,preferred_stride=2304。
| |
| − | ====转换工具====
| |
| − | 我们编写了一个小工具:[https://github.com/veyeimaging/pixel_layer_convert pixel_layer_convert],可以很方便的将紧密排列的图片(Compact RAW)转为具有填充位的图片(Noncompact RAW(low align))。
| |
| − | | |
| − | 比如下面的命令,可以将一个1456宽度的compact raw10 图片转为noncompact raw10。
| |
| − | | |
| − | <code>./pixel_layer_convert -I R10C -i y10-1456x1088_0001.raw -o y10-1456x1088_0001_new.raw -w 1456</code>
| |
| − | ====raw图片播放器==== | |
| − | 推荐使用[https://www.offminor.de/ vooya]作为播放器,支持GREY, 和具有填充位的图片格式。
| |
| − | | |
| − | Y8文件可以用这个播放器: [https://yuv-player-deluxe.software.informer.com/2.6/ YUV Displayer Deluxe]。
| |
| − | ===应用范例===
| |
| − | ====状态检测并配置环境变量====
| |
| − | 在[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全局变量。
| |
| − | | |
| − | *Radxa Zero 3W
| |
| − | | |
| − | <code>export I2C_BUS=2</code>
| |
| − | | |
| − | ====使用v4l2-ctl配置参数====
| |
| − | <code>$ v4l2-ctl -d /dev/v4l-subdev2 -L</code>
| |
| − | | |
| − | <code>User Controls</code>
| |
| − | | |
| − | <code> trigger_mode 0x00981901 (int) : min=0 max=2 step=1 default=0 value=0 flags=volatile, execute-on-write</code>
| |
| − | | |
| − | <code> trigger_src 0x00981902 (int) : min=0 max=1 step=1 default=1 value=1 flags=volatile, execute-on-write</code>
| |
| − | | |
| − | <code> soft_trgone 0x00981903 (button) : flags=write-only, execute-on-write</code>
| |
| − | | |
| − | <code> frame_rate 0x00981904 (int) : min=1 max=60 step=1 default=60 value=60 flags=volatile, execute-on-write</code>
| |
| − | | |
| − | <code> roi_x 0x00981905 (int) : min=0 max=1376 step=8 default=0 value=0</code>
| |
| − | | |
| − | <code> roi_y 0x00981906 (int) : min=0 max=1024 step=4 default=0 value=0</code>
| |
| − | | |
| − | 可以使用下面的方法设置和获取参数。
| |
| − | | |
| − | <code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl [ctrl_type]=[val]</code>
| |
| − | | |
| − | <code>v4l2-ctl -d /dev/v4l-subdev2 --get-ctrl [ctrl_type]</code>
| |
| − | | |
| − | 以上所有功能,均可使用mv_mipi_i2c.sh实现。
| |
| − | | |
| − | 需要指出的是,以上参数在取图过程中均不可修改。下面进行逐个说明:
| |
| − | =====配置触发模式=====
| |
| − | <code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl <small>trigger_mode=[0-2]</small></code>
| |
| − | | |
| − | 0:流模式
| |
| − | | |
| − | 1:普通触发模式
| |
| − | | |
| − | 2:快速连续触发模式
| |
| − | =====配置触发源=====
| |
| − | <code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl <small>trigger_src=[0-1]</small></code>
| |
| − | | |
| − | 0: 软触发
| |
| − | | |
| − | 1: 硬触发
| |
| − | =====软触发一次=====
| |
| − | <code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl <small>soft_trgone=1</small></code>
| |
| − | =====设置帧率=====
| |
| − | <code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl frame_rate=[1-max]</code>
| |
| − | | |
| − | 随分辨率的调整,最大帧率会自动更新。
| |
| − | =====设置ROI起始位置=====
| |
| − | <code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl roi_x=0</code>
| |
| − | | |
| − | <code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl roi_y=0</code>
| |
| − | | |
| − | ROI其实位置设置之后,需要通过<code>media-ctl</code>命令完成完整的ROI配置。
| |
| − | | |
| − | 设置roi后,最大帧率会自动调整。请注意,摄像机roi参数需要符合摄像机手册中的要求。
| |
| − | ====使用media-ctl配置图像格式====
| |
| − | 可以通过下面的命令,配置摄像机的数据格式,分辨率,帧率。
| |
| − | | |
| − | <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 2-003b"</code>指的相机的<code>entity</code>完整名称,<code>Y8_1X8</code>为<code>mbus-code</code>,<code>'"$WIDTH"'x'"$HEIGHT"'</code>指明了分辨率,<code>1/'"$FPS"'</code>指明了帧率。
| |
| − | | |
| − | 此处的width和height配合v4l2-ctl命令的<code>roi_x</code>和<code>roi_y</code>共同组成了ROI参数。
| |
| − | | |
| − | 比如,对于MV-MIPI-IMX296M,这个命令经过变量替换后的结果是:
| |
| − | | |
| − | <code>media-ctl -d /dev/media0 --set-v4l2 '"m00_b_mvcam 2-003b":0[fmt:Y8_1X8/1456x1088@1/60 field:none]'</code>
| |
| − | | |
| − | 不仅可以在一个命令中同时配置数据格式,分辨率,帧率,也可以单独修改某一项或某几项。
| |
| − | ====流模式====
| |
| − | =====设置数据格式,分辨率,帧率=====
| |
| − | <code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl roi_x=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 '"$I2C_BUS"'-003b":0[fmt:Y8_1X8/'"$WIDTH"'x'"$HEIGHT"'@1/'"$FPS"']'</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>
| |
| − | =====保存图片到文件=====
| |
| − | | |
| − | *raw8格式
| |
| − | | |
| − | <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格式
| |
| − | | |
| − | <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格式
| |
| − | | |
| − | <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>
| |
| − | | |
| − | 图片格式请参考前面章节的描述。
| |
| − | =====yavta应用范例=====
| |
| − | ======yavta安装======
| |
| − | <code>git clone <nowiki>git://git.ideasonboard.org/yavta.git</nowiki></code>
| |
| − | | |
| − | <code>cd yavta;make</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/rk35xx_radxa/tree/main/linux/samples/ samples]目录。
| |
| − | | |
| − | <code>python3 ./v4l2dev_2_opencv_show_grey.py --width 1456 --height 1088 --fps 60 --i2c 2</code>
| |
| − | =====gstreamer应用范例=====
| |
| − | 为了方便进行安装和调试,MV系列相机提供了UYVY模式。UYVY模式支持的最大宽度为2880,使用如下命令可以进行实时预览。
| |
| − | | |
| − | '''注''':为了提高最高帧率和带宽,部分模组升级固件后不再提供UYVY格式。具体请通过脚本的fmtcap指令读取寄存器确认。
| |
| − | | |
| − | 注意RAW系列不支持UYVY格式。
| |
| − | | |
| − | 我们提供了几个gstreamer例程,实现了预览功能。详见github上的[https://github.com/veyeimaging/rk35xx_veye_bsp/tree/main/samples samples]目录。
| |
| − | ====触发模式====
| |
| − | =====设置数据格式,分辨率,帧率=====
| |
| − | <code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl roi_x=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 '"$I2C_BUS"'-003b":0[fmt:Y8_1X8/'"$WIDTH"'x'"$HEIGHT"'@1/'"$FPS"']'</code>
| |
| − | =====软触发模式=====
| |
| − | ======设置模式======
| |
| − | <code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl <small>trigger_mode=1</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-${WIDTH}x${HEIGHT}.raw</code>
| |
| − | ======进行软触发操作======
| |
| − | 在其他的shell终端,可以多次执行下面命令进行多次触发。
| |
| − | | |
| − | <code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl <small>soft_trgone=1</small></code>
| |
| − | =====硬触发模式=====
| |
| − | ======设置模式======
| |
| − | <code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl <small>trigger_mode=1</small></code>
| |
| − | | |
| − | <code>v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl <small>trigger_src=1</small></code>
| |
| − | | |
| − | 可以使用[[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-${WIDTH}x${HEIGHT}.raw</code>
| |
| − | ======进行硬触发操作======
| |
| − | 将合适的触发信号连接到摄像机的trigger引脚并进行触发。
| |
| − | ===i2c脚本使用说明===
| |
| − | 我们提供了shell脚本来配置参数。
| |
| − | | |
| − | [[mv_mipi_i2c.sh user guide]]
| |
| | ===从源码编译驱动和dtb=== | | ===从源码编译驱动和dtb=== |
| | | | |
| Line 436: |
Line 163: |
| | ===参考资料=== | | ===参考资料=== |
| | | | |
| − | * Radxa Zero 3W Manual | + | *Radxa Zero 3W/3E Manual |
| | | | |
| | https://docs.radxa.com/zero/zero3 | | https://docs.radxa.com/zero/zero3 |
| Line 445: |
Line 172: |
| | ===本文修改记录=== | | ===本文修改记录=== |
| | | | |
| − | * 2024-11-03 | + | * 2025-12-26 |
| | + | |
| | + | 增加应用开发指南篇章 |
| | + | |
| | + | *2025-04-07 |
| | + | |
| | + | Add support for Radxa Zero 3E. |
| | + | |
| | + | *2024-11-03 |
| | | | |
| | 支持RAW-MIPI-SC535M。 | | 支持RAW-MIPI-SC535M。 |
English
怎样在Radxa板子上使用MV系列和RAW系列相机
1 概述
MV系列和RAW系列相机是为工业领域的AI应用推出的相机。其使用MIPI CSI-2接口,尤其适合嵌入式运算平台使用。它具备丰富的数据格式和触发特性,极低的延时,极高的带宽和可靠的稳定性。
本文以Radxa的ZERO 3W/3E主板为例,介绍怎样将MV和RAW系列摄像机接入RK3566/3K3568系统。
我们提供了Linux(以Radxa OS Debain为例)操作系统下的驱动。
1.1 支持的模组
| 系列
|
型号
|
状态
|
| MV系列
|
MV-MIPI-IMX178M
|
完成
|
| MV系列
|
MV-MIPI-SC130M
|
完成
|
| MV系列
|
MV-MIPI-IMX287M
|
完成
|
| MV系列
|
MV-MIPI-IMX296M
|
完成
|
| MV系列
|
MV-MIPI-IMX265M
|
完成
|
| MV系列
|
MV-MIPI-IMX264M
|
完成
|
| RAW系列
|
RAW-MIPI-SC132M
|
完成
|
| RAW系列
|
RAW-MIPI-IMX462M
|
完成
|
| RAW系列
|
RAW-MIPI-AR0234M
|
完成
|
| RAW系列
|
RAW-MIPI-SC535M
|
完成
|
2 硬件准备及安装
2.1 MV相机与Radxa ZERO 3W/3E的连接
MV系列相机需要使用ADP-MV1转接板才能连接到Radxa ZERO 3W/3E主板。
ADP-MV1和Zero 3W/3E之间使用15转22P的FFC同面线连接,注意接触面向外。
| TOP
|
BOTTOM
|
Radxa Zero 3W/3E connect to MV camera
|
Radxa Zero 3W/3E connect to MV camera 2
|
2.2 RAW-MIPI-SC132M与Radxa ZERO 3W/3E的连接
二者使用15转22P的FFC同面线连接,注意接触面向外。
| TOP
|
BOTTOM
|
Radxa Zero 3W/3E connect to RAW-MIPI-SC132M
|
Radxa Zero 3W/3E connect to RAW-MIPI-SC132M 2
|
2.3 其他RAW系列摄像头与Radxa ZERO 3W/3E的连接
二者使用0.5mm间距*22P的FFC异面线连接,注意接触面向外。
| TOP
|
BOTTOM
|
Radxa Zero 3W/3E connect to RAW series camera
|
Radxa Zero 3W/3E connect to RAW series camera 2
|
3 github库介绍
https://github.com/veyeimaging/rk35xx_veye_bsp
https://github.com/veyeimaging/rk35xx_radxa
包括以下主要内容:
- driver和dts源码
- i2c通信工具集
- 应用层demo
此外,在releases中,提供了编译好的linux系统镜像。
国内用户可以访问gitee仓库:
https://gitee.com/veyeimaging/rk35xx_veye_bsp
https://gitee.com/veyeimaging/rk35xx_radxa
国内用户可通过百度云下载:https://pan.baidu.com/s/1LdK0n_uCx1yGej4PB8-bxg。
4 更新主板的Radxa Debain系统
4.1 概述
本章节描述怎样更新RK356x系统以支持我们的摄像头模组。我们提供了deb安装包,可以直接安装。
4.1.1 烧写Radxa官方标准系统
参考Radxa文档,烧写标准系统。
我们现在发布的安装包,基于这个烧写镜像版本制作。
4.1.2 使用编译好的debain安装包
在RK35xx板子上,执行:
下载https://github.com/veyeimaging/rk35xx_radxa/releases/中最新的rk356x_radxa_zero3w.tar.gz或rk356x_radxa_zero3e.tar.gz。
tar -xavf rk356x_radxa_zero3w.tar.gz
cd rk356x_radxa_zero3w/released_images/mvcam
sudo dpkg -i linux-headers-5.10.160-36-rk356x_5.10.160-36_arm64_mvcam.deb
sudo dpkg -i linux-image-5.10.160-36-rk356x_5.10.160-36_arm64_mvcam.deb
sudo reboot
如果版本不匹配,需要从源代码进行编译。
5 系统状态检测
5.1 是否正确识别到了相机
完成系统安装后,系统上电。在Radxa板端执行以下命令来检测是否正确连接相机。
dmesg | grep mvcam
应当有类似下面的提示:
mvcam 2-003b: camera is:MV-MIPI-IMX296M
mvcam 2-003b: firmware version: 0x1290133
可以看到识别到当前的摄像机模组的型号,版本号。
正确识别摄像头之后,MIPI-CSI2接口的摄像头识别为/dev/video0。对于Radxa zero 3W/3E,相机挂载在i2c-2。
ls /dev/video0
可以看到
video0
正确识别摄像头之后,相机被识别为/dev/video0。
6 相机应用开发指南
应用开发指南
7 从源码编译驱动和dtb
https://github.com/veyeimaging/rk35xx_radxa/tree/main/linux/drivers/rk356x
8 参考资料
https://docs.radxa.com/zero/zero3
https://radxa-repo.github.io/bsp/
9 本文修改记录
增加应用开发指南篇章
Add support for Radxa Zero 3E.
支持RAW-MIPI-SC535M。
发布第一个版本。