Difference between revisions of "CS-MIPI-IMX307 for Jetson Nano/zh"

From wiki_veye
Jump to navigation Jump to search
(Created page with "English")
 
Line 1: Line 1:
 
[[CS-MIPI-IMX307 for Jetson Nano|English]]
 
[[CS-MIPI-IMX307 for Jetson Nano|English]]
 +
 +
[[VEYE MIPI 290/327 for Jetson Nano/zh|<big><big><big><big>如何在英伟达Jetson Nano平台使用CS-MIPI-IMX307摄像头模组</big></big></big></big>]]
 +
===概述===
 +
本文讲述怎样将CS-MIPI-IMX307 模组接入到英伟达公司的Jetson Nano开发板上。采用的Jetson Nano软件版本为r32.2.1,我们提供了编译好的固件和源代码两种方式来方便用户的使用。
 +
 +
CS-MIPI-IMX307是星光级内置ISP的摄像头模组,输出为MIPI-CSI2接口UYVY流模式,支持1080p@30fps和720pcrop@60模式。对于图像效果参数,我们并没有采用V4L2接口实现,而是采用了Shell脚本直接控制摄像头模组寄存器来实现。
 +
===硬件准备及安装===
 +
Jetson Nano的CSI2接口可以直接与CS-MIPI-IMX307连接。此外,需要额外的5V供电。[[File:Jetson nano to Veye327.jpg|center|thumb|600x600px|Jetson Nano 与VEYE模组连接|link=http://wiki.veye.cc/index.php/File:Jetson_nano_to_Veye327.jpg]][[File:Jetson nano pwr connect.jpg|center|thumb|600x600px|Jetson Nano 电源线接法|link=http://wiki.veye.cc/index.php/File:Jetson_nano_pwr_connect.jpg]][[File:VEYE327 pwr.jpg|center|thumb|600x600px|VEYE-MIPI-290/327接法|link=http://wiki.veye.cc/index.php/File:VEYE327_pwr.jpg]]
 +
 +
 +
===使用编译好的整体镜像更新Jetson nano系统===
 +
客户可选择直接使用我们编译好的镜像进行系统更新,以支持我司摄像头模组。
 +
 +
*镜像下载路径:
 +
 +
链接:https://pan.baidu.com/s/1sWrcfEOivjuQ7T7P5bVcng
 +
 +
下载后请先解压后烧写。
 +
 +
如百度云盘下载过慢,可以单独联系我公司客服xumm@csoneplus.com索取。
 +
 +
*烧写方法
 +
 +
参考[https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit 官方链接]
 +
===使用源码更新Jetson nano系统===
 +
====参考资料====
 +
Jetson Nano的系统安装及使用请参考官方文档:[https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit get-started-jetson-nano-devkit].  详细的开发资料请参考官方文档:https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-321/index.html
 +
====开发环境准备====
 +
 +
*Host PC which runs Ubuntu 18.04/16.04 (64-bit).  
 +
 +
*NVIDIA® provided L4T release and corresponding sample rootfs for Jetson Nano™ development kit.  
 +
 +
*A kernel image , device tree blob (DTB) file and module drivers for the VEYE-MIPI-290/327 camera. The release package contains a kernel binary (Image),DTB files and module drivers, which you can download and rebuild from source.
 +
 +
*A jumper pin connected across J48 button header to enable DC power.
 +
*A USB cable (micro USB port) to plug into the recovery port of the Jetson Nano™
 +
*development kit.
 +
*Power cable (5V-4A) to power the Jetson Nano™ board.
 +
*Micro SD card must be connected to the J501 slot.
 +
*A jumper pin must be connected to the pin 3 and pin 4 of J40 button header.  
 +
 +
====Host PC开发环境准备====
 +
 +
*编译工具链
 +
 +
请参考[https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fxavier_toolchain.html%23wwpID0ESHA 这个链接]安装编译工具链。
 +
 +
*L4T源码和Rootfs
 +
 +
可以通过SDK Manager或者[https://developer.nvidia.com/embedded/downloads 直接下载]两种方式来获得源码。具体参考官方文档,此处不再赘述。
 +
 +
*配置开发环境
 +
 +
以下步骤假设SDK安装目录为<TOPDIR>,源代码在$L4T_DIR/sources目录。
 +
 +
<code>export TOP_DIR=<absolute path to top dir;in my case is /home/xumm/nvidia/nvidia_sdk/JetPack_4.2.2_Linux_GA_P3448/></code>
 +
 +
<code>export L4T_DIR=$TOP_DIR/Linux_for_Tegra</code>
 +
 +
<code>export LDK_ROOTFS_DIR=$TOP_DIR/Linux_for_Tegra/rootfs</code>
 +
 +
<code>export ARCH=arm64</code>
 +
 +
<code>export CROSS_COMPILE=aarch64-linux-gnu-</code>
 +
 +
<code>export CROSS32CC=arm-linux-gnueabihf-gcc</code>
 +
 +
<code>mkdir -p $L4T_DIR/sources/kernel/out_kernel</code>
 +
 +
<code>export TEGRA_KERNEL_OUT=$L4T_DIR/sources/kernel/out_kernel</code>
 +
 +
<code>export NVIDIA_PATH=$L4T_DIR/sources/kernel/nvidia</code>
 +
 +
<code>export NANO_DTS_PATH=$L4T_DIR/sources/hardware/nvidia/platform/t210/porg/kernel-dts</code>
 +
 +
*生成默认版本烧写镜像,准备好L4T环境
 +
 +
<code>cd $L4T_DIR</code>
 +
 +
<code>sudo ./apply_binaries.sh</code>  
 +
 +
*下载程序
 +
 +
<code>cd $L4T_DIR</code>
 +
 +
<code>git clone [https://github.com/veyeimaging/jetson_nano https://github.com/veyeimaging/cs-mipi-imx307_jetson_nano].git</code>
 +
 +
<code>export RELEASE_PACK_DIR=$L4T_DIR/cs-mipi-imx307_jetson_nano</code>
 +
====使用编译好的Image和DTB====
 +
=====Installing the Kernel and DTS=====
 +
<code>cd $RELEASE_PACK_DIR/binaries</code>
 +
 +
<code>tar -xzvf Image.tar.gz</code>
 +
 +
<code>sudo cp Image $L4T_DIR/kernel/ -f</code>
 +
 +
<code>sudo cp $RELEASE_PACK_DIR/binaries/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/tegra210-p3448-0000-p3449-0000-a02.dtb -f</code>
 +
 +
<code>cd $L4T_DIR</code>
 +
====整体烧写 Flashing the Jetson Nano Development Kit====
 +
The steps to flash the Jetson Nano™ development kit are as follows:
 +
 +
#Ensure a jumper is connected across J48 button header to enable DC power.
 +
#Connect the micro USB cable to the Jetson Nano™ and host PC.
 +
#Set the board to recovery mode, as mentioned in below steps:
 +
 +
           a. Power OFF the board.
 +
 +
           b. Connect the jumper pin to the pin 3 and pin 4 of the J40 button header.
 +
 +
           c. Power ON the Jetson Nano™ development kit.
 +
 +
If the board is successfully changed to recovery mode, the Jetson Nano™development kit will be enumerated as an USB device to the host PC.
 +
 +
Run the following command to verify whether the board is in recovery mode.
 +
 +
<code>lsusb</code>
 +
 +
The output message appears as shown below.
 +
 +
<code>Bus 001 Device 102: ID 0955:7f21 NVidia Corp.</code>
 +
 +
4. Run the following commands to flash the Jetson Nano™ development kit from
 +
 +
your host PC.
 +
 +
<code>cd $L4T_DIR</code>
 +
 +
<code>sudo ./flash.sh jetson-nano-qspi-sd mmcblk0p1</code>
 +
 +
Note: Now, the entire micro SD on the Jetson Nano™ development kit will be erased. It will take about 10-30 minutes to complete depending on the host PC configuration.
 +
 +
5. Reboot and connect the Jetson Nano™ board to a monitor and keyboard to complete the OS configuration, once flashing is completed.
 +
====使用源码进行编译====
 +
=====编译kernel=====
 +
 +
*patch代码
 +
 +
<code>cp $RELEASE_PACK_DIR/sources/kernel/cs_imx307/* $NVIDIA_PATH/drivers/media/i2c/</code>
 +
 +
<code>cp $RELEASE_PACK_DIR/sources/kernel/kernel_csimx307_config $L4T_DIR/sources/kernel/kernel-4.9/arch/arm64/configs/tegra_csimx307_defconfig</code>
 +
 +
*编译
 +
 +
<code>cd $L4T_DIR/sources/kernel/kernel-4.9/</code>
 +
 +
<code>make ARCH=arm64 O=$TEGRA_KERNEL_OUT tegra_csimx307_defconfig</code>
 +
 +
<code>make ARCH=arm64 O=$TEGRA_KERNEL_OUT Image -j4</code>
 +
 +
编译完成的Image文件在 $TEGRA_KERNEL_OUT/arch/arm64/boot/Image,可以用于整体烧写,也可以用于动态升级。
 +
 +
以下用于整体烧写
 +
 +
<code>sudo cp $TEGRA_KERNEL_OUT/arch/arm64/boot/Image $L4T_DIR/kernel/ -f</code>
 +
=====编译DTS=====
 +
 +
*patch代码
 +
 +
<code>cp $RELEASE_PACK_DIR/sources/dts/kernel-dts/* $NANO_DTS_PATH/</code>
 +
 +
<code>cp $RELEASE_PACK_DIR/sources/dts/kernel-dts/porg-platforms/* $NANO_DTS_PATH/porg-platforms/</code>
 +
 +
<code>cp $RELEASE_PACK_DIR/sources/dts/kernel-dts/porg-plugin-manager/* $NANO_DTS_PATH/porg-plugin-manager/</code>
 +
 +
*编译
 +
 +
<code>make ARCH=arm64 O=$TEGRA_KERNEL_OUT dtbs</code>
 +
 +
<code>cp $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/</code>
 +
 +
编译完成后,可以进行整体烧写或者动态升级。
 +
====动态升级====
 +
 +
*升级Image文件
 +
 +
无论是使用预编译好的程序还是使用自行编译出的Image,只需在Jetson Nano板子上执行:
 +
 +
<code>sudo cp <path to your Image dir>/Image  /boot/Image -f</code>
 +
 +
*烧写DTS分区
 +
 +
烧写流程参考4.3 整体烧写,烧写命令为:
 +
 +
<code>cd $L4T_DIR</code>
 +
 +
<code>sudo ./flash.sh -r -k DTB jetson-nano-qspi-sd mmcblk0p1</code>
 +
 +
烧写完成后,断电重启。
 +
===应用和测试===
 +
====系统状态检测====
 +
完成系统安装后,在Jetson Nano板端执行以下命令来检测是否正确连接摄像头。
 +
 +
<code>dmesg | grep veye327</code>  
 +
 +
应当有如下提示:
 +
 +
<code>subdev veye327 6-003b bound</code>
 +
 +
此外,检查/dev/video0设备节点,应当是存在的。
 +
====视频流软件包和测试====
 +
=====Gstreamer Usage=====
 +
 +
*视频预览1080p HD(硬件加速)
 +
 +
<code>gst-launch-1.0 v4l2src ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvoverlaysink sync=false</code>
 +
 +
* 视频预览720p@60fps HD(硬件加速)
 +
 +
<code>gst-launch-1.0 v4l2src ! "video/x-raw,format=(string)UYVY, width=(int)1280, height=(int)720, framerate=(fraction)60/1" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvoverlaysink sync=false</code>
 +
 +
*视频录像1080p HD(硬件加速)
 +
 +
<code>gst-launch-1.0 v4l2src ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! omxh264enc qp-range=20,20:20,20:-1,-1 ! matroskamux ! queue ! filesink location=videoname.mkv</code>
 +
 +
*录像回放(硬件加速)
 +
 +
<code>gst-launch-1.0 filesrc location=videoname.mkv ! matroskademux ! h264parse ! omxh264dec ! nvoverlaysink</code>
 +
 +
*抓拍图片1080p
 +
 +
<code>gst-launch-1.0 v4l2src num-buffers=1 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! jpegenc ! filesink location=jpgname.jpg</code>
 +
 +
*抓拍图片720p
 +
 +
<code>gst-launch-1.0 v4l2src num-buffers=1 ! "video/x-raw,format=(string)UYVY, width=(int)1280, height=(int)720" ! jpegenc ! filesink location=jpgname.jpg</code>
 +
====视频控制软件包的使用====
 +
Jetson Nano使用i2c-6作为摄像头的控制总线。
 +
 +
<code>cd $L4T_DIR/jetson_nano/i2c_cmd/bin</code>
 +
 +
具体使用说明请见:[[CS-MIPI-X i2c/zh|I2C脚本使用说明]]。
 +
===其他说明===
 +
有任何的改进意见,欢迎您发邮件到xumm#csoneplus.com。

Revision as of 10:12, 20 December 2019

English

如何在英伟达Jetson Nano平台使用CS-MIPI-IMX307摄像头模组

1 概述

本文讲述怎样将CS-MIPI-IMX307 模组接入到英伟达公司的Jetson Nano开发板上。采用的Jetson Nano软件版本为r32.2.1,我们提供了编译好的固件和源代码两种方式来方便用户的使用。

CS-MIPI-IMX307是星光级内置ISP的摄像头模组,输出为MIPI-CSI2接口UYVY流模式,支持1080p@30fps和720pcrop@60模式。对于图像效果参数,我们并没有采用V4L2接口实现,而是采用了Shell脚本直接控制摄像头模组寄存器来实现。

2 硬件准备及安装

Jetson Nano的CSI2接口可以直接与CS-MIPI-IMX307连接。此外,需要额外的5V供电。

Jetson Nano 与VEYE模组连接
Jetson Nano 电源线接法
VEYE-MIPI-290/327接法


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

客户可选择直接使用我们编译好的镜像进行系统更新,以支持我司摄像头模组。

  • 镜像下载路径:

链接:https://pan.baidu.com/s/1sWrcfEOivjuQ7T7P5bVcng

下载后请先解压后烧写。

如百度云盘下载过慢,可以单独联系我公司客服xumm@csoneplus.com索取。

  • 烧写方法

参考官方链接

4 使用源码更新Jetson nano系统

4.1 参考资料

Jetson Nano的系统安装及使用请参考官方文档:get-started-jetson-nano-devkit. 详细的开发资料请参考官方文档:https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-321/index.html

4.2 开发环境准备

  • Host PC which runs Ubuntu 18.04/16.04 (64-bit).  
  • NVIDIA® provided L4T release and corresponding sample rootfs for Jetson Nano™ development kit.  
  • A kernel image , device tree blob (DTB) file and module drivers for the VEYE-MIPI-290/327 camera. The release package contains a kernel binary (Image),DTB files and module drivers, which you can download and rebuild from source.
  • A jumper pin connected across J48 button header to enable DC power.
  • A USB cable (micro USB port) to plug into the recovery port of the Jetson Nano™
  • development kit.
  • Power cable (5V-4A) to power the Jetson Nano™ board.
  • Micro SD card must be connected to the J501 slot.
  • A jumper pin must be connected to the pin 3 and pin 4 of J40 button header.  

4.3 Host PC开发环境准备

  • 编译工具链

请参考这个链接安装编译工具链。

  • L4T源码和Rootfs

可以通过SDK Manager或者直接下载两种方式来获得源码。具体参考官方文档,此处不再赘述。

  • 配置开发环境

以下步骤假设SDK安装目录为<TOPDIR>,源代码在$L4T_DIR/sources目录。

export TOP_DIR=<absolute path to top dir;in my case is /home/xumm/nvidia/nvidia_sdk/JetPack_4.2.2_Linux_GA_P3448/>

export L4T_DIR=$TOP_DIR/Linux_for_Tegra

export LDK_ROOTFS_DIR=$TOP_DIR/Linux_for_Tegra/rootfs

export ARCH=arm64

export CROSS_COMPILE=aarch64-linux-gnu-

export CROSS32CC=arm-linux-gnueabihf-gcc

mkdir -p $L4T_DIR/sources/kernel/out_kernel

export TEGRA_KERNEL_OUT=$L4T_DIR/sources/kernel/out_kernel

export NVIDIA_PATH=$L4T_DIR/sources/kernel/nvidia

export NANO_DTS_PATH=$L4T_DIR/sources/hardware/nvidia/platform/t210/porg/kernel-dts

  • 生成默认版本烧写镜像,准备好L4T环境

cd $L4T_DIR

sudo ./apply_binaries.sh  

  • 下载程序

cd $L4T_DIR

git clone https://github.com/veyeimaging/cs-mipi-imx307_jetson_nano.git

export RELEASE_PACK_DIR=$L4T_DIR/cs-mipi-imx307_jetson_nano

4.4 使用编译好的Image和DTB

4.4.1 Installing the Kernel and DTS

cd $RELEASE_PACK_DIR/binaries

tar -xzvf Image.tar.gz

sudo cp Image $L4T_DIR/kernel/ -f

sudo cp $RELEASE_PACK_DIR/binaries/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/tegra210-p3448-0000-p3449-0000-a02.dtb -f

cd $L4T_DIR

4.5 整体烧写 Flashing the Jetson Nano Development Kit

The steps to flash the Jetson Nano™ development kit are as follows:

  1. Ensure a jumper is connected across J48 button header to enable DC power.
  2. Connect the micro USB cable to the Jetson Nano™ and host PC.
  3. Set the board to recovery mode, as mentioned in below steps:

    a. Power OFF the board.

    b. Connect the jumper pin to the pin 3 and pin 4 of the J40 button header.

    c. Power ON the Jetson Nano™ development kit.

If the board is successfully changed to recovery mode, the Jetson Nano™development kit will be enumerated as an USB device to the host PC.

Run the following command to verify whether the board is in recovery mode.

lsusb

The output message appears as shown below.

Bus 001 Device 102: ID 0955:7f21 NVidia Corp.

4. Run the following commands to flash the Jetson Nano™ development kit from

your host PC.

cd $L4T_DIR

sudo ./flash.sh jetson-nano-qspi-sd mmcblk0p1

Note: Now, the entire micro SD on the Jetson Nano™ development kit will be erased. It will take about 10-30 minutes to complete depending on the host PC configuration.

5. Reboot and connect the Jetson Nano™ board to a monitor and keyboard to complete the OS configuration, once flashing is completed.

4.6 使用源码进行编译

4.6.1 编译kernel
  • patch代码

cp $RELEASE_PACK_DIR/sources/kernel/cs_imx307/* $NVIDIA_PATH/drivers/media/i2c/

cp $RELEASE_PACK_DIR/sources/kernel/kernel_csimx307_config $L4T_DIR/sources/kernel/kernel-4.9/arch/arm64/configs/tegra_csimx307_defconfig

  • 编译

cd $L4T_DIR/sources/kernel/kernel-4.9/

make ARCH=arm64 O=$TEGRA_KERNEL_OUT tegra_csimx307_defconfig

make ARCH=arm64 O=$TEGRA_KERNEL_OUT Image -j4

编译完成的Image文件在 $TEGRA_KERNEL_OUT/arch/arm64/boot/Image,可以用于整体烧写,也可以用于动态升级。

以下用于整体烧写

sudo cp $TEGRA_KERNEL_OUT/arch/arm64/boot/Image $L4T_DIR/kernel/ -f

4.6.2 编译DTS
  • patch代码

cp $RELEASE_PACK_DIR/sources/dts/kernel-dts/* $NANO_DTS_PATH/

cp $RELEASE_PACK_DIR/sources/dts/kernel-dts/porg-platforms/* $NANO_DTS_PATH/porg-platforms/

cp $RELEASE_PACK_DIR/sources/dts/kernel-dts/porg-plugin-manager/* $NANO_DTS_PATH/porg-plugin-manager/

  • 编译

make ARCH=arm64 O=$TEGRA_KERNEL_OUT dtbs

cp $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/

编译完成后,可以进行整体烧写或者动态升级。

4.7 动态升级

  • 升级Image文件

无论是使用预编译好的程序还是使用自行编译出的Image,只需在Jetson Nano板子上执行:

sudo cp <path to your Image dir>/Image /boot/Image -f

  • 烧写DTS分区

烧写流程参考4.3 整体烧写,烧写命令为:

cd $L4T_DIR

sudo ./flash.sh -r -k DTB jetson-nano-qspi-sd mmcblk0p1

烧写完成后,断电重启。

5 应用和测试

5.1 系统状态检测

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

dmesg | grep veye327  

应当有如下提示:

subdev veye327 6-003b bound

此外,检查/dev/video0设备节点,应当是存在的。

5.2 视频流软件包和测试

5.2.1 Gstreamer Usage
  • 视频预览1080p HD(硬件加速)

gst-launch-1.0 v4l2src ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvoverlaysink sync=false

  • 视频预览720p@60fps HD(硬件加速)

gst-launch-1.0 v4l2src ! "video/x-raw,format=(string)UYVY, width=(int)1280, height=(int)720, framerate=(fraction)60/1" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvoverlaysink sync=false

  • 视频录像1080p HD(硬件加速)

gst-launch-1.0 v4l2src ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! omxh264enc qp-range=20,20:20,20:-1,-1 ! matroskamux ! queue ! filesink location=videoname.mkv

  • 录像回放(硬件加速)

gst-launch-1.0 filesrc location=videoname.mkv ! matroskademux ! h264parse ! omxh264dec ! nvoverlaysink

  • 抓拍图片1080p

gst-launch-1.0 v4l2src num-buffers=1 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! jpegenc ! filesink location=jpgname.jpg

  • 抓拍图片720p

gst-launch-1.0 v4l2src num-buffers=1 ! "video/x-raw,format=(string)UYVY, width=(int)1280, height=(int)720" ! jpegenc ! filesink location=jpgname.jpg

5.3 视频控制软件包的使用

Jetson Nano使用i2c-6作为摄像头的控制总线。

cd $L4T_DIR/jetson_nano/i2c_cmd/bin

具体使用说明请见:I2C脚本使用说明

6 其他说明

有任何的改进意见,欢迎您发邮件到xumm#csoneplus.com。