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

From wiki_veye
Jump to navigation Jump to search
 
(14 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
[[CS-MIPI-IMX307 for Jetson Nano/zh|查看中文]]
 
[[CS-MIPI-IMX307 for Jetson Nano/zh|查看中文]]
  
[[VEYE MIPI 290/327 for Jetson Nano|<big><big><big><big>How to use CS-MIPI-IMX307 camera module on NVIDIA Jetson Nano</big></big></big></big>]]
+
<big><big><big><big>How to use CS-MIPI-X camera module on NVIDIA Jetson Nano</big></big></big></big>
 
===Overview===
 
===Overview===
This guide shows how to connect CS-MIPI-IMX307 to Jetson Nano. Jetson Nano SDK Version is r32.2.1. We provide two ways to do so: '''Prebuilt Binaries''' or '''Source Code. Yes, It's Open Source!'''
+
This guide shows how to connect CS-MIPI-X to Jetson Nano.Jetson SDK Version is:
  
CS-MIPI-IMX307 is STARVIS camera module with ISP functions build in. It output UYVY data using MIPI-CSI2,1080p@30fps mode and 720p_crop@60fps mode. We provide '''V4L2 interface''' for video streaming apps , and  '''Video Control Toolkits (which is Shell Script)''' to control the camera module directly.
+
*Jetpack4.2.2,L4T r32.2.1
 +
*Jetpack4.3,L4Tr32.3.1
 +
*Jetpack4.4,L4T,r32.4.3
 +
 
 +
We provide two ways to do so: '''Prebuilt Binaries''' or '''Source Code. Yes, It's Open Source!'''
 +
 
 +
CS-MIPI-IMX307 is STARVIS camera module with ISP functions build in. It output UYVY data using MIPI-CSI2,1080p@30fps mode, 720p_crop@60fps mode and VGA@130fps.
 +
 
 +
CS-MIPI-SC132 is global shutter camera module with ISP functions build in. It output UYVY data using MIPI-CSI2,support mulity video format and trigger mode.  
 +
 
 +
We provide '''V4L2 interface''' for video streaming apps , and  '''Video Control Toolkits (which is Shell Script)''' to control the camera module directly.
 +
 
 +
The new version of Jetson Nano (B01) is supported.
 
===Hardware Setup===
 
===Hardware Setup===
Jetson Nano's CSI2 interface is compatible with CS-MIPI-IMX307. In addition,It need a 5V power.
+
Jetson Nano's CSI2 interface is compatible with CS-MIPI-X. It support 5V power or 3.3V power mode. [[Power supply mode switching|power switching]].
 +
 
 +
*'''The default power supply mode of CS-MIPI-SC132 is 3.3V via FFC cable, and there is no need to plug in red and black power cable.'''
 +
 
 
[[File:Cs mipi imx307 jetson nao.JPG|alt=|center|thumb|600x600px|Connect CS-MIPI-IMX307 to Jetson Nano]]
 
[[File:Cs mipi imx307 jetson nao.JPG|alt=|center|thumb|600x600px|Connect CS-MIPI-IMX307 to Jetson Nano]]
[[File:Jetson nano pwr connect.jpg|center|thumb|600x600px|Jetson Nano power wire|link=http://wiki.veye.cc/index.php/File:Jetson_nano_pwr_connect.jpg|alt=]][[File:Cs mipi imx307 jetson nano cameraboard.JPG|alt=|center|thumb|600x600px|CS-MIPI-IMX307 wire|link=http://wiki.veye.cc/index.php/File:Cs_mipi_imx307_jetson_nano_cameraboard.JPG]]<br />
+
[[File:Jetson nano pwr connect.jpg|center|thumb|600x600px|Jetson Nano power wire|alt=]]
===Buruing the prebuilt Image to upgrade Jetson nano system===
+
[[File:Cs mipi imx307 jetson nano cameraboard.JPG|alt=|center|thumb|600x600px|CS-MIPI-IMX307 wire]]
 +
[[File:Jetson Nano B01 001.jpg|center|thumb|600x600px|CS-MIPI-307 dual cameras connect to Jetson Nano B01]]
 +
<br />
 +
===Upgrade Jetson Nano system===
 +
====Overview====
 +
This section describes how to upgrade the Jetson system to support our camera module. To support our camera module, we need to update the two parts of the L4T (Linux for Tegra) of the Jetson system, '''Image''' and '''DTB'''.
 +
 
 +
In the Image, we added the camera driver, while the DTB indicates the camera model used. In general, you only need to use the Image and DTB, that we have prebuilt, and you don't need to build from source  when it is not necessary.
 +
 
 +
In particular, for Jetson nano, we provide a burning image of the TF card.
 +
===Burning the prebuilt Image to upgrade Jetson nano system===
 
You can use the image prebuild by us to upgrade jetson nano system, which will support our camera.
 
You can use the image prebuild by us to upgrade jetson nano system, which will support our camera.
  
Line 17: Line 42:
 
*download :
 
*download :
  
link:https://pan.baidu.com/s/1sWrcfEOivjuQ7T7P5bVcng
+
baiduyun:https://pan.baidu.com/s/1sWrcfEOivjuQ7T7P5bVcng
 +
 
 +
google driver:https://drive.google.com/drive/folders/1KHSMTdyw-ZczR1yJPj-5y9eIv7izbgt3?usp=sharing
  
 
If Baidu cloud disk download is too slow, you can contact our company customer service ''xumm@csoneplus.com'' to obtain.
 
If Baidu cloud disk download is too slow, you can contact our company customer service ''xumm@csoneplus.com'' to obtain.
  
 
*How to burn
 
*How to burn
 
<code>tar -xzvf Jetson_nano_R32.2.1_20191220_CS_MIPI_IMX307.img.tar.gz</code>
 
  
 
refer to [https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit Official document]
 
refer to [https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit Official document]
Line 30: Line 55:
 
Jetson Nano system setup, please refer to official document:[https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit get-started-jetson-nano-devkit].
 
Jetson Nano system setup, please refer to official document:[https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit get-started-jetson-nano-devkit].
  
Development Docs:https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-321/index.html
+
Development Docs:https://docs.nvidia.com/jetson/archives/
 
====Setting Up the Environment====
 
====Setting Up the Environment====
  
Line 44: Line 69:
 
*Power cable (5V-4A) to power the Jetson Nano™ board.
 
*Power cable (5V-4A) to power the Jetson Nano™ board.
 
*Micro SD card must be connected to the J501 slot.
 
*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 environment prepare====
 
====Host PC environment prepare====
Line 59: Line 83:
  
 
Assume SDK install directory is <TOPDIR>,source code is in $L4T_DIR/sources directory.
 
Assume SDK install directory is <TOPDIR>,source code is in $L4T_DIR/sources directory.
 +
 +
''-Jetpack4.2.2''
  
 
<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 TOP_DIR=<absolute path to top dir;in my case is /home/xumm/nvidia/nvidia_sdk/JetPack_4.2.2_Linux_GA_P3448/></code>
 +
 +
''-Jetpack4.3''
 +
 +
<code>export TOP_DIR=<absolute path to top dir;in my case is /home/xumm/nvidia/nvidia_sdk/JetPack_4.3_Linux_JETSON_NANO_DEVKIT/></code>
 +
 +
''-Jetpack4.4''
 +
 +
<code>export TOP_DIR=<absolute path to top dir;in my case is /home/xumm/nvidia/nvidia_sdk//JetPack_4.4_Linux_JETSON_NANO_DEVKIT/></code>
 +
 +
''- Common Part''
  
 
<code>export L4T_DIR=$TOP_DIR/Linux_for_Tegra</code>
 
<code>export L4T_DIR=$TOP_DIR/Linux_for_Tegra</code>
 +
 +
<code>export LOCALVERSION=-tegra</code>
  
 
<code>export LDK_ROOTFS_DIR=$TOP_DIR/Linux_for_Tegra/rootfs</code>
 
<code>export LDK_ROOTFS_DIR=$TOP_DIR/Linux_for_Tegra/rootfs</code>
Line 90: Line 128:
 
<code>cd $L4T_DIR</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>git clone <nowiki>https://github.com/veyeimaging/nvidia_jetson_veye_bsp.git</nowiki></code>
 +
 
 +
<code>export RELEASE_PACK_DIR=$L4T_DIR/nvidia_jetson_veye_bsp</code>
  
<code>export RELEASE_PACK_DIR=$L4T_DIR/cs-mipi-imx307_jetson_nano</code>
 
 
====Using prebuild Image and DTB====
 
====Using prebuild Image and DTB====
 
=====Installing the Kernel and DTS=====
 
=====Installing the Kernel and DTS=====
<code>cd $RELEASE_PACK_DIR/binaries</code>
+
- ''Jetpack4.2.2''
 +
 
 +
<code>tar -xzvf Image_l4t_r32.2.1_veyecam.tar.gz</code>
 +
 
 +
<code>sudo cp Image $L4T_DIR/kernel/ -f</code>
 +
 
 +
<code>sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.2.2_Linux_GA_P3448/dts\ dtb/CS-MIPI-IMX307/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/ -f</code>
 +
 
 +
<code>sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.2.2_Linux_GA_P3448/dts\ dtb/CS-MIPI-IMX307/tegra210-p3448-0000-p3449-0000-b00.dtb $L4T_DIR/kernel/dtb/ -f</code>
 +
 
 +
- ''Jetpack4.3''
  
<code>tar -xzvf Image.tar.gz</code>
+
<code>tar -xzvf Image_l4t_r32.3.1_veyecam.tar.gz</code>
  
 
<code>sudo cp Image $L4T_DIR/kernel/ -f</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>
+
*CS-MIPI-IMX307
 +
 
 +
<code>sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.3_Linux_P3448/dts\ dtb/CS-MIPI-IMX307/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/ -f</code>
 +
 
 +
<code>sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.3_Linux_P3448/dts\ dtb/CS-MIPI-IMX307/tegra210-p3448-0000-p3449-0000-b00.dtb $L4T_DIR/kernel/dtb/ -f</code>
 +
 
 +
*CS-MIPI-SC132
 +
 
 +
<code>sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.3_Linux_P3448/dts\ dtb/CS-MIPI-SC132/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/ -f</code>
 +
 
 +
<code>sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.3_Linux_P3448/dts\ dtb/CS-MIPI-SC132/tegra210-p3448-0000-p3449-0000-b00.dtb $L4T_DIR/kernel/dtb/ -f</code>
 +
 
 +
- ''Jetpack4.4''
 +
 
 +
<code>tar -xzvf Image_l4t_r32.4.3_veyecam.tar.gz</code>
 +
 
 +
<code>sudo cp Image $L4T_DIR/kernel/ -f</code>
 +
 
 +
*For CS-MIPI-IMX307
 +
 
 +
<code>sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.4_Linux_JETSON_NANO_DEVKIT/dts\ dtb/CS-MIPI-IMX307/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/ -f</code>
 +
 
 +
<code>sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.4_Linux_JETSON_NANO_DEVKIT/dts\ dtb/CS-MIPI-IMX307/tegra210-p3448-0000-p3449-0000-b00.dtb $L4T_DIR/kernel/dtb/ -f</code>
 +
 
 +
*For CS-MIPI-SC132
 +
 
 +
<code>sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.4_Linux_JETSON_NANO_DEVKIT/dts\ dtb/CS-MIPI-SC132/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/ -f</code>
 +
 
 +
<code>sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.4_Linux_JETSON_NANO_DEVKIT/dts\ dtb/CS-MIPI-SC132/tegra210-p3448-0000-p3449-0000-b00.dtb $L4T_DIR/kernel/dtb/ -f</code>
  
 
<code>cd $L4T_DIR</code>
 
<code>cd $L4T_DIR</code>
 +
 
====Flashing the Jetson Nano Development Kit====
 
====Flashing the Jetson Nano Development Kit====
 
The steps to flash the Jetson Nano™ development kit are as follows:
 
The steps to flash the Jetson Nano™ development kit are as follows:
Line 143: Line 221:
 
*patch code
 
*patch code
  
<code>cp $RELEASE_PACK_DIR/sources/kernel/cs_imx307/* $NVIDIA_PATH/drivers/media/i2c/</code>
+
<code>cp $RELEASE_PACK_DIR/drivers_source/cam_drv_src/* $NVIDIA_PATH/drivers/media/i2c/</code>
 +
 
 +
''- r32.2.1''
 +
 
 +
<code>cp $RELEASE_PACK_DIR/drivers_source/kernel_veyecam_config_32.2.1 $L4T_DIR/sources/kernel/kernel-4.9/arch/arm64/configs/tegra_veyecam_defconfig</code>
 +
 
 +
''- r32.3.1''
  
<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>cp $RELEASE_PACK_DIR/drivers_source/kernel_veyecam_config_32.3.1 $L4T_DIR/sources/kernel/kernel-4.9/arch/arm64/configs/tegra_veyecam_defconfig</code>
 +
 
 +
''- r32.4.3''
 +
 
 +
<code>cp $RELEASE_PACK_DIR/drivers_source/kernel_veyecam_config_32.4.3 $L4T_DIR/sources/kernel/kernel-4.9/arch/arm64/configs/tegra_veyecam_defconfig</code>
  
 
*build
 
*build
Line 151: Line 239:
 
<code>cd $L4T_DIR/sources/kernel/kernel-4.9/</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 tegra_veyecam_defconfig</code>
  
 
<code>make ARCH=arm64 O=$TEGRA_KERNEL_OUT Image -j4</code>
 
<code>make ARCH=arm64 O=$TEGRA_KERNEL_OUT Image -j4</code>
Line 164: Line 252:
 
*patch code
 
*patch code
  
<code>cp $RELEASE_PACK_DIR/sources/dts/kernel-dts/* $NANO_DTS_PATH/</code>
+
''- Jetpack4.2.2''
  
<code>cp $RELEASE_PACK_DIR/sources/dts/kernel-dts/porg-platforms/* $NANO_DTS_PATH/porg-platforms/</code>
+
<code>cp $RELEASE_PACK_DIR/Nano/JetPack_4.2.2_Linux_GA_P3448/dts\ dtb/common/t210/* -r $NANO_DTS_PATH/</code>
  
<code>cp $RELEASE_PACK_DIR/sources/dts/kernel-dts/porg-plugin-manager/* $NANO_DTS_PATH/porg-plugin-manager/</code>
+
<code>cp $RELEASE_PACK_DIR/Nano/JetPack_4.2.2_Linux_GA_P3448/dts\ dtb/CS-MIPI-IMX307/tegra210-porg-plugin-manager.dtsi -r $NANO_DTS_PATH/porg/kernel-dts/porg-plugin-manager</code>
 +
 
 +
''- Jetpack4.3''
 +
 
 +
<code>cp $RELEASE_PACK_DIR/Nano/JetPack_4.3_Linux_P3448/dts\ dtb/common/t210/* -r $NANO_DTS_PATH/</code>
 +
 
 +
*CS-MIPI-IMX307
 +
 
 +
<code>cp $RELEASE_PACK_DIR/Nano/JetPack_4.3_Linux_P3448/dts\ dtb/CS-MIPI-IMX307/tegra210-porg-plugin-manager.dtsi -r $NANO_DTS_PATH/porg/kernel-dts/porg-plugin-manager</code>
 +
 
 +
*CS-MIPI-SC132
 +
 
 +
<code>cp $RELEASE_PACK_DIR/Nano/JetPack_4.3_Linux_P3448/dts\ dtb/CS-MIPI-SC132/tegra210-porg-plugin-manager.dtsi -r $NANO_DTS_PATH/porg/kernel-dts/porg-plugin-manager</code>
 +
 
 +
''- Jetpack4.4''
 +
 
 +
<code>cp $RELEASE_PACK_DIR/Nano/JetPack_4.4_Linux_JETSON_NANO_DEVKIT/dts\ dtb/common/t210/* -r $NANO_DTS_PATH/</code>
 +
 
 +
*CS-MIPI-IMX307
 +
 
 +
<code>cp $RELEASE_PACK_DIR/Nano/JetPack_4.4_Linux_JETSON_NANO_DEVKIT/dts\ dtb/CS-MIPI-IMX307/tegra210-porg-plugin-manager.dtsi -r $NANO_DTS_PATH/porg/kernel-dts/porg-plugin-manager</code>
 +
 
 +
*CS-MIPI-SC132
 +
 
 +
<code>cp $RELEASE_PACK_DIR/Nano/JetPack_4.4_Linux_JETSON_NANO_DEVKIT/dts\ dtb/CS-MIPI-SC132/tegra210-porg-plugin-manager.dtsi -r $NANO_DTS_PATH/porg/kernel-dts/porg-plugin-manager</code>
  
 
*build
 
*build
Line 175: Line 287:
  
 
<code>cp $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/</code>
 
<code>cp $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/</code>
 +
 +
<code>cp $TEGRA_KERNEL_OUT/arch/arm64/boot/dts/tegra210-p3448-0000-p3449-0000-b00.dtb $L4T_DIR/kernel/dtb/</code>
  
 
Could be used for Flashing or Upgrading.
 
Could be used for Flashing or Upgrading.
Line 201: Line 315:
 
<code>GStreamer 1.14.4</code>
 
<code>GStreamer 1.14.4</code>
  
Note: Make sure that CS-MIPI-IMX307 is connected and the required driversare loaded.
+
Note: Make sure that CS-MIPI-X is connected and the required driversare loaded.
  
During booting, the module drivers for CS-MIPI-IMX307 will be loaded automatically in the Jetson Nano™ development kit.
+
During booting, the module drivers for CS-MIPI-X will be loaded automatically in the Jetson Nano™ development kit.
  
 
2. Run the following command to confirm whether the camera is initialized.
 
2. Run the following command to confirm whether the camera is initialized.
  
<code>dmesg | grep csx307</code>
+
*For CS-MIPI-IMX307
  
The output message appears as shown below.
+
<code>dmesg | grep csx307</code>  
 +
 
 +
The output message appears as shown below.
 +
 
 +
<code>Detected CS307 sensor</code>
 +
 
 +
<code>subdev csimx307 X-003b bound</code>
 +
 
 +
*For CS-MIPI-SC132
 +
 
 +
<code>dmesg | grep cssc132</code>  
  
<code>subdev csx307 6-003b bound</code>
+
The output message appears as shown below.:
  
The output message indicates that the camera is initialized properly.
+
<code>subdev cssc132 X-003b bound</code>
  
3. Run the following command to check the presence of video node.
+
*Run the following command to check the presence of video node.
  
<u><code>ls /dev/video0</code></u>
+
<code>ls /dev/video*</code>
  
 
The output message appears as shown below.
 
The output message appears as shown below.
  
<code>video0</code>  
+
<code>video0(1)</code>  
 
====Video Stream Toolkits Manual====
 
====Video Stream Toolkits Manual====
 
=====Gstreamer Usage=====
 
=====Gstreamer Usage=====
Line 232: Line 356:
  
 
<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>
 
<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>
 +
 +
*Preview 1280*1080@45 (CS-MIPI-SC132,HW accelerated)
 +
 +
<code>gst-launch-1.0 v4l2src ! "video/x-raw,format=(string)UYVY, width=(int)1280, height=(int)1080, framerate=(fraction)45/1" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvoverlaysink sync=false</code>
 +
 +
*Preview 640*480@130fps(HW accelerated)
 +
 +
<code>gst-launch-1.0 v4l2src ! "video/x-raw,format=(string)UYVY, width=(int)640, height=(int)480, framerate=(fraction)130/1" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvoverlaysink sync=false</code>
 +
 +
*Preview 2 cameras  1080p HD(HW accelerated)
 +
 +
<code>WIDTH=960</code>
 +
 +
<code>HEIGHT=540</code>
 +
 +
<code>CAPS="video/x-raw,format=(string)UYVY, width=1920, height=1080"</code>
 +
 +
<code>gst-launch-1.0 nvcompositor name=comp sink_0::xpos=0 sink_0::ypos=0 sink_0::width=$WIDTH sink_0::height=$HEIGHT sink_1::xpos=$WIDTH sink_1::ypos=0 sink_1::width=$WIDTH sink_1::height=$HEIGHT ! nvoverlaysink v4l2src device=/dev/video0 ! $CAPS ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420"! comp. v4l2src device=/dev/video1 ! $CAPS ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420"! comp.</code>
  
 
*Record FHD in H.264 format to a video file(HW accelerated)
 
*Record FHD in H.264 format to a video file(HW accelerated)
  
<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 v4l2src num-buffers=300 ! "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>
  
 
*Playback of saved video file (HW accelerated)
 
*Playback of saved video file (HW accelerated)
Line 249: Line 391:
 
<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>
 
<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>
 
====Video Control Toolkits Manual====
 
====Video Control Toolkits Manual====
Jetson Nano use i2c-6 as camera control bus.
+
Jetson Nano A02 use i2c-6 as camera control bus,Jetson Nano B01 use i2c-7 and i2c-8 as camera control bus.
 +
 
 +
Using -b option to identify which bus to use.
  
 
<code>cd $RELEASE_PACK_DIR/i2c_cmd/bin</code>
 
<code>cd $RELEASE_PACK_DIR/i2c_cmd/bin</code>
  
Video Control Toolkits Manual : [[CS-MIPI-X i2c|CS-MIPI-IMX307 i2c]]
+
Video Control Toolkits Manual : [[CS-MIPI-X i2c|CS-MIPI-X i2c]]
 
===Others===
 
===Others===
 
This article and the source code are still in the process of improving. If you have any suggestions for improvement, you are welcome to email xumm#csoneplus.com.
 
This article and the source code are still in the process of improving. If you have any suggestions for improvement, you are welcome to email xumm#csoneplus.com.
  
 
<br />
 
<br />

Latest revision as of 20:08, 16 July 2020

查看中文

How to use CS-MIPI-X camera module on NVIDIA Jetson Nano

1 Overview

This guide shows how to connect CS-MIPI-X to Jetson Nano.Jetson SDK Version is:

  • Jetpack4.2.2,L4T r32.2.1
  • Jetpack4.3,L4Tr32.3.1
  • Jetpack4.4,L4T,r32.4.3

We provide two ways to do so: Prebuilt Binaries or Source Code. Yes, It's Open Source!

CS-MIPI-IMX307 is STARVIS camera module with ISP functions build in. It output UYVY data using MIPI-CSI2,1080p@30fps mode, 720p_crop@60fps mode and VGA@130fps.

CS-MIPI-SC132 is global shutter camera module with ISP functions build in. It output UYVY data using MIPI-CSI2,support mulity video format and trigger mode.

We provide V4L2 interface for video streaming apps , and Video Control Toolkits (which is Shell Script) to control the camera module directly.

The new version of Jetson Nano (B01) is supported.

2 Hardware Setup

Jetson Nano's CSI2 interface is compatible with CS-MIPI-X. It support 5V power or 3.3V power mode. power switching.

  • The default power supply mode of CS-MIPI-SC132 is 3.3V via FFC cable, and there is no need to plug in red and black power cable.
Connect CS-MIPI-IMX307 to Jetson Nano
Jetson Nano power wire
CS-MIPI-IMX307 wire
CS-MIPI-307 dual cameras connect to Jetson Nano B01


3 Upgrade Jetson Nano system

3.1 Overview

This section describes how to upgrade the Jetson system to support our camera module. To support our camera module, we need to update the two parts of the L4T (Linux for Tegra) of the Jetson system, Image and DTB.

In the Image, we added the camera driver, while the DTB indicates the camera model used. In general, you only need to use the Image and DTB, that we have prebuilt, and you don't need to build from source when it is not necessary.

In particular, for Jetson nano, we provide a burning image of the TF card.

4 Burning the prebuilt Image to upgrade Jetson nano system

You can use the image prebuild by us to upgrade jetson nano system, which will support our camera.

Using whole prebuilt image

  • download :

baiduyun:https://pan.baidu.com/s/1sWrcfEOivjuQ7T7P5bVcng

google driver:https://drive.google.com/drive/folders/1KHSMTdyw-ZczR1yJPj-5y9eIv7izbgt3?usp=sharing

If Baidu cloud disk download is too slow, you can contact our company customer service xumm@csoneplus.com to obtain.

  • How to burn

refer to Official document

5 Using source code to upgrade Jetson nano system

5.1 Reference documents

Jetson Nano system setup, please refer to official document:get-started-jetson-nano-devkit.

Development Docs:https://docs.nvidia.com/jetson/archives/

5.2 Setting Up the Environment

  • 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 CS-MIPI-IMX307 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.

5.3 Host PC environment prepare

  • Cross-compiling Toolchain

Please refer to this link to install toolchain on your Host PC.

  • L4T source code and Rootfs

You could use SDK Manager or directly download to get source code.

  • Setting Up the Environment

Assume SDK install directory is <TOPDIR>,source code is in $L4T_DIR/sources directory.

-Jetpack4.2.2

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

-Jetpack4.3

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

-Jetpack4.4

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

- Common Part

export L4T_DIR=$TOP_DIR/Linux_for_Tegra

export LOCALVERSION=-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

  • Build default image, prepare L4T environment

cd $L4T_DIR

sudo ./apply_binaries.sh  

  • Download source code for Jetson Nano

cd $L4T_DIR

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

export RELEASE_PACK_DIR=$L4T_DIR/nvidia_jetson_veye_bsp

5.4 Using prebuild Image and DTB

5.4.1 Installing the Kernel and DTS

- Jetpack4.2.2

tar -xzvf Image_l4t_r32.2.1_veyecam.tar.gz

sudo cp Image $L4T_DIR/kernel/ -f

sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.2.2_Linux_GA_P3448/dts\ dtb/CS-MIPI-IMX307/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/ -f

sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.2.2_Linux_GA_P3448/dts\ dtb/CS-MIPI-IMX307/tegra210-p3448-0000-p3449-0000-b00.dtb $L4T_DIR/kernel/dtb/ -f

- Jetpack4.3

tar -xzvf Image_l4t_r32.3.1_veyecam.tar.gz

sudo cp Image $L4T_DIR/kernel/ -f

  • CS-MIPI-IMX307

sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.3_Linux_P3448/dts\ dtb/CS-MIPI-IMX307/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/ -f

sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.3_Linux_P3448/dts\ dtb/CS-MIPI-IMX307/tegra210-p3448-0000-p3449-0000-b00.dtb $L4T_DIR/kernel/dtb/ -f

  • CS-MIPI-SC132

sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.3_Linux_P3448/dts\ dtb/CS-MIPI-SC132/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/ -f

sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.3_Linux_P3448/dts\ dtb/CS-MIPI-SC132/tegra210-p3448-0000-p3449-0000-b00.dtb $L4T_DIR/kernel/dtb/ -f

- Jetpack4.4

tar -xzvf Image_l4t_r32.4.3_veyecam.tar.gz

sudo cp Image $L4T_DIR/kernel/ -f

  • For CS-MIPI-IMX307

sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.4_Linux_JETSON_NANO_DEVKIT/dts\ dtb/CS-MIPI-IMX307/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/ -f

sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.4_Linux_JETSON_NANO_DEVKIT/dts\ dtb/CS-MIPI-IMX307/tegra210-p3448-0000-p3449-0000-b00.dtb $L4T_DIR/kernel/dtb/ -f

  • For CS-MIPI-SC132

sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.4_Linux_JETSON_NANO_DEVKIT/dts\ dtb/CS-MIPI-SC132/tegra210-p3448-0000-p3449-0000-a02.dtb $L4T_DIR/kernel/dtb/ -f

sudo cp $RELEASE_PACK_DIR/Nano/JetPack_4.4_Linux_JETSON_NANO_DEVKIT/dts\ dtb/CS-MIPI-SC132/tegra210-p3448-0000-p3449-0000-b00.dtb $L4T_DIR/kernel/dtb/ -f

cd $L4T_DIR

5.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.

5.6 Building from Source

5.6.1 Build kernel
  • patch code

cp $RELEASE_PACK_DIR/drivers_source/cam_drv_src/* $NVIDIA_PATH/drivers/media/i2c/

- r32.2.1

cp $RELEASE_PACK_DIR/drivers_source/kernel_veyecam_config_32.2.1 $L4T_DIR/sources/kernel/kernel-4.9/arch/arm64/configs/tegra_veyecam_defconfig

- r32.3.1

cp $RELEASE_PACK_DIR/drivers_source/kernel_veyecam_config_32.3.1 $L4T_DIR/sources/kernel/kernel-4.9/arch/arm64/configs/tegra_veyecam_defconfig

- r32.4.3

cp $RELEASE_PACK_DIR/drivers_source/kernel_veyecam_config_32.4.3 $L4T_DIR/sources/kernel/kernel-4.9/arch/arm64/configs/tegra_veyecam_defconfig

  • build

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

make ARCH=arm64 O=$TEGRA_KERNEL_OUT tegra_veyecam_defconfig

make ARCH=arm64 O=$TEGRA_KERNEL_OUT Image -j4

Completed Image file is $TEGRA_KERNEL_OUT/arch/arm64/boot/Image,could be used for Flashing or Upgrading.

Install Image for Flashing:

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

5.6.2 Build DTS
  • patch code

- Jetpack4.2.2

cp $RELEASE_PACK_DIR/Nano/JetPack_4.2.2_Linux_GA_P3448/dts\ dtb/common/t210/* -r $NANO_DTS_PATH/

cp $RELEASE_PACK_DIR/Nano/JetPack_4.2.2_Linux_GA_P3448/dts\ dtb/CS-MIPI-IMX307/tegra210-porg-plugin-manager.dtsi -r $NANO_DTS_PATH/porg/kernel-dts/porg-plugin-manager

- Jetpack4.3

cp $RELEASE_PACK_DIR/Nano/JetPack_4.3_Linux_P3448/dts\ dtb/common/t210/* -r $NANO_DTS_PATH/

  • CS-MIPI-IMX307

cp $RELEASE_PACK_DIR/Nano/JetPack_4.3_Linux_P3448/dts\ dtb/CS-MIPI-IMX307/tegra210-porg-plugin-manager.dtsi -r $NANO_DTS_PATH/porg/kernel-dts/porg-plugin-manager

  • CS-MIPI-SC132

cp $RELEASE_PACK_DIR/Nano/JetPack_4.3_Linux_P3448/dts\ dtb/CS-MIPI-SC132/tegra210-porg-plugin-manager.dtsi -r $NANO_DTS_PATH/porg/kernel-dts/porg-plugin-manager

- Jetpack4.4

cp $RELEASE_PACK_DIR/Nano/JetPack_4.4_Linux_JETSON_NANO_DEVKIT/dts\ dtb/common/t210/* -r $NANO_DTS_PATH/

  • CS-MIPI-IMX307

cp $RELEASE_PACK_DIR/Nano/JetPack_4.4_Linux_JETSON_NANO_DEVKIT/dts\ dtb/CS-MIPI-IMX307/tegra210-porg-plugin-manager.dtsi -r $NANO_DTS_PATH/porg/kernel-dts/porg-plugin-manager

  • CS-MIPI-SC132

cp $RELEASE_PACK_DIR/Nano/JetPack_4.4_Linux_JETSON_NANO_DEVKIT/dts\ dtb/CS-MIPI-SC132/tegra210-porg-plugin-manager.dtsi -r $NANO_DTS_PATH/porg/kernel-dts/porg-plugin-manager

  • build

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/

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

Could be used for Flashing or Upgrading.

5.7 Upgrading Kernel Image and Supplements

First,you should copy Image file to Jetson nano somehow. Use a U disk for example.

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

5.8 Upgrading DTB File by Flashing from Host PC

Burning process reference 4.3, burning commands is as below:

cd $L4T_DIR

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

Power off after flashing finished.

6 Applications and Test

6.1 Check system status

The steps to verify the setup before testing Gstreamer pipelines are as follows:

1. Run the following commands to check the Gstreamer-1.0 version.

$ gst-inspect-1.0 --version

gst-inspect-1.0 version 1.14.4

GStreamer 1.14.4

Note: Make sure that CS-MIPI-X is connected and the required driversare loaded.

During booting, the module drivers for CS-MIPI-X will be loaded automatically in the Jetson Nano™ development kit.

2. Run the following command to confirm whether the camera is initialized.

  • For CS-MIPI-IMX307

dmesg | grep csx307  

The output message appears as shown below.:

Detected CS307 sensor

subdev csimx307 X-003b bound

  • For CS-MIPI-SC132

dmesg | grep cssc132  

The output message appears as shown below.:

subdev cssc132 X-003b bound

  • Run the following command to check the presence of video node.

ls /dev/video*

The output message appears as shown below.

video0(1)  

6.2 Video Stream Toolkits Manual

6.2.1 Gstreamer Usage
  • Preview FHD(HW accelerated)

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

  • Preview 720p@60fps HD(HW accelerated)

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

  • Preview 1280*1080@45 (CS-MIPI-SC132,HW accelerated)

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

  • Preview 640*480@130fps(HW accelerated)

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

  • Preview 2 cameras 1080p HD(HW accelerated)

WIDTH=960

HEIGHT=540

CAPS="video/x-raw,format=(string)UYVY, width=1920, height=1080"

gst-launch-1.0 nvcompositor name=comp sink_0::xpos=0 sink_0::ypos=0 sink_0::width=$WIDTH sink_0::height=$HEIGHT sink_1::xpos=$WIDTH sink_1::ypos=0 sink_1::width=$WIDTH sink_1::height=$HEIGHT ! nvoverlaysink v4l2src device=/dev/video0 ! $CAPS ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420"! comp. v4l2src device=/dev/video1 ! $CAPS ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420"! comp.

  • Record FHD in H.264 format to a video file(HW accelerated)

gst-launch-1.0 v4l2src num-buffers=300 ! "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

  • Playback of saved video file (HW accelerated)

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

  • Capturing FHD still image  

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

  • Capturing 720p still image  

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

6.3 Video Control Toolkits Manual

Jetson Nano A02 use i2c-6 as camera control bus,Jetson Nano B01 use i2c-7 and i2c-8 as camera control bus.

Using -b option to identify which bus to use.

cd $RELEASE_PACK_DIR/i2c_cmd/bin

Video Control Toolkits Manual : CS-MIPI-X i2c

7 Others

This article and the source code are still in the process of improving. If you have any suggestions for improvement, you are welcome to email xumm#csoneplus.com.