Difference between revisions of "VEYE MIPI 327 for KHADAS EDGE ubuntu/zh"

From wiki_veye
Jump to navigation Jump to search
(Created page with "<br /> ===概述=== 本文主要介绍如何在NanoPi4平台使用VEYE-MIPI-327摄像头模组。本文兼容的NanoPi M4、NanoPi NEO4、NanoPi T4,以NanoPi M4为例进行...")
 
 
(9 intermediate revisions by the same user not shown)
Line 1: Line 1:
<br />
+
[[VEYE MIPI 327 for KHADAS EDGE ubuntu|English]]
 +
 
 +
[[VEYE MIPI 327 for KHADAS EDGE ubuntu/zh|<big>如何在KHADAS的Edge平台使用VEYE-MIPI-327摄像头模组(ubuntu)</big>]]<br />
 
===概述===
 
===概述===
本文主要介绍如何在NanoPi4平台使用VEYE-MIPI-327摄像头模组。本文兼容的NanoPi M4、NanoPi NEO4、NanoPi T4,以NanoPi M4为例进行介绍。
+
本文主要介绍如何在[https://www.khadas.com/ KHADAS平台]使用VEYE-MIPI-327摄像头模组。本文兼容的Khadas Edge、Khadas Edge-V,以Khadas Edge-V为例进行介绍。
  
RK3399是Rockchip的一个开源芯片平台,应用广泛。我们开发使用的SDK是linuxsdk-friendlyelec-20190903版本,系统启动方式本文以SD卡启动为例。
+
RK3399是Rockchip的一个开源芯片平台,应用广泛。我们开发使用的SDK是Khadas的fenix_0.8.2(20200110)在线版本,系统启动方式为emmc。
 
===硬件准备及安装===
 
===硬件准备及安装===
系统安装如图所示。我们有专门的RK3399平台套装。具体参数请参考:'''[[VEYE-MIPI-290RK/VEYE-MIPI-327RK Data Sheet/zh|VEYE-MIPI-327RK数据手册]]。'''[[File:Veye nano pi OverAll.jpg|center|thumb|602x602px|VEYE-MIPI-327 摄像头模组与NanoPi M4板连接示意图|link=http://wiki.veye.cc/index.php/File:Veye_nano_pi_OverAll.jpg]][[File:VEYEWiring scheme00 副本12.jpg|center|thumb|602x602px|NanoPi M4板插接示意图|link=http://wiki.veye.cc/index.php/File:VEYEWiring_scheme00_%E5%89%AF%E6%9C%AC12.jpg]][[File:Veye nano piWiring scheme01.jpg|center|thumb|596x596px|VEYE-MIPI-290/327 摄像头模组插接示意图|link=http://wiki.veye.cc/index.php/File:Veye_nano_piWiring_scheme01.jpg]]
+
系统安装如图所示。我们有专门的RK3399平台套装。具体参数请参考:(TODO)。
 +
[[File:KHADAS EDGE VEYE327.jpg|alt=|center|thumb|602x602px|VEYE-MIPI-327 摄像头模组与Khadas Edge-V连接示意图]]
 +
[[File:KHADAS EDGE FFC.jpg|alt=|center|thumb|602x602px|Khadas Edge-V板插接示意图(接触面向外)]]
 +
[[File:VEYE-MIPI-327KH FFC.jpg|alt=|center|thumb|596x596px|VEYE-MIPI-327 摄像头模组插接示意图(接触面向外)]]
  
  
注:NanoPi M4板的MIPI-CSI2接口说明
+
注:Khadas Edge-V板的CAM0和CAM1都是使用的i2c-6,现在版本的dts只支持连接到CAM0接口。
{| class="wikitable"
 
!接口
 
!I2C
 
!DPHY
 
!facing
 
!复用
 
|-
 
|MIPI-CSI1
 
|1
 
|RX0
 
|back
 
|NA
 
|-
 
|MIPI-CSI2
 
|2
 
|RX1
 
|front
 
|TX1<br />
 
|}
 
===使用编译好的整体镜像更新NanoPi4系统===
 
  
*下载系统镜像文件
+
===下载我们提供的bsp包===
 +
从我们提供的github地址下载源码,下载链接:https://github.com/veyeimaging/rk3399_veye_dimaging_bsp<nowiki/>。
  
我们在friendlyelec-20190903版本的SD卡烧写镜像基础上,制作了支持VEYE摄像头模组的镜像。点击[https://pan.baidu.com/s/1sWrcfEOivjuQ7T7P5bVcng#list/path=%2Fveye_mipi%E8%B5%84%E6%96%99%2Fnanopim4image 链接]下载。
 
  
*烧录镜像文件
+
<code>git clone [https://github.com/veyeimaging/rk3399_veye_dimaging_bsp https://github.com/veyeimaging/rk3399_veye_dimaging_bsp.git]</code>
 +
===使用编译好的镜像Edge更新系统===
  
利用SD Card Formatter软件将micro SD卡格式化(格式化前有必要将需要的文件进行备份),将下载后的压缩文件解压为rk3399-sd-friendlydesktop-bionic-4.4-arm64-20200112.img。
+
*安装官方镜像到板子上
  
使用win32diskimager软件将解压后的镜像文件写入micro SD卡。
+
从官方网站下载镜像,下载链接为:https://docs.khadas.com/edge/FirmwareUbuntu.html<nowiki/>,我们使用的版本为Edge_Ubuntu-lxde-bionic_Linux-4.4_arm64_EMMC_V20190830。
  
具体烧写过程和方法,可以参考[http://wiki.friendlyarm.com/wiki/index.php/NanoPi_M4/zh#.E5.87.86.E5.A4.87.E5.B7.A5.E4.BD.9C 链接]
+
按照以下步骤进行烧写:https://docs.khadas.com/edge/HowtoBootIntoUpgradeMode.html<nowiki/>
===使用源码更新NanoPi4系统===
 
本章节为如何使用源码更新系统固件的说明。主要涉及两部分,kernel和dtb。客户可参考此部分章节将VEYE-MIPI-327的驱动移植到其他RK3399的主板上。
 
====开发环境准备====
 
  
*安装编译工具链
+
*升级我们提供的kernel和dtb
  
RK3399采用的是标准linaro编译工具链。参考[http://wiki.friendlyarm.com/wiki/index.php/NanoPi_M4/zh#.E5.A6.82.E4.BD.95.E7.BC.96.E8.AF.91.E7.B3.BB.E7.BB.9F 链接]安装编译工具链。也可以参考Rockchip官方资料安装编译工具链。
+
升级包路径为
  
*下载kernel源码
+
<code>~/rk3399_veye_dimaging_bsp/ubuntu/platform/khadas_edge-v</code>
  
有三种方案进行kernel源码的获取。
+
将kernel-debs.tgz和rkisp-engine-2.0.1_arm64.tgz拷贝到Edge-V板上。
  
#使用friendlyarm提供的linuxsdk-friendlyelec完整开发包。下载链接:http://download.friendlyarm.com/NanoPiM4<nowiki/>。
+
*安装kernel和dtb
#从friendlyarm的官方github获取。
 
#从rockchip的官方github获取。
 
  
我们采用第一种方案。
+
<code>tar -xzvf kernel-debs.tgz</code>
  
<code>tar -xvf linuxsdk-friendlyelec-20190903.tar</code>
+
<code>cd kernel-debs</code>
  
<code>.repo/repo/repo sync -l</code>
+
<code>sudo dpkg -i linux-dtb-rockchip-4.4_0.8.2_arm64.deb</code>
  
*下载我们提供的驱动
+
<code>sudo dpkg -i linux-headers-rockchip-4.4_0.8.2_arm64.deb</code>
  
从我们提供的github地址下载源码,下载链接:https://github.com/veyeimaging/rk3399_veye_dimaging_bsp<nowiki/>
+
<code>sudo dpkg -i linux-image-rockchip-4.4_0.8.2_arm64.deb</code>
  
<code>git clone [https://github.com/veyeimaging/rk3399_veye_dimaging_bsp https://github.com/veyeimaging/rk3399_veye_dimaging_bsp.git]</code>
+
*根据需要安装rkisp库(如系统中已有对应的库则不需要此步骤)
====使用编译好的Image和DTB====
 
我们提供了NanoPi M4主板的resource.img和kernel.img,可以分区烧写提高速度。sd-fuse_rk3399详细方法请参考Readme。
 
  
使用方法如下:
+
<code>tar -xzvf rkisp-engine-2.0.1_arm64.tgz</code>
  
*下载sd-fuse_rk3399
+
<code>sudo cp -arf rkisp-engine-2.0.1_arm64/* /</code>
  
<code>git clone https://github.com/friendlyarm/sd-fuse_rk3399<nowiki/>.git</code>
+
===使用源码更新Edge系统===
 
+
本章节为如何使用源码更新系统固件的说明。主要涉及两部分,kernel和dtb。
*下载friendlydesktop-arm64-images.tgz
+
====开发环境准备====
  
下载链接:http://download.friendlyarm.com/NanoPiM4<nowiki/>下,images-for-eflasher目录找到对应文件,下载。
+
*安装Fenix并下载源码
  
<code>tar -xzvf friendlydesktop-arm64-images.tgz -C sd-fuse_rk3399</code>
+
根据Khadas的步骤:https://docs.khadas.com/zh-cn/edge/FenixScript.html<nowiki/>,会自动下载最新的代码。
  
*替换文件和动态烧写
+
<nowiki/><nowiki/><code><nowiki/></code><code>make kernel</code>
 
 
<code>tar -xzvf  rk3399_veye_dimaging_bsp/ubuntu/platform/friendlyarm_nanopi4/images/kernel.img.tar.gz -C ./sd-fuse_rk3399/friendlydesktop-arm64/</code>
 
 
 
<code>tar -xzvf  rk3399_veye_dimaging_bsp/ubuntu/platform/friendlyarm_nanopi4/images/resource.img.tar.gz -C ./sd-fuse_rk3399/friendlydesktop-arm64/  </code>
 
 
 
<code>cp  rk3399_veye_dimaging_bsp/ubuntu/platform/friendlyarm_nanopi4/images/update_partmap.txt  ./sd-fuse_rk3399/friendlydesktop-arm64/</code>
 
 
 
将micro SD卡通过TF卡转USB工具,插到开发Host PC上。通过以下命令,可以只进行升级,而不是整个卡进行烧写,速度比较快。
 
 
 
<code>cd ./sd-fuse_rk3399/</code>
 
 
 
<code>sudo ./tools/sd_update -d /dev/sdb -p ./friendlydesktop-arm64/update_partmap.txt</code>
 
 
====使用源码进行编译====
 
====使用源码进行编译====
  
 
*将我们的驱动文件放到对应kernel目录下
 
*将我们的驱动文件放到对应kernel目录下
  
<code>cp rk3399_veye_dimaging_bsp/ubuntu/drivers_source/VEYE-MIPI-327/veye327.c ~/linuxsdk-friendlyelec/kernel/drivers/media/i2c/</code>
+
<code>cp rk3399_veye_dimaging_bsp/ubuntu/drivers_source/VEYE-MIPI-327/veye327.c ~/project/fenix/linux/drivers/media/i2c/</code>
  
<code>cp rk3399_veye_dimaging_bsp/ubuntu/drivers_source/Makefile ~/linuxsdk-friendlyelec/kernel/drivers/media/i2c/</code>
+
<code>cp rk3399_veye_dimaging_bsp/ubuntu/drivers_source/Makefile ~/project/fenix/linux/drivers/media/i2c/</code>
  
<code>cp rk3399_veye_dimaging_bsp/ubuntu/drivers_source/Kconfig ~/linuxsdk-friendlyelec/kernel/drivers/media/i2c/</code>
+
<code>cp rk3399_veye_dimaging_bsp/ubuntu/drivers_source/Kconfig ~/project/fenix/linux//drivers/media/i2c/</code>
  
 
*增加编译选项
 
*增加编译选项
  
cd <code>~/linuxsdk-friendlyelec/kernel</code>
+
<code>cd ~/project/fenix/linux/</code>
  
<code>make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi4_linux_defconfig</code>
+
<code>make ARCH=arm64 kedge_defconfig</code>
  
<code>make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 menuconfig</code>
+
<code>make ARCH=arm64 menuconfig</code>
  
 
增加CONFIG_VIDEO_VEYE327选项。
 
增加CONFIG_VIDEO_VEYE327选项。
  
<code>make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 nanopi4-images</code>
+
也可以直接修改.config配置文件增加CONFIG_VIDEO_VEYE327选项。
  
<code>cp kernel.img resource.img ~/sd-fuse_rk3399/friendlydesktop-arm64/</code>
+
*编译
====动态升级====
 
将micro SD卡通过TF卡转USB工具,插到开发Host PC上。通过以下命令,可以只进行升级,而不是整个卡进行烧写,速度比较快。
 
  
<code>cd ./sd-fuse_rk3399/</code>
+
<code>make kernel && make kernel-deb</code>
  
<code>sudo ./tools/sd_update -d /dev/sdb -p ./friendlydesktop-arm64/update_partmap.txt</code>
+
编译完成的debs在./build/images/debs/0.8.2/目录下。
 
===应用和测试===
 
===应用和测试===
 
====系统状态检测====
 
====系统状态检测====
完成系统安装后,在Jetson Nano板端执行以下命令来检测是否正确连接摄像头。
+
完成系统安装后,在板端执行以下命令来检测是否正确连接摄像头。
  
 
<code>dmesg | grep veye327</code>  
 
<code>dmesg | grep veye327</code>  
Line 135: Line 100:
 
<code>Detected VEYE06 sensor</code>
 
<code>Detected VEYE06 sensor</code>
 
====视频流测试====
 
====视频流测试====
=====使用gstreamer=====
+
=====直接使用gst-launch-1.0=====
======使用gst-camera-veye.sh======
 
由于友善之臂官方提供的gst-camera.sh默认分辨率为720p,VEYE-MIPI-327不支持,我们提供了 修改版本的gst-camera-veye.sh。
 
 
 
目录为:
 
 
 
<code>rk3399_veye_dimaging_bsp/ubuntu/platform/friendlyarm_nanopi4/gst-camera-sh/</code>
 
  
 
*视频预览1080p HD
 
*视频预览1080p HD
 
<code>./gst-camera-veye.sh -a preview</code>
 
  
 
*视频录像1080p HD
 
*视频录像1080p HD
  
<code>./gst-camera-veye.sh --action video -output 1.ts</code>
+
<code>gst-launch-1.0 rkv4l2src num-buffers=512 ! video/x-raw,format=YUY2,width=1920,height=1080,framerate=30/1 ! queue ! mpph264enc ! queue ! h264parse ! mpegtsmux ! filesink location=/tmp/veye_video.ts</code>
  
 
*抓拍图片
 
*抓拍图片
  
<code>./gst-camera-veye.sh -a photo -o 1.jpg</code>
 
======直接使用gst-launch-1.0======
 
 
*视频预览1080p HD
 
 
<code>gst-launch-1.0 rkisp device=/dev/video1 io-mode=4 ! video/x-raw,format=NV12,width=1920,height=1080,framerate=30/1 ! rkximagesink</code>
 
 
*视频录像1080p HD
 
 
<code>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</code>
 
 
*抓拍图片
 
 
<code>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</code>
 
 
====视频控制软件包的使用====
 
====视频控制软件包的使用====
 
我们使用DRA(Directly Register Access)模式进行摄像头模组寄存器的配置。并且提供了一个shell脚本帮助使用。
 
我们使用DRA(Directly Register Access)模式进行摄像头模组寄存器的配置。并且提供了一个shell脚本帮助使用。
Line 174: Line 117:
 
*Ubuntu系统执行命令
 
*Ubuntu系统执行命令
  
<code>i2cdetect [value]</code>
+
<code>i2cdetect 6</code>
{| class="wikitable"
+
 
!value
+
检测硬件连接是否正常,VEYE327摄像头模组的产品i2c地址为0x3b。
!description
 
|-
 
|1
 
|MIPI-CSI1
 
|-
 
|2
 
|MIPI-CSI2
 
|}检测硬件连接是否正常,VEYE327摄像头模组的产品i2c地址为0x3b。
 
  
 
*确定硬件连接正常后,脚本命令如下,-b指明i2c bus:
 
*确定硬件连接正常后,脚本命令如下,-b指明i2c bus:
  
<code>veye_mipi_i2c_rk.sh</code>
+
<code>veye_mipi_i2c_rk.sh -b 6</code>  
  
 
视频控制接口软件包选项具体使用操作详见:[[VEYE-MIPI-290/327 i2c/zh|I2C脚本使用说明]]。
 
视频控制接口软件包选项具体使用操作详见:[[VEYE-MIPI-290/327 i2c/zh|I2C脚本使用说明]]。
 +
===现存问题===
 +
====问题现象====
 +
 +
*视频录像不满帧
 +
 +
使用上一节所用的gstreamer指令进行视频编码,无法达到满帧。只能达到大约17帧左右。有客户使用整颗Soc降频到600Mhz可以解决此问题。
 +
====问题原因====
 +
rockchip的rk3399虽然支持yuv格式的camera模组输入,但是由于此类模组接入较少,他们提供的gstreamer插件存在严重的bug。
 
===参考资料===
 
===参考资料===
 
====RK3399介绍====
 
====RK3399介绍====
Line 203: Line 146:
 
[https://github.com/rockchip-linux/docs docs]
 
[https://github.com/rockchip-linux/docs docs]
  
采用RK3399的主板也非常丰富,可供选择。各家软件均为基于瑞芯微资料制作,所以本文的内容也具有一定的普适性,不局限于NanoPi4系列。
+
采用RK3399的主板也非常丰富,可供选择。各家软件均为基于瑞芯微资料制作,所以本文的内容也具有一定的普适性。
====NanoPi M4介绍====
 
NanoPi M4是[https://www.friendlyarm.com/ 友善之臂]出品的基于RK3399的开发板。在爱好者和行业内拥趸极多。其资料开放,易于开发,[http://wiki.friendlyarm.com/wiki/index.php/NanoPi_M4/zh wiki]详细周到。
 
 
 
友善之臂也维护了自己[https://github.com/friendlyarm github]。
 
 
 
我们在开发的时候,采用的是友善之臂的[http://download.friendlyarm.com/NanoPiM4 官方定版版本],建议采用google drive云盘下载,速度更快。
 
 
 
 
 
Nanopi的4系列均采用RK3399芯片,本文均可适用。
 

Latest revision as of 13:35, 10 March 2020

English

如何在KHADAS的Edge平台使用VEYE-MIPI-327摄像头模组(ubuntu)

1 概述

本文主要介绍如何在KHADAS平台使用VEYE-MIPI-327摄像头模组。本文兼容的Khadas Edge、Khadas Edge-V,以Khadas Edge-V为例进行介绍。

RK3399是Rockchip的一个开源芯片平台,应用广泛。我们开发使用的SDK是Khadas的fenix_0.8.2(20200110)在线版本,系统启动方式为emmc。

2 硬件准备及安装

系统安装如图所示。我们有专门的RK3399平台套装。具体参数请参考:(TODO)。

VEYE-MIPI-327 摄像头模组与Khadas Edge-V连接示意图
Khadas Edge-V板插接示意图(接触面向外)
VEYE-MIPI-327 摄像头模组插接示意图(接触面向外)


注:Khadas Edge-V板的CAM0和CAM1都是使用的i2c-6,现在版本的dts只支持连接到CAM0接口。

3 下载我们提供的bsp包

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


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

4 使用编译好的镜像Edge更新系统

  • 安装官方镜像到板子上

从官方网站下载镜像,下载链接为:https://docs.khadas.com/edge/FirmwareUbuntu.html,我们使用的版本为Edge_Ubuntu-lxde-bionic_Linux-4.4_arm64_EMMC_V20190830。

按照以下步骤进行烧写:https://docs.khadas.com/edge/HowtoBootIntoUpgradeMode.html

  • 升级我们提供的kernel和dtb

升级包路径为

~/rk3399_veye_dimaging_bsp/ubuntu/platform/khadas_edge-v

将kernel-debs.tgz和rkisp-engine-2.0.1_arm64.tgz拷贝到Edge-V板上。

  • 安装kernel和dtb

tar -xzvf kernel-debs.tgz

cd kernel-debs

sudo dpkg -i linux-dtb-rockchip-4.4_0.8.2_arm64.deb

sudo dpkg -i linux-headers-rockchip-4.4_0.8.2_arm64.deb

sudo dpkg -i linux-image-rockchip-4.4_0.8.2_arm64.deb

  • 根据需要安装rkisp库(如系统中已有对应的库则不需要此步骤)

tar -xzvf rkisp-engine-2.0.1_arm64.tgz

sudo cp -arf rkisp-engine-2.0.1_arm64/* /

5 使用源码更新Edge系统

本章节为如何使用源码更新系统固件的说明。主要涉及两部分,kernel和dtb。

5.1 开发环境准备

  • 安装Fenix并下载源码

根据Khadas的步骤:https://docs.khadas.com/zh-cn/edge/FenixScript.html,会自动下载最新的代码。

make kernel

5.2 使用源码进行编译

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

cp rk3399_veye_dimaging_bsp/ubuntu/drivers_source/VEYE-MIPI-327/veye327.c ~/project/fenix/linux/drivers/media/i2c/

cp rk3399_veye_dimaging_bsp/ubuntu/drivers_source/Makefile ~/project/fenix/linux/drivers/media/i2c/

cp rk3399_veye_dimaging_bsp/ubuntu/drivers_source/Kconfig ~/project/fenix/linux//drivers/media/i2c/

  • 增加编译选项

cd ~/project/fenix/linux/

make ARCH=arm64 kedge_defconfig

make ARCH=arm64 menuconfig

增加CONFIG_VIDEO_VEYE327选项。

也可以直接修改.config配置文件增加CONFIG_VIDEO_VEYE327选项。

  • 编译

make kernel && make kernel-deb

编译完成的debs在./build/images/debs/0.8.2/目录下。

6 应用和测试

6.1 系统状态检测

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

dmesg | grep veye327  

应当有如下提示:

Detected VEYE06 sensor

6.2 视频流测试

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

gst-launch-1.0 rkv4l2src num-buffers=512 ! video/x-raw,format=YUY2,width=1920,height=1080,framerate=30/1 ! queue ! mpph264enc ! queue ! h264parse ! mpegtsmux ! filesink location=/tmp/veye_video.ts

  • 抓拍图片

6.3 视频控制软件包的使用

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

rk3399_veye_dimaging_bsp/ubuntu/i2c_cmd

  • Ubuntu系统执行命令

i2cdetect 6

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

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

veye_mipi_i2c_rk.sh -b 6

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

7 现存问题

7.1 问题现象

  • 视频录像不满帧

使用上一节所用的gstreamer指令进行视频编码,无法达到满帧。只能达到大约17帧左右。有客户使用整颗Soc降频到600Mhz可以解决此问题。

7.2 问题原因

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

8 参考资料

8.1 RK3399介绍

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

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

wiki

github

docs

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