VEYE MIPI 327 for Nano Pi 4 ubuntu/zh

From wiki_veye
Jump to navigation Jump to search

English

如何在友善之臂的NanoPi4平台(RK3399)使用VEYE-MIPI-327摄像头模组(ubuntu)

1 概述

本文主要介绍如何在NanoPi4平台使用VEYE-MIPI-327摄像头模组。本文兼容的NanoPi M4、NanoPi NEO4、NanoPi T4,以NanoPi M4为例进行介绍。

RK3399是Rockchip的一个开源芯片平台,应用广泛。我们开发使用的SDK是linuxsdk-friendlyelec-20190903版本,系统启动方式本文以SD卡启动为例。

2 硬件准备及安装

系统安装如图所示。我们有专门的RK3399平台套装。具体参数请参考:VEYE-MIPI-327RK数据手册

VEYE-MIPI-327 摄像头模组与NanoPi M4板连接示意图
NanoPi M4板插接示意图
VEYE-MIPI-290/327 摄像头模组插接示意图


注:NanoPi M4板的MIPI-CSI2接口说明

接口 I2C DPHY facing 复用
MIPI-CSI1 1 RX0 back NA
MIPI-CSI2 2 RX1 front TX1

3 使用编译好的整体镜像更新NanoPi4系统

  • 下载系统镜像文件

我们在friendlyelec-20190903版本的SD卡烧写镜像基础上,制作了支持VEYE摄像头模组的镜像。点击链接下载。

  • 烧录镜像文件

利用SD Card Formatter软件将micro SD卡格式化(格式化前有必要将需要的文件进行备份),将下载后的压缩文件解压为rk3399-sd-friendlydesktop-bionic-4.4-arm64-20200112.img。

使用win32diskimager软件将解压后的镜像文件写入micro SD卡。

具体烧写过程和方法,可以参考链接

4 使用源码更新NanoPi4系统

本章节为如何使用源码更新系统固件的说明。主要涉及两部分,kernel和dtb。客户可参考此部分章节将VEYE-MIPI-327的驱动移植到其他RK3399的主板上。

4.1 开发环境准备

  • 安装编译工具链

RK3399采用的是标准linaro编译工具链。参考链接安装编译工具链。也可以参考Rockchip官方资料安装编译工具链。

  • 下载kernel源码

有三种方案进行kernel源码的获取。

  1. 使用friendlyarm提供的linuxsdk-friendlyelec完整开发包。下载链接:http://download.friendlyarm.com/NanoPiM4
  2. 从friendlyarm的官方github获取。
  3. 从rockchip的官方github获取。

我们采用第一种方案。

tar -xvf linuxsdk-friendlyelec-20190903.tar

.repo/repo/repo sync -l

  • 下载我们提供的驱动

从我们提供的github地址下载源码,下载链接:https://github.com/veyeimaging/rk3399_veye_dimaging_bsp

git clone https://github.com/veyeimaging/rk3399_veye_dimaging_bsp.git

4.2 使用编译好的Image和DTB

我们提供了NanoPi M4主板的resource.img和kernel.img,可以分区烧写提高速度。sd-fuse_rk3399详细方法请参考Readme。

使用方法如下:

  • 下载sd-fuse_rk3399

git clone https://github.com/friendlyarm/sd-fuse_rk3399.git

  • 下载friendlydesktop-arm64-images.tgz

下载链接:http://download.friendlyarm.com/NanoPiM4下,images-for-eflasher目录找到对应文件,下载。

tar -xzvf friendlydesktop-arm64-images.tgz -C sd-fuse_rk3399

  • 替换文件和动态烧写

tar -xzvf  rk3399_veye_dimaging_bsp/ubuntu/platform/friendlyarm_nanopi4/images/kernel.img.tar.gz -C ./sd-fuse_rk3399/friendlydesktop-arm64/

tar -xzvf  rk3399_veye_dimaging_bsp/ubuntu/platform/friendlyarm_nanopi4/images/resource.img.tar.gz -C ./sd-fuse_rk3399/friendlydesktop-arm64/  

cp  rk3399_veye_dimaging_bsp/ubuntu/platform/friendlyarm_nanopi4/images/update_partmap.txt  ./sd-fuse_rk3399/friendlydesktop-arm64/

将micro SD卡通过TF卡转USB工具,插到开发Host PC上。通过以下命令,可以只进行升级,而不是整个卡进行烧写,速度比较快。

cd ./sd-fuse_rk3399/

sudo ./tools/sd_update -d /dev/sdb -p ./friendlydesktop-arm64/update_partmap.txt

4.3 使用源码进行编译

  • 将我们的驱动文件放到对应kernel目录下

cp rk3399_veye_dimaging_bsp/ubuntu/drivers_source/VEYE-MIPI-327/veye327.c ~/linuxsdk-friendlyelec/kernel/drivers/media/i2c/

