Difference between revisions of "VEYE CS Camera on AVNET Maaxboard/zh"
(→I2C脚本) |
(→视频流测试) |
||
(10 intermediate revisions by 2 users not shown) | |||
Line 4: | Line 4: | ||
=== 概述 === | === 概述 === | ||
− | Maaxboard的MIPI-CSI2的接口与树莓派一致,VEYE-MIPI-327S、CS-MIPI-IMX307、CS-MIPI- | + | Maaxboard的MIPI-CSI2的接口与树莓派一致,VEYE-MIPI-327S、CS-MIPI-IMX307、CS-MIPI-SC132等MIPI模组可以直接接入使用,而无需使用转接板。<br />在Maaxboard官方资料基础上,增加了我们的摄像头模组驱动,并提供了一些应用层的例程。 |
+ | |||
+ | 一般情况下,只需使用我们已编译好的Image和dtb。当然,你也可以根据我们开源的代码修改或重新编译驱动。 | ||
+ | ====支持的模组:==== | ||
+ | {| class="wikitable" | ||
+ | |+模组型号支持表 | ||
+ | !系列 | ||
+ | !型号 | ||
+ | !状态 | ||
+ | |- | ||
+ | | VEYE系列 | ||
+ | |VEYE-MIPI-IMX327S | ||
+ | |完成 | ||
+ | |- | ||
+ | |VEYE系列 | ||
+ | | VEYE-MIPI-IMX385 | ||
+ | |完成 | ||
+ | |- | ||
+ | |VEYE系列 | ||
+ | |VEYE-MIPI-IMX462 | ||
+ | |完成 | ||
+ | |- | ||
+ | |CS系列 | ||
+ | |CS-MIPI-IMX307 | ||
+ | |完成 | ||
+ | |- | ||
+ | |CS系列 | ||
+ | |CS-MIPI-SC132 | ||
+ | |完成 | ||
+ | |}VEYE系列和CS系列MIPI摄像头模组是内置ISP的,输出为MIPI-CSI2接口。 | ||
+ | |||
+ | 对于图像效果参数,我们并没有采用V4L2接口实现,而是采用了DRA(Directly Register Access)模式,我们提供了一组Shell脚本直接控制摄像头模组。 | ||
特殊的,在这个i.MX平台上,摄像头采用了YUYV格式。 | 特殊的,在这个i.MX平台上,摄像头采用了YUYV格式。 | ||
=== 硬件准备及安装 === | === 硬件准备及安装 === | ||
− | + | [[File:MaaxBoard连接整体图.jpg|alt=MaaxBoard连接整体图|center|thumb|800x800px|MaaxBoard连接整体图]] | |
+ | [[File:MaaxBoard connection details.jpg|alt=MaaxBoard 连接细节图|center|thumb|800x800px|MaaxBoard 连接细节图]] | ||
+ | <br /> | ||
=== 更新Maaxboard系统 === | === 更新Maaxboard系统 === | ||
+ | ====概述==== | ||
+ | 本章节描述怎样更新MaaxBoard系统以支持我们的摄像头模组。要支持我们的摄像头模组,需要更新系统两个部分,Image和DTB。 | ||
+ | |||
+ | Image部分,我们增加了摄像头驱动,DTB部分则指明了使用的摄像头型号。一般情况下,只需使用我们已编译好的Image和DTB,非必要情况下,无需根据代码进行编译。 | ||
+ | ====BSP包介绍:==== | ||
+ | =====i.MX平台bsp===== | ||
+ | https://github.com/veyeimaging/nxp_i.mx_veye_bsp | ||
+ | |||
+ | 包括以下主要内容: | ||
+ | |||
+ | *driver源码 | ||
+ | *i2c通信工具集 | ||
+ | *应用层demo | ||
+ | |||
+ | ===== Maaxboard i.MX平台bsp ===== | ||
+ | https://github.com/veyeimaging/avnet_maaxboard | ||
+ | |||
+ | 包括以下主要内容: | ||
+ | |||
+ | *预编译好的linux kernel:Image | ||
+ | *预编译好的不同平台下的dtb | ||
+ | *dts源码 | ||
==== 烧写Maaxboard标准系统 ==== | ==== 烧写Maaxboard标准系统 ==== | ||
− | Maaxboard支持Linux Debain、Linux | + | Maaxboard支持Linux Debain、Linux Yocto、Android系统。Linux系统下,Image和dtb是一样的,我们采用Debain系统作为例子。 |
参考《MaaXBoard-Linux-Debian-UserManual-V1.3-CN.pdf》或《MaaXBoard_Mini-Linux-Debian-UserManual-V1.1-CN.pdf》文档,烧写标准版本。 | 参考《MaaXBoard-Linux-Debian-UserManual-V1.3-CN.pdf》或《MaaXBoard_Mini-Linux-Debian-UserManual-V1.1-CN.pdf》文档,烧写标准版本。 | ||
==== 使用编译好的Image和dtb ==== | ==== 使用编译好的Image和dtb ==== | ||
− | + | Maaxboard的Image和dtb,存放在TF卡的FAT分区,在maaxboard板载系统上挂载到/boot/目录。可以直接进行替换文件进行更新。 | |
+ | |||
+ | 在HostPC: | ||
<code>git clone <nowiki>https://github.com/veyeimaging/avnet_maaxboard.git</nowiki></code> | <code>git clone <nowiki>https://github.com/veyeimaging/avnet_maaxboard.git</nowiki></code> | ||
− | + | 解压kernel Image,将Image和em-sbc-imx8m-[camname].dtb放到TF卡的FAT分区。 | |
+ | |||
+ | 修改uEnv.txt文件fdt_file的值来指定摄像头型号。 | ||
然后将TF卡插到Maaxboard板子上,重新上电启动即可。 | 然后将TF卡插到Maaxboard板子上,重新上电启动即可。 | ||
Line 33: | Line 92: | ||
完成系统安装后,在Maaxboard板端执行以下命令来检测是否正确连接摄像头。 | 完成系统安装后,在Maaxboard板端执行以下命令来检测是否正确连接摄像头。 | ||
− | * VEYE-MIPI- | + | * VEYE-MIPI-IMX327S |
<code>dmesg | grep veye327</code> | <code>dmesg | grep veye327</code> | ||
Line 43: | Line 102: | ||
<code>Registered sensor subdevice: veye327_mipi 0-003b</code> | <code>Registered sensor subdevice: veye327_mipi 0-003b</code> | ||
− | 此外,检查/dev/ | + | 此外,检查/dev/video0设备节点,应当是存在的。 |
* CS-MIPI-IMX307 | * CS-MIPI-IMX307 | ||
Line 55: | Line 114: | ||
<code>Registered sensor subdevice: csimx307_mipi 0-003b</code> | <code>Registered sensor subdevice: csimx307_mipi 0-003b</code> | ||
− | 此外,检查/dev/ | + | 此外,检查/dev/video0设备节点,应当是存在的。 |
* CS-MIPI-SC132 | * CS-MIPI-SC132 | ||
Line 75: | Line 134: | ||
<code>export DISPLAY=:0</code> | <code>export DISPLAY=:0</code> | ||
− | * 视频预览(VEYE-MIPI- | + | *视频预览(VEYE-MIPI-IMX327S,CS-MIPI-IMX307 @1080p mode) |
<code>gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=1920,height=1080,framerate=(fraction)30/1' ! waylandsink</code> | <code>gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=1920,height=1080,framerate=(fraction)30/1' ! waylandsink</code> | ||
− | * 抓拍一张图片(VEYE-MIPI-327S,CS-MIPI-IMX307 @1080p mode) | + | * 帧率显示(VEYE-MIPI-IMX327S,CS-MIPI-IMX307 @1080p mode) |
+ | |||
+ | <code>gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=1920,height=1080,framerate=(fraction)30/1' ! fpsdisplaysink video-sink=fakesink -v</code> | ||
+ | |||
+ | *视频预览(CS-MIPI-IMX307 @1080p mode 10fps) | ||
+ | |||
+ | <code>gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=1920,height=1080,framerate=(fraction)10/1' ! waylandsink</code> | ||
+ | |||
+ | *视频预览(CS-MIPI-IMX307 @720p mode 60fps) | ||
+ | |||
+ | <code>gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=1280,height=720,framerate=(fraction)60/1' ! waylandsink</code> | ||
+ | |||
+ | *视频预览 (CS-MIPI-SC132 @1280*1080 mode 45fps) | ||
+ | |||
+ | <code>gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=1280,height=1080,framerate=(fraction)45/1' ! waylandsink</code> | ||
+ | |||
+ | *视频预览 (CS-MIPI-SC132 @1080*1280 mode 45fps) | ||
+ | |||
+ | <code>gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=1080,height=1280,framerate=(fraction)45/1' ! waylandsink</code> | ||
+ | |||
+ | *抓拍一张图片(VEYE-MIPI-327S,CS-MIPI-IMX307 @1080p mode) | ||
<code>gst-launch-1.0 v4l2src num-buffers=1 device=/dev/video0 ! 'video/x-raw, width=1920,height=1080' ! jpegenc ! filesink location=test_image.jpg</code> | <code>gst-launch-1.0 v4l2src num-buffers=1 device=/dev/video0 ! 'video/x-raw, width=1920,height=1080' ! jpegenc ! filesink location=test_image.jpg</code> | ||
− | * v4l2grab抓拍一张图片(VEYE-MIPI-327S,CS-MIPI-IMX307 @1080p mode) | + | *抓拍一张图片 (CS-MIPI-IMX307 @720p mode) |
+ | |||
+ | <code>gst-launch-1.0 v4l2src num-buffers=1 device=/dev/video0 ! 'video/x-raw, width=1280,height=720' ! jpegenc ! filesink location=720p.jpg</code> | ||
+ | |||
+ | *抓拍一张图片 (CS-MIPI-SC132 @1280*1080 mode) | ||
+ | |||
+ | <code>gst-launch-1.0 v4l2src num-buffers=1 device=/dev/video0 ! 'video/x-raw, width=1280,height=1080' ! jpegenc ! filesink location=test_image.jpg</code> | ||
+ | |||
+ | *v4l2grab抓拍一张图片(VEYE-MIPI-327S,CS-MIPI-IMX307 @1080p mode) | ||
<code>./v4l2grab -d /dev/video0 -W 1920 -H 1080 -I 30 -o picture.jpg</code> | <code>./v4l2grab -d /dev/video0 -W 1920 -H 1080 -I 30 -o picture.jpg</code> | ||
− | |||
==== I2C脚本 ==== | ==== I2C脚本 ==== | ||
由于我们的摄像头参数自由度比较高,并没有采用V4L2参数进行控制,而是使用脚本进行参数配置。 | 由于我们的摄像头参数自由度比较高,并没有采用V4L2参数进行控制,而是使用脚本进行参数配置。 | ||
Line 102: | Line 188: | ||
参考官方文档《MaaXBoard-Linux-Development_Guide-V1.1-CN.pdf》 | 参考官方文档《MaaXBoard-Linux-Development_Guide-V1.1-CN.pdf》 | ||
− | ==== | + | =====编译准备===== |
+ | <code>export PATH=$PATH:[REPLACE with your path]/toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/</code> | ||
+ | |||
+ | <code>export CC=aarch64-linux-gnu-gcc</code> | ||
+ | |||
+ | <code>export CROSS_COMPILE=aarch64-linux-gnu-</code> | ||
+ | |||
+ | <code>export ARCH=arm64</code> | ||
+ | |||
+ | * Maaxboard | ||
+ | |||
+ | <code>make bcm2711_defconfig</code> | ||
+ | |||
+ | <code>make -j4</code> | ||
+ | ==== patch我们的代码 ==== | ||
* Driver source code | * Driver source code | ||
Line 123: | Line 223: | ||
修改同路径下的Makefile,增加对应dts编译选项。 | 修改同路径下的Makefile,增加对应dts编译选项。 | ||
− | + | ====增加编译选项==== | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<code>make menuconfig</code> | <code>make menuconfig</code> | ||
增加对应camera模块驱动的编译选项,路径为 Device Drivers > Multimedia support > V4L platform devices > MXC Camera/V4L2 PRP Features support 。 | 增加对应camera模块驱动的编译选项,路径为 Device Drivers > Multimedia support > V4L platform devices > MXC Camera/V4L2 PRP Features support 。 | ||
− | + | ====编译输出==== | |
<code>make Image dtbs -j4</code> | <code>make Image dtbs -j4</code> | ||
=== 参考资料 === | === 参考资料 === | ||
+ | Maaxboard 厂家 :https://www.avnet.com/wps/portal/us/products/new-product-introductions/npi/avnet-maaxboard/ | ||
− | + | Maaxboard 官方资料:http://Avnet.com/MAAXBOARD | |
− | |||
− | Maaxboard 官方资料:http:// | ||
<br /> | <br /> |
Latest revision as of 09:21, 28 September 2021
如何在AVNET Maaxboard(mini)主板使用VEYE系列和CS系列摄像头模组
1 概述
Maaxboard的MIPI-CSI2的接口与树莓派一致,VEYE-MIPI-327S、CS-MIPI-IMX307、CS-MIPI-SC132等MIPI模组可以直接接入使用,而无需使用转接板。
在Maaxboard官方资料基础上,增加了我们的摄像头模组驱动,并提供了一些应用层的例程。
一般情况下,只需使用我们已编译好的Image和dtb。当然,你也可以根据我们开源的代码修改或重新编译驱动。
1.1 支持的模组:
系列 | 型号 | 状态 |
---|---|---|
VEYE系列 | VEYE-MIPI-IMX327S | 完成 |
VEYE系列 | VEYE-MIPI-IMX385 | 完成 |
VEYE系列 | VEYE-MIPI-IMX462 | 完成 |
CS系列 | CS-MIPI-IMX307 | 完成 |
CS系列 | CS-MIPI-SC132 | 完成 |
VEYE系列和CS系列MIPI摄像头模组是内置ISP的,输出为MIPI-CSI2接口。
对于图像效果参数,我们并没有采用V4L2接口实现,而是采用了DRA(Directly Register Access)模式,我们提供了一组Shell脚本直接控制摄像头模组。
特殊的,在这个i.MX平台上,摄像头采用了YUYV格式。
2 硬件准备及安装
3 更新Maaxboard系统
3.1 概述
本章节描述怎样更新MaaxBoard系统以支持我们的摄像头模组。要支持我们的摄像头模组,需要更新系统两个部分,Image和DTB。
Image部分,我们增加了摄像头驱动,DTB部分则指明了使用的摄像头型号。一般情况下,只需使用我们已编译好的Image和DTB,非必要情况下,无需根据代码进行编译。
3.2 BSP包介绍:
3.2.1 i.MX平台bsp
https://github.com/veyeimaging/nxp_i.mx_veye_bsp
包括以下主要内容:
- driver源码
- i2c通信工具集
- 应用层demo
3.2.2 Maaxboard i.MX平台bsp
https://github.com/veyeimaging/avnet_maaxboard
包括以下主要内容:
- 预编译好的linux kernel:Image
- 预编译好的不同平台下的dtb
- dts源码
3.3 烧写Maaxboard标准系统
Maaxboard支持Linux Debain、Linux Yocto、Android系统。Linux系统下,Image和dtb是一样的,我们采用Debain系统作为例子。
参考《MaaXBoard-Linux-Debian-UserManual-V1.3-CN.pdf》或《MaaXBoard_Mini-Linux-Debian-UserManual-V1.1-CN.pdf》文档,烧写标准版本。
3.4 使用编译好的Image和dtb
Maaxboard的Image和dtb,存放在TF卡的FAT分区,在maaxboard板载系统上挂载到/boot/目录。可以直接进行替换文件进行更新。
在HostPC:
git clone https://github.com/veyeimaging/avnet_maaxboard.git
解压kernel Image,将Image和em-sbc-imx8m-[camname].dtb放到TF卡的FAT分区。
修改uEnv.txt文件fdt_file的值来指定摄像头型号。
然后将TF卡插到Maaxboard板子上,重新上电启动即可。
4 应用和测试
在Maaxboard板卡上:
git clone https://github.com/veyeimaging/nxp_i.mx_veye_bsp.git
4.1 系统状态检测
完成系统安装后,在Maaxboard板端执行以下命令来检测是否正确连接摄像头。
- VEYE-MIPI-IMX327S
dmesg | grep veye327
应当有类似如下提示:
camera veye327_mipi is found
Registered sensor subdevice: veye327_mipi 0-003b
此外,检查/dev/video0设备节点,应当是存在的。
- CS-MIPI-IMX307
dmesg | grep csimx307
应当有类似如下提示:
camera csimx307_mipi is found
Registered sensor subdevice: csimx307_mipi 0-003b
此外,检查/dev/video0设备节点,应当是存在的。
- CS-MIPI-SC132
dmesg | grep cssc132
应当有类似如下提示:
camera cssc132_mipi is found
Registered sensor subdevice: cssc132_mipi 0-003b
此外,检查/dev/video0设备节点,应当是存在的。
4.2 列出摄像头支持的模式
v4l2-ctl --list-formats-ext
4.3 视频流测试
export DISPLAY=:0
- 视频预览(VEYE-MIPI-IMX327S,CS-MIPI-IMX307 @1080p mode)
gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=1920,height=1080,framerate=(fraction)30/1' ! waylandsink
- 帧率显示(VEYE-MIPI-IMX327S,CS-MIPI-IMX307 @1080p mode)
gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=1920,height=1080,framerate=(fraction)30/1' ! fpsdisplaysink video-sink=fakesink -v
- 视频预览(CS-MIPI-IMX307 @1080p mode 10fps)
gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=1920,height=1080,framerate=(fraction)10/1' ! waylandsink
- 视频预览(CS-MIPI-IMX307 @720p mode 60fps)
gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=1280,height=720,framerate=(fraction)60/1' ! waylandsink
- 视频预览 (CS-MIPI-SC132 @1280*1080 mode 45fps)
gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=1280,height=1080,framerate=(fraction)45/1' ! waylandsink
- 视频预览 (CS-MIPI-SC132 @1080*1280 mode 45fps)
gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=1080,height=1280,framerate=(fraction)45/1' ! waylandsink
- 抓拍一张图片(VEYE-MIPI-327S,CS-MIPI-IMX307 @1080p mode)
gst-launch-1.0 v4l2src num-buffers=1 device=/dev/video0 ! 'video/x-raw, width=1920,height=1080' ! jpegenc ! filesink location=test_image.jpg
- 抓拍一张图片 (CS-MIPI-IMX307 @720p mode)
gst-launch-1.0 v4l2src num-buffers=1 device=/dev/video0 ! 'video/x-raw, width=1280,height=720' ! jpegenc ! filesink location=720p.jpg
- 抓拍一张图片 (CS-MIPI-SC132 @1280*1080 mode)
gst-launch-1.0 v4l2src num-buffers=1 device=/dev/video0 ! 'video/x-raw, width=1280,height=1080' ! jpegenc ! filesink location=test_image.jpg
- v4l2grab抓拍一张图片(VEYE-MIPI-327S,CS-MIPI-IMX307 @1080p mode)
./v4l2grab -d /dev/video0 -W 1920 -H 1080 -I 30 -o picture.jpg
4.4 I2C脚本
由于我们的摄像头参数自由度比较高,并没有采用V4L2参数进行控制,而是使用脚本进行参数配置。
https://github.com/veyeimaging/nxp_i.mx_veye_bsp/tree/main/i2c_cmd
5 驱动的源代码编译
以下操作均在ubuntu Host PC上进行。
5.1 编译标准版本
参考官方文档《MaaXBoard-Linux-Development_Guide-V1.1-CN.pdf》
5.1.1 编译准备
export PATH=$PATH:[REPLACE with your path]/toolchain/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/
export CC=aarch64-linux-gnu-gcc
export CROSS_COMPILE=aarch64-linux-gnu-
export ARCH=arm64
- Maaxboard
make bcm2711_defconfig
make -j4
5.2 patch我们的代码
- Driver source code
git clone https://github.com/veyeimaging/nxp_i.mx_veye_bsp.git
camera驱动源码路径为: linux/drivers/media/platform/mxc/capture,将camera驱动的源码放到对应目录。
- Modify the the Makefile and Kconfig files
修改同路径下的Config和Makefile,增加对应camera驱动。
- dts file
git clone https://github.com/veyeimaging/avnet_maaxboard.git
dts文件路径为:linux/arch/arm64/boot/dts/freescale,将dts文件放到此路径。
- Modify dts Makefile
修改同路径下的Makefile,增加对应dts编译选项。
5.3 增加编译选项
make menuconfig
增加对应camera模块驱动的编译选项,路径为 Device Drivers > Multimedia support > V4L platform devices > MXC Camera/V4L2 PRP Features support 。
5.4 编译输出
make Image dtbs -j4
6 参考资料
Maaxboard 厂家 :https://www.avnet.com/wps/portal/us/products/new-product-introductions/npi/avnet-maaxboard/
Maaxboard 官方资料:http://Avnet.com/MAAXBOARD