cp rk3399_veye_dimaging_bsp/ubuntu/drivers_source/Makefile ~/linuxsdk-friendlyelec/kernel/drivers/media/i2c/

cp rk3399_veye_dimaging_bsp/ubuntu/drivers_source/Kconfig ~/linuxsdk-friendlyelec/kernel/drivers/media/i2c/

  • 增加编译选项

cd ~/linuxsdk-friendlyelec/kernel

make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi4_linux_defconfig

make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 menuconfig

增加CONFIG_VIDEO_VEYE327选项。

make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi4-images

cp kernel.img resource.img ~/sd-fuse_rk3399/friendlydesktop-arm64/

4.4 动态升级

将micro SD卡通过TF卡转USB工具,插到开发Host PC上。通过以下命令,可以只进行升级,而不是整个卡进行烧写,速度比较快。

cd ./sd-fuse_rk3399/

sudo ./tools/sd_update -d /dev/sdb -p ./friendlydesktop-arm64/update_partmap.txt

5 应用和测试

5.1 系统状态检测

完成系统安装后,在板端执行以下命令来检测是否正确连接摄像头。

dmesg | grep veye327  

应当有如下提示:

Detected VEYE06 sensor

5.2 视频流测试

5.2.1 使用gstreamer
5.2.1.1 使用gst-camera-veye.sh

由于友善之臂官方提供的gst-camera.sh默认分辨率为720p,VEYE-MIPI-327不支持,我们提供了 修改版本的gst-camera-veye.sh。

目录为:

rk3399_veye_dimaging_bsp/ubuntu/platform/friendlyarm_nanopi4/gst-camera-sh/

  • 视频预览1080p HD

./gst-camera-veye.sh -a preview

  • 视频录像1080p HD

./gst-camera-veye.sh --action video -output 1.ts

  • 抓拍图片

./gst-camera-veye.sh -a photo -o 1.jpg

5.2.1.2 直接使用gst-launch-1.0
  • 视频预览1080p HD

export DISPLAY=:0

gst-launch-1.0 rkisp device=/dev/video1 io-mode=4 ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! rkximagesink

  • 视频录像1080p HD

gst-launch-1.0 rkisp num-buffers=512 device=/dev/video0 io-mode=1 ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! mpph264enc ! queue ! h264parse ! filesink location=/tmp/out.mp4 -e

  • 抓拍图片

gst-launch-1.0 rkisp num-buffers=2 device=/dev/video0 io-mode=1 ! video/x-raw,format=NV12,width=1920,height=1080,framerate=10/1 ! jpegenc ! multifilesink location="/tmp/isp-frame%d.jpg" -e

  • 抓拍5张YUY2格式图片

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=UYVY8_2X8 --stream-mmap=3 --stream-skip=0 --stream-to=/tmp/cif.out --stream-count=5 --stream-poll

5.3 视频控制软件包的使用

我们使用DRA(Directly Register Access)模式进行摄像头模组寄存器的配置。并且提供了一个shell脚本帮助使用。

rk3399_veye_dimaging_bsp/ubuntu/i2c_cmd

  • Ubuntu系统执行命令

i2cdetect [value]

value description
1 MIPI-CSI1
2 MIPI-CSI2

检测硬件连接是否正常,VEYE327摄像头模组的产品i2c地址为0x3b。

  • 确定硬件连接正常后,脚本命令如下,-b指明i2c bus:

veye_mipi_i2c_rk.sh

视频控制接口软件包选项具体使用操作详见:I2C脚本使用说明

6 现存问题

6.1 问题现象

  • 视频录像不满帧

使用上一节所用的gstreamer指令进行视频编码,无法达到满帧。只能达到大约17帧左右。

  • 内存泄漏

使用rkisp这个gstreamer插件,会有严重的内存泄漏。

6.2 问题原因

rockchip的rk3399虽然支持yuv格式的camera模组输入,但是由于此类模组接入较少,他们提供的gstreamer插件存在严重的bug。

7 参考资料

7.1 RK3399介绍

RK3399是瑞芯微出品的一款高性价比的运算平台SoC。在业内拥有广泛的应用。

RK3399的资料详细,开放度高,备受欢迎。 重点资料列举如下:

wiki

github

docs

采用RK3399的主板也非常丰富,可供选择。各家软件均为基于瑞芯微资料制作,所以本文的内容也具有一定的普适性,不局限于NanoPi4系列。

7.2 NanoPi M4介绍

NanoPi M4是友善之臂出品的基于RK3399的开发板。在爱好者和行业内拥趸极多。其资料开放,易于开发,wiki详细周到。

友善之臂也维护了自己github

我们在开发的时候,采用的是友善之臂的官方定版版本,建议采用google drive云盘下载,速度更快。

Nanopi的4系列均采用RK3399芯片,本文均可适用。