Line 1: |
Line 1: |
| [[VEYE CS Camera for Jetson TX2/zh|查看中文]] | | [[VEYE CS Camera for Jetson TX2/zh|查看中文]] |
| | | |
− | '''<big>How to use VEYE and CS series camera module on NVIDIA Jetson Nano,TX2,AGX Xavier and Xavier NX</big>''' | + | '''<big>How to use VEYE and CS series camera module on NVIDIA Jetson Nano,TX2,Xavier and Orin</big>''' |
| | | |
| ===Overview=== | | ===Overview=== |
− | This guide shows how to use VEYE and CS series camera modules on Jetson Nano,Jetson Nano 2GB,TX2,TX2 NX,AGX Xavier and Xavier NX. Jetson SDK Version is | + | This guide shows how to use VEYE and CS series camera modules on Jetson Nano,Jetson Nano 2GB,TX2,TX2 NX,AGX Xavier and Xavier NX. Jetson SDK Version is: |
| | | |
| *Jetpack4.2.2,L4T r32.2.1 | | *Jetpack4.2.2,L4T r32.2.1 |
Line 13: |
Line 13: |
| *Jetpack4.5.1,L4T r32.5.1 | | *Jetpack4.5.1,L4T r32.5.1 |
| *Jetpack4.6,L4T r32.6.1 | | *Jetpack4.6,L4T r32.6.1 |
| + | |
| + | * Jetpack4.6.1, L4T r32.7.1 |
| + | *Jetpack4.6.2,L4T r32.7.2 |
| + | *Jetpack4.6.3,L4T r32.7.3 |
| + | *Jetpack4.6.4,L4T r32.7.4 |
| + | *Jetpack5.0.1DP, L4T r34.1.1 |
| + | *Jetpack5.0.2, L4T r35.1 |
| + | *Jetpack5.1,L4T r35.2.1 |
| + | *Jetpack5.1.1,L4T r35.3.1 |
| + | *Jetpack5.1.2,L4T r35.4.1 |
| | | |
| We provide two ways to do so: '''Prebuilt Binaries''' or '''Source Code. Yes, It's Open Source!''' | | We provide two ways to do so: '''Prebuilt Binaries''' or '''Source Code. Yes, It's Open Source!''' |
Line 53: |
Line 63: |
| |} | | |} |
| ====How to check the current L4T version==== | | ====How to check the current L4T version==== |
| + | |
| + | ===== Method 1 ===== |
| On Jetson board | | On Jetson board |
| | | |
Line 61: |
Line 73: |
| <code># R32 (release), REVISION: 4.3......</code> | | <code># R32 (release), REVISION: 4.3......</code> |
| | | |
− | It means L4t Verion is 32.4.3 | + | It means L4t Version is 32.4.3 |
| + | |
| + | ===== Method 2 ===== |
| + | Refer to this [https://pypi.org/project/jetson-stats/ link] to install jetson-stats: |
| + | |
| + | <code>jtop</code> |
| + | |
| ===Hardware Setup=== | | ===Hardware Setup=== |
− | We have designed a 6cam interposer board for TX2 devkit and Xavier, It support up to 6 cameras at the same time. | + | We have designed a 6cam interposer board for TX2 devkit,Xavier and Orin, It support up to 6 cameras at the same time. |
| [[File:ADP-N1-6CAM YT0.95-4I.jpg|alt=6cam interposer board connected with 6 cameras|center|thumb|800x800px|6cam interposer board connected with 6 cameras]] | | [[File:ADP-N1-6CAM YT0.95-4I.jpg|alt=6cam interposer board connected with 6 cameras|center|thumb|800x800px|6cam interposer board connected with 6 cameras]] |
| | | |
Line 73: |
Line 91: |
| <br />'''Be sure to screw the ADP adapter board to the bottom board.''' | | <br />'''Be sure to screw the ADP adapter board to the bottom board.''' |
| | | |
− | ====NVIDIA TX2 AGX Xavier==== | + | ====NVIDIA AGX Xavier(the same with Orin)==== |
| <br /> | | <br /> |
| [[File:ADP-N1-V2.0 XAVIER 6CAM.jpg|link=http://wiki.veye.cc/index.php/File:ADP-N1-V2.0%20XAVIER%206CAM.jpg|alt=Connect VEYE cameras to AGX Xavier|center|thumb|800x800px|Connect VEYE cameras to AGX Xavier]] | | [[File:ADP-N1-V2.0 XAVIER 6CAM.jpg|link=http://wiki.veye.cc/index.php/File:ADP-N1-V2.0%20XAVIER%206CAM.jpg|alt=Connect VEYE cameras to AGX Xavier|center|thumb|800x800px|Connect VEYE cameras to AGX Xavier]] |
− | <br />'''Be sure to screw the ADP adapter board to the bottom board.''' | + | <br />'''Be sure to screw the ADP adapter board to the bottom board to ensure that the adapter plate is installed flat.''' |
| ====NVIDIA Nano ,TX2 NX and Xavier NX Devkit==== | | ====NVIDIA Nano ,TX2 NX and Xavier NX Devkit==== |
| The Xavier NX interface is compatible with raspberry pi and Jetson Nano. The connection mode is shown in figure: | | The Xavier NX interface is compatible with raspberry pi and Jetson Nano. The connection mode is shown in figure: |
Line 83: |
Line 101: |
| [[File:Xavier NX connection with CS-MIPI-IMX307.jpg|alt=Xavier NX connection with CS-MIPI-IMX307|center|thumb|800x800px|Xavier NX connection with CS-MIPI-IMX307]] | | [[File:Xavier NX connection with CS-MIPI-IMX307.jpg|alt=Xavier NX connection with CS-MIPI-IMX307|center|thumb|800x800px|Xavier NX connection with CS-MIPI-IMX307]] |
| [[File:Jetson nano to Veye327.jpg|link=http://wiki.veye.cc/index.php/File:Jetson%20nano%20to%20Veye327.jpg|alt=Jetson Nano A02 与VEYE模组连接|center|thumb|800x800px|VEYE327 connection with Jetson Nano A02]] | | [[File:Jetson nano to Veye327.jpg|link=http://wiki.veye.cc/index.php/File:Jetson%20nano%20to%20Veye327.jpg|alt=Jetson Nano A02 与VEYE模组连接|center|thumb|800x800px|VEYE327 connection with Jetson Nano A02]] |
| + | [[File:VEYE camera connection with Orin Nano and Orin NX.jpg|center|thumb|800x800px|VEYE camera connection with Orin Nano and Orin NX]] |
| + | <br /> |
| + | ===Upgrade Jetson Nano, TX2,Xavier and Orin system=== |
| + | |
| + | ====Overview==== |
| + | This section describes how to upgrade the Jetson system to support our camera module. |
| | | |
− | ===Upgrade Jetson Nano, Jetson TX2, TX2 NX,AGX Xavier and Xavier NX system===
| + | * Jetpack4.x versions |
| | | |
− | ====Overview====
| + | 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'''. |
− | 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 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. |
| + | |
| + | * Jetpack5.x versions |
| + | |
| + | The driver is no longer compiled into the Image, but loaded into the system as a separate module. The dtb file is still compiled together as a whole to facilitate replacement. |
| + | |
| + | The dtb can also be loaded dynamically as an overlay. Refer to the official nVidia Developer's Guide for NVIDIA® Jetson™ Linux for details. |
| + | |
| + | * For MV series camera |
| + | |
| + | For MV series modules, we have added features to Image in order to support extended data types and external trigger modes. So regardless of Jetpack version, you need to update Image. |
| + | |
| + | Whether you need to update modules depends on Jetpack version. |
| | | |
| ====BSP package introduction==== | | ====BSP package introduction==== |
| | | |
| =====Path===== | | =====Path===== |
− | [https://github.com/veyeimaging/nvidia_jetson_veye_bsp/tree/master/kernel_image https://github.com/veyeimaging/nvidia_jetson_veye_bsp]
| + | https://github.com/veyeimaging/nvidia_jetson_veye_bsp |
| =====bsp package includes:===== | | =====bsp package includes:===== |
| | | |
− | *prebuild linux kernel:Image | + | *prebuilt dtb for different boards |
− | *prebuild dtb for different boards
| |
| *driver source code | | *driver source code |
| *dts source code | | *dts source code |
| *i2c toolkits | | *i2c toolkits |
| | | |
− | ==== DTB file name and Jetson Board ==== | + | In release packages |
| + | |
| + | * prebuilt linux kernel:Image |
| + | * prebuilt camera drivers |
| + | |
| + | ==== DTB file corresponds to Jetson boards ==== |
| | | |
| =====Nano A02===== | | =====Nano A02===== |
| <code>tegra210-p3448-0000-p3449-0000-a02.dtb</code> | | <code>tegra210-p3448-0000-p3449-0000-a02.dtb</code> |
− | | + | =====Nano B01 Devkit===== |
− | ===== Nano B01 ===== | |
| <code>tegra210-p3448-0000-p3449-0000-b00.dtb</code> | | <code>tegra210-p3448-0000-p3449-0000-b00.dtb</code> |
− | | + | =====Nano B01 4G emmc===== |
| + | <code>tegra210-p3448-0002-p3449-0000-b00.dtb</code> |
| ===== Nano 2GB ===== | | ===== Nano 2GB ===== |
| <code>tegra210-p3448-0003-p3542-0000.dtb</code> | | <code>tegra210-p3448-0003-p3542-0000.dtb</code> |
Line 125: |
Line 164: |
| <code>tegra194-p3668-all-p3509-0000.dtb</code> | | <code>tegra194-p3668-all-p3509-0000.dtb</code> |
| | | |
| + | Specially, For Jetpack5.x, must use this dtb: |
| + | |
| + | * Jetson Xavier NX (P3668-0000) For developer kit only: |
| + | |
| + | <code>tegra194-p3668-0000-p3509-0000.dtb</code> |
| + | |
| + | * Jetson Xavier NX (P3668-0001) Commercial module: |
| + | |
| + | <code>tegra194-p3668-0001-p3509-0000.dtb</code> |
| + | =====AGX Orin===== |
| + | <code>tegra234-p3701-0000-p3737-0000.dtb</code> |
| + | ===== Orin NX===== |
| + | |
| + | *Jetson Orin NX 16G(P3767-0000): |
| + | |
| + | <code>tegra234-p3767-0000-p3768-0000-a0.dtb</code> |
| + | |
| + | *Jetson Orin NX 8G (P3767-0001): |
| + | |
| + | <code>tegra234-p3767-0001-p3768-0000-a0.dtb</code> |
| + | ===== Orin Nano===== |
| + | |
| + | *Jetson Orin Nano 8G(P3767-0003) and Jetson Orin Nano Devkit(P3767-0005): |
| + | |
| + | <code>tegra234-p3767-0003-p3768-0000-a0.dtb</code> |
| + | |
| + | *Jetson Orin Nano 4G (P3767-0004): |
| + | |
| + | <code>tegra234-p3767-0004-p3768-0000-a0.dtb</code> |
| ==== DTB file name and camera module correspondence ==== | | ==== DTB file name and camera module correspondence ==== |
| Under the dtb directory of each motherboard, the directory corresponding to the camera model is stored, and you can usually know the corresponding camera model directly by the directory name. | | Under the dtb directory of each motherboard, the directory corresponding to the camera model is stored, and you can usually know the corresponding camera model directly by the directory name. |
Line 134: |
Line 202: |
| 2, The ones with fpdlink as suffix correspond to fpdlink coaxial model module. | | 2, The ones with fpdlink as suffix correspond to fpdlink coaxial model module. |
| | | |
− | ====Upgrade Jetson Nano and Xavier NX 、AGX Xavier without HOST PC==== | + | 3,MV-MIPI-MVCAM is the common dtb for all MV series and RAW series cameras, excluding RAW-MIPI-AR0234M and RAW-MIPI-IMX462M.. |
| + | |
| + | ====Upgrade directly on the jetson board==== |
| + | Applicable models: Jetson Nano, Xavier and Orin. |
| + | |
| Note: AGX Xavie Jetpack version >= 4.4 , support this upgrade mode. Earlier versions have not been verified and are not recommended. | | Note: AGX Xavie Jetpack version >= 4.4 , support this upgrade mode. Earlier versions have not been verified and are not recommended. |
| | | |
Line 148: |
Line 220: |
| It means L4t Verion is 32.4.3 | | It means L4t Verion is 32.4.3 |
| | | |
| + | ===== Note about L4T 32.7. 2 ===== |
| + | The Image and dts of L4T 32.7.2 are identical to those of L4T 32.7.1, so you can directly use the contents of the L4T 32.7.1 related directory. |
| + | |
| + | In addition, the upgrade requires updating cboot, please refer to the FAQ section. |
| =====Download the bsp package to the Jetson board===== | | =====Download the bsp package to the Jetson board===== |
− | On Jetson Nano or Xavier NX: | + | On Jetson Board: |
| | | |
− | <code>git clone <nowiki>https://github.com/veyeimaging/nvidia_jetson_veye_bsp.git</nowiki></code> | + | <code>wget <nowiki>https://github.com/veyeimaging/nvidia_jetson_veye_bsp/releases/latest/download/nvidia_jetson_veye_bsp.tar.gz</nowiki></code> |
| | | |
− | =====Upgrade Image===== | + | Or type in the address bar of your browser:<code><nowiki>https://github.com/veyeimaging/nvidia_jetson_veye_bsp/releases/latest/download/nvidia_jetson_veye_bsp.tar.gz</nowiki></code> |
− | First, under the bsp package directory, find the corresponding version of the Image package, decompress it, and execute:
| + | |
| + | <code>tar -xzvf nvidia_jetson_veye_bsp.tar.gz</code> |
| + | =====Upgrade Image(For Jetpack4.x or MV series cameras)===== |
| + | Backup old version Image |
| + | |
| + | <code>cp /boot/Image /boot/Image.backup</code> |
| + | |
| + | <code>cp /boot/Image.sig /boot/Image.sig.backup</code> |
| + | |
| + | Under the bsp package directory, find the corresponding version of the Image package, decompress it, and execute: |
| | | |
| <code>sudo cp <path to your Image dir>/Image /boot/Image -f</code> | | <code>sudo cp <path to your Image dir>/Image /boot/Image -f</code> |
Line 162: |
Line 247: |
| Need to use the signed file(For example,file inside Image_l4t_r32.*.*_veyecam_signed_4_xavier),copy Image and Image.sig to /boot/ dir on the Jetson Xavier board: | | Need to use the signed file(For example,file inside Image_l4t_r32.*.*_veyecam_signed_4_xavier),copy Image and Image.sig to /boot/ dir on the Jetson Xavier board: |
| | | |
− | <code>sudo cp <path to your Image dir>/Image /boot/Image -f</code> | + | <code>sudo cp <path to your Image dir>/Image* /boot/Image -f</code> |
| + | |
| + | Effective after restart. |
| + | |
| + | ===== install camera modules(For Jetpack5.x) ===== |
| + | Check linux version: |
| + | |
| + | <code>uname -r</code> |
| + | |
| + | Find the corresponding directory in <code>nvidia_jetson_veye_bsp/ko</code> : |
| + | |
| + | <code>sudo cp nvidia_jetson_veye_bsp/ko/$(uname -r)/* /lib/modules/$(uname -r)/kernel/drivers/media/i2c/ -f</code> |
| + | |
| + | '''Specially,for Jetpack5.1 version''': |
| + | |
| + | <code>sudo cp nvidia_jetson_veye_bsp/ko/5.10.104-tegra-l4t35.2.1/* /lib/modules/$(uname -r)/kernel/drivers/media/i2c/ -f</code> |
| + | |
| + | '''Specially,for Jetpack5.1.1 version''': |
| + | |
| + | <code>sudo cp nvidia_jetson_veye_bsp/ko/5.10.104-tegra-l4t35.3.1/* /lib/modules/$(uname -r)/kernel/drivers/media/i2c/ -f</code> |
| + | |
| + | ====== General ====== |
| + | Register the modules to the system by executing the following command. |
| + | |
| + | <code>sudo depmod</code> |
| + | |
| + | ====== Special ====== |
| + | If using a camera module with fpdlink interface. You must manually control the loading order to ensure that ds90ub954.ko is loaded before the camera driver is loaded. |
| + | |
| + | After the system boots, manually insert the drivers in order, e.g. |
| + | |
| + | <code>sudo insmod ds90ub954.ko</code> |
| | | |
− | <code>sudo cp <path to your Image dir>/Image.sig /boot/Image.sig -f</code> | + | <code>sudo insmod cs_imx307.ko</code> |
| | | |
− | Effective after restart.
| + | The command to load the driver can be added to the startup script. |
| | | |
| =====Upgrade dtb===== | | =====Upgrade dtb===== |
| Under the bsp package directory, find the dtb file corresponding to your camera module model and L4T version number. | | Under the bsp package directory, find the dtb file corresponding to your camera module model and L4T version number. |
| | | |
− | <code>sudo cp <path to your dtb dir>/<DTB file name> /boot/ -f</code> | + | <code>sudo mkdir /boot/veyecam/</code> |
| | | |
− | Then, edit the ''/ boot/extlinux/extlinux.conf'' file and add the following line.
| + | <code>sudo cp <path to your dtb dir>/<DTB file name> /boot/veyecam/ -f</code> |
| | | |
− | <code>FDT /boot/<DTB file name></code> | + | Backup extlinux.conf file first |
| + | |
| + | <code>cp /boot/extlinux/extlinux.conf / boot/extlinux/extlinux.conf.back</code> |
| + | |
| + | Then, edit the ''/boot/extlinux/extlinux.conf'' file and add the following line. |
| + | |
| + | <code>FDT /boot/veyecam/<DTB file name></code> |
| | | |
| Note: <DTB file name> should be replaced with the corresponding dtb name of the mainboard, ensure that the file specified in the FDT line actually exists correctly. | | Note: <DTB file name> should be replaced with the corresponding dtb name of the mainboard, ensure that the file specified in the FDT line actually exists correctly. |
Line 182: |
Line 304: |
| | | |
| ====Upgrade Jetson Board using Host PC==== | | ====Upgrade Jetson Board using Host PC==== |
| + | This section provides the second method of upgrading the system. |
| + | |
| + | This method has the same goal as the method in the previous section, and one of the two can be chosen. |
| + | |
| + | This method is complicated and not recommended for Nano, Xavier, Orin. |
| + | |
| + | Specifically, for TX2 systems, only the methods in this section can be taken to upgrade. |
| | | |
| =====Burn the standard Image===== | | =====Burn the standard Image===== |
Line 194: |
Line 323: |
| <code>export TOP_DIR=<absolute path to top dir accroding to your jetpack version and board name;for example /home/xumm/nvidia/nvidia_sdk/JetPack_4.5_Linux_JETSON_XAVIER_NX_DEVKIT/></code> | | <code>export TOP_DIR=<absolute path to top dir accroding to your jetpack version and board name;for example /home/xumm/nvidia/nvidia_sdk/JetPack_4.5_Linux_JETSON_XAVIER_NX_DEVKIT/></code> |
| | | |
− | export L4T_DIR=$TOP_DIR/Linux_for_Tegra | + | <code>export L4T_DIR=$TOP_DIR/Linux_for_Tegra</code> |
| | | |
| *Build default image, flashing to Jetson Board, prepare L4T environment | | *Build default image, flashing to Jetson Board, prepare L4T environment |
Line 203: |
Line 332: |
| | | |
| - Nano | | - Nano |
− |
| |
− | <code><s>sudo ./flash.sh jetson-qspi-sd mmcblk0p1</s></code>
| |
| | | |
| <code>sudo ./flash.sh jetson-nano-devkit mmcblk0p1</code> | | <code>sudo ./flash.sh jetson-nano-devkit mmcblk0p1</code> |
Line 228: |
Line 355: |
| <code>cd $L4T_DIR</code> | | <code>cd $L4T_DIR</code> |
| | | |
− | <code>git clone https://github.com/veyeimaging/nvidia_jetson_veye_bsp<nowiki/>.git</code><code><nowiki/></code> | + | <code>wget <nowiki>https://github.com/veyeimaging/nvidia_jetson_veye_bsp/releases/latest/download/nvidia_jetson_veye_bsp.tar.gz</nowiki></code> |
| + | |
| + | <code>tar -xzvf nvidia_jetson_veye_bsp.tar.gz</code> |
| | | |
| <code>export RELEASE_PACK_DIR=$L4T_DIR/nvidia_jetson_veye_bsp</code> | | <code>export RELEASE_PACK_DIR=$L4T_DIR/nvidia_jetson_veye_bsp</code> |
| =====Upgrade Image and DTB===== | | =====Upgrade Image and DTB===== |
− | prebuilt Image on github:https://github.com/veyeimaging/nvidia_jetson_veye_bsp/tree/master/kernel_image
| + | Extract the downloaded `nvidia_jetson_veye_bsp.tar.gz`, and locate the Image corresponding to the specific version. |
| | | |
| *Installing the Kernel | | *Installing the Kernel |
Line 301: |
Line 430: |
| | | |
| ====Are Image and DTB upgrade successful ?==== | | ====Are Image and DTB upgrade successful ?==== |
− |
| |
− | =====For Image=====
| |
− | <code>ls /sys/bus/i2c/drivers/</code>
| |
− |
| |
− | There should have veye327 veyecam csx307 cssc132 directory.
| |
| =====For DTB===== | | =====For DTB===== |
| DTB varies from platform and from camera module. | | DTB varies from platform and from camera module. |
Line 325: |
Line 449: |
| <code>ls /proc/device-tree/i2c@3180000/tca9548@77/i2c@*</code> | | <code>ls /proc/device-tree/i2c@3180000/tca9548@77/i2c@*</code> |
| | | |
− | - AGX Xavier | + | - AGX Xavier/AGX Orin |
| | | |
| <code>ls /proc/device-tree/i2c@3180000/tca9548@70/i2c@*</code> | | <code>ls /proc/device-tree/i2c@3180000/tca9548@70/i2c@*</code> |
Line 339: |
Line 463: |
| You should be able to find the camera model you used. | | You should be able to find the camera model you used. |
| | | |
| + | =====For Image===== |
| + | <code>ls /sys/bus/i2c/drivers/</code> |
| + | |
| + | When installing the camera correctly, the relevant directory for the camera should exist, such as veyecam csx307 cssc132 mvcam, etc. |
| ==== Protection against being overwritten by upgrades ==== | | ==== Protection against being overwritten by upgrades ==== |
| After making sure Image and dtb are successfully updated, please execute the following command to prevent kernel and dtb from being overwritten by update. | | After making sure Image and dtb are successfully updated, please execute the following command to prevent kernel and dtb from being overwritten by update. |
Line 344: |
Line 472: |
| <code>sudo apt-mark hold nvidia-l4t-kernel nvidia-l4t-kernel-dtbs</code> | | <code>sudo apt-mark hold nvidia-l4t-kernel nvidia-l4t-kernel-dtbs</code> |
| ====Build the drivers from source==== | | ====Build the drivers from source==== |
− | Please refer to: [[VEYE CS Camera source for Jetson|Nvidia Jetson platform VEYE and CS series camera driver source code compilation guide]]. | + | Please refer to: [[VEYE CS Camera source for Jetson|Nvidia Jetson platform VEYE camera driver source code compilation guide]]. |
| | | |
| Could be used for Flashing or Upgrading. | | Could be used for Flashing or Upgrading. |
Line 350: |
Line 478: |
| ====Check system status==== | | ====Check system status==== |
| Run the following command to confirm whether the camera is probed. | | Run the following command to confirm whether the camera is probed. |
− |
| |
− | *For VEYE-MIPI-327(using VEYE-MIPI-327 dtb)
| |
− |
| |
− | <code>dmesg | grep veye327</code>
| |
− |
| |
− | The output message appears as shown below:
| |
− |
| |
− | <code>Detected VEYE327 sensor</code>
| |
− |
| |
− | <code>subdev veye327 X-003b bound</code>
| |
| | | |
| *VEYE-MIPI-IMX327S/VEYE-MIPI-IMX462/VEYE-MIPI-IMX385(using VEYE-MIPI-CAM2M dtb) | | *VEYE-MIPI-IMX327S/VEYE-MIPI-IMX462/VEYE-MIPI-IMX385(using VEYE-MIPI-CAM2M dtb) |
Line 371: |
Line 489: |
| <code>sensor is IMX327/IMX462/IMX385</code> | | <code>sensor is IMX327/IMX462/IMX385</code> |
| | | |
− | <code>subdev veyecam X-003b bound</code> | + | <code>subdev veyecam [i2c_bus]-003b bound</code> |
| | | |
| *For CS-MIPI-IMX307 | | *For CS-MIPI-IMX307 |
Line 381: |
Line 499: |
| <code>Detected CS307 sensor</code> | | <code>Detected CS307 sensor</code> |
| | | |
− | <code>subdev csx307 X-003b bound</code> | + | <code>subdev csx307 [i2c_bus]-003b bound</code> |
| | | |
| *For CS-MIPI-SC132 | | *For CS-MIPI-SC132 |
Line 389: |
Line 507: |
| The output message appears as shown below.: | | The output message appears as shown below.: |
| | | |
− | <code>subdev cssc132 X-003b bound</code> | + | <code>subdev cssc132 [i2c_bus]-003b bound</code> |
| | | |
| *For VEYE-MIPI-IMX335 | | *For VEYE-MIPI-IMX335 |
Line 399: |
Line 517: |
| <code>camera id is VEYE-MIPI-IMX335</code> | | <code>camera id is VEYE-MIPI-IMX335</code> |
| | | |
− | <code>subdev veye_imx335 10-003b bound</code> | + | <code>subdev veye_imx335 [i2c_bus]-003b bound</code> |
| | | |
| *Run the following command to check the presence of video node. | | *Run the following command to check the presence of video node. |
Line 408: |
Line 526: |
| | | |
| <code>videoX</code> | | <code>videoX</code> |
| + | |
| + | *For VEYE-MIPI-327(using VEYE-MIPI-327 dtb) |
| + | |
| + | <code>dmesg | grep veye327</code> |
| + | |
| + | The output message appears as shown below: |
| + | |
| + | <code>Detected VEYE327 sensor</code> |
| + | |
| + | <code>subdev veye327 [i2c_bus]-003b bound</code> |
| + | |
| + | The [i2c_bus] in the driver prompt message indicates the i2c bus corresponding to this camera. |
| | | |
| ====Video Stream Toolkits Manual==== | | ====Video Stream Toolkits Manual==== |
− | Our camera appears as /dev/videoX device node,where X is between [0-5].
| + | The camera appears as /dev/videoX device node,where X is between [0-5]. |
| | | |
− | in gstreamer command ,v4l2src has a param device=/dev/videoX to identify which camera to use. | + | During the Linux boot process, the cameras are detected in the order of i2c bus from smallest to largest. For example, if only one camera is connected, X is 0 regardless of the hardware connection to the location. If 5 cameras are connected, X is reflected as [0-4] according to i2c bus from smallest to largest. |
| + | |
| + | In gstreamer command ,v4l2src and nvv4l2camerasrc has a param device=/dev/videoX to identify which camera to use. |
| =====Gstreamer Usage===== | | =====Gstreamer Usage===== |
| + | <code>export DISPLAY=:0</code> |
| | | |
| *Preview FHD | | *Preview FHD |
| | | |
− | <code>gst-launch-1.0 nvv4l2camerasrc device=/dev/video0 ! "video/x-raw(memory:NVMM),format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvoverlaysink sync=false</code> | + | <code>gst-launch-1.0 nvv4l2camerasrc device=/dev/video0 ! "video/x-raw(memory:NVMM),format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nv3dsink sync=false</code> |
| | | |
− | <code>gst-launch-1.0 nvv4l2camerasrc device=/dev/video0 ! "video/x-raw(memory:NVMM),format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)NV12" ! nvoverlaysink sync=false</code> | + | <code>gst-launch-1.0 nvv4l2camerasrc device=/dev/video0 ! "video/x-raw(memory:NVMM),format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)NV12" ! nv3dsink sync=false</code> |
| | | |
− | * Preview FHD(using xvimagesink sink) | + | * Preview FHD(using xvimagesink sink if supported) |
| | | |
| <code>export DISPLAY=:0</code> | | <code>export DISPLAY=:0</code> |
Line 429: |
Line 562: |
| *Preview 720p@60 (CS-MIPI-IMX307) | | *Preview 720p@60 (CS-MIPI-IMX307) |
| | | |
− | <code>gst-launch-1.0 nvv4l2camerasrc ! "video/x-raw(memory:NVMM),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 nvv4l2camerasrc ! "video/x-raw(memory:NVMM),format=(string)UYVY, width=(int)1280, height=(int)720, framerate=(fraction)60/1" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nv3dsink sync=false</code> |
| | | |
| *Preview 1280*1080@45 (CS-MIPI-SC132) | | *Preview 1280*1080@45 (CS-MIPI-SC132) |
| | | |
− | <code>gst-launch-1.0 nvv4l2camerasrc ! "video/x-raw(memory:NVMM),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> | + | <code>gst-launch-1.0 nvv4l2camerasrc ! "video/x-raw(memory:NVMM),format=(string)UYVY, width=(int)1280, height=(int)1080, framerate=(fraction)45/1" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nv3dsink sync=false</code> |
| | | |
| *Preview 640*480p@130 (CS-MIPI-IMX307) | | *Preview 640*480p@130 (CS-MIPI-IMX307) |
| | | |
− | <code>gst-launch-1.0 nvv4l2camerasrc ! "video/x-raw(memory:NVMM),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> | + | <code>gst-launch-1.0 nvv4l2camerasrc ! "video/x-raw(memory:NVMM),format=(string)UYVY, width=(int)640, height=(int)480, framerate=(fraction)130/1" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nv3dsink sync=false</code> |
| | | |
| *Preview 2 cameras 1080p HD | | *Preview 2 cameras 1080p HD |
Line 447: |
Line 580: |
| <code>CAPS="video/x-raw(memory:NVMM),format=(string)UYVY, width=1920, height=1080"</code> | | <code>CAPS="video/x-raw(memory:NVMM),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 nvv4l2camerasrc device=/dev/video0 ! $CAPS ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420"! comp. nvv4l2camerasrc device=/dev/video1 ! $CAPS ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420"! comp.</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 ! nv3dsink nvv4l2camerasrc device=/dev/video0 ! $CAPS ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420"! comp. nvv4l2camerasrc device=/dev/video1 ! $CAPS ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420"! comp.</code> |
− | | |
− | * Gstreamer cmd line for OpenCV
| |
− | | |
− | I think maybe OpenCV do not support I420 data format input,so you should convert it to BGR format.
| |
− | | |
− | <code>gst-launch-1.0 nvv4l2camerasrc ! video/x-raw(memory:NVMM), format=(string)UYVY, width=(int)1920, height=(int)1080 ! nvvidconv ! video/x-raw(memory:NVMM), format=(string)I420 ! nvvidconv ! video/x-raw, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink</code>
| |
| | | |
| *Record FHD in H.264 format to a video file | | *Record FHD in H.264 format to a video file |
Line 465: |
Line 592: |
| *Capturing FHD still image | | *Capturing FHD still image |
| | | |
− | <code>gst-launch-1.0 v4l2src num-buffers=1 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvjpegenc ! filesink location=jpgname.jpg</code> | + | <code>gst-launch-1.0 v4l2src num-buffers=1 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvjpegenc ! filesink location=jpgname.jp</code> |
| | | |
| ===== VEYE-MIPI-IMX335 gstreamer example ===== | | ===== VEYE-MIPI-IMX335 gstreamer example ===== |
Line 502: |
Line 629: |
| <code>v4l2-ctl -d /dev/video0 --set-ctrl sensor_mode=0</code> | | <code>v4l2-ctl -d /dev/video0 --set-ctrl sensor_mode=0</code> |
| | | |
− | <code>./veye5_mipi_i2c.sh -w -f videomode -p1 1</code> | + | <code>./veye5_mipi_i2c.sh -w -f videomode -p1 1 -b [busnum]</code> |
| | | |
| <code>v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=5376</code> | | <code>v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=5376</code> |
Line 508: |
Line 635: |
| Preview | | Preview |
| | | |
− | <code>gst-launch-1.0 nvv4l2camerasrc device=/dev/video0 ! "video/x-raw(memory:NVMM), width=(int)2592, height=(int)1944" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvoverlaysink sync=false</code> | + | <code>gst-launch-1.0 nvv4l2camerasrc device=/dev/video0 ! "video/x-raw(memory:NVMM), width=(int)2592, height=(int)1944" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nv3dsink sync=false</code> |
| | | |
| Framerate statistics | | Framerate statistics |
Line 518: |
Line 645: |
| <code>v4l2-ctl -d /dev/video0 --set-ctrl sensor_mode=3</code> | | <code>v4l2-ctl -d /dev/video0 --set-ctrl sensor_mode=3</code> |
| | | |
− | <code>./veye5_mipi_i2c.sh -w -f videomode -p1 4</code> | + | <code>./veye5_mipi_i2c.sh -w -f videomode -p1 4 -b [busnum]</code> |
| | | |
| <code>v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=5120</code> | | <code>v4l2-ctl -d /dev/video0 --set-ctrl preferred_stride=5120</code> |
Line 528: |
Line 655: |
| Video Replay | | Video Replay |
| | | |
− | <code>gst-launch-1.0 filesrc location=filename.mp4 ! qtdemux ! queue ! h264parse ! nvv4l2decoder ! nvoverlaysink -e</code> | + | <code>gst-launch-1.0 filesrc location=filename.mp4 ! qtdemux ! queue ! h264parse ! nvv4l2decoder ! nv3dsink -e</code> |
| | | |
| Capture | | Capture |
Line 534: |
Line 661: |
| <code>gst-launch-1.0 v4l2src num-buffers=1 ! "video/x-raw,format=(string)UYVY, width=(int)2560, height=(int)1440" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvjpegenc ! filesink location=jpgname.jpg</code> | | <code>gst-launch-1.0 v4l2src num-buffers=1 ! "video/x-raw,format=(string)UYVY, width=(int)2560, height=(int)1440" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvjpegenc ! filesink location=jpgname.jpg</code> |
| | | |
− | ====Video Control Toolkits Manual==== | + | ===== Jetson multimedia-api samples ===== |
| + | The [https://docs.nvidia.com/jetson/l4t-multimedia/index.html Jetson Linux API] is available on the Jetson platform for developers to use. Please refer to the official nVidia documentation for the installation of the jetson_multimedia_api package. |
| + | |
| + | For VEYE and CS series cameras, the ISP function is already integrated in the camera, so you cannot use libargus to get data, but can directly use the standard V4L2 interface to get data from the /dev/videoX device file. |
| + | |
| + | The following two samples can be run directly. |
| + | |
| + | ====== 12_camera_v4l2_cuda ====== |
| + | <code>./camera_v4l2_cuda -d /dev/video0 -s 1920x1080 -f UYVY</code> |
| + | |
| + | ====== v4l2cuda ====== |
| + | <code>./capture-cuda -d /dev/video0 -f UYVY -m -o out.ppm -s 1920x1080 -c 1</code> |
| + | |
| + | ===== v4l2-ctl Application Examples ===== |
| + | |
| + | ======install v4l2-utils====== |
| + | <code>sudo apt-get install v4l-utils</code> |
| + | ======Configure parameters using v4l2-ctl====== |
| + | |
| + | * List the data formats supported by the camera |
| + | |
| + | <code>v4l2-ctl -d /dev/video0 --list-formats-ext</code> |
| | | |
− | *i2c bus description: | + | * Frame rate statistics |
| | | |
− | For AGX-Xavier and TX2, ADP-N1 has 6 MIPI CSI-2 interface [A-F],the corresponding i2c address is[30-35].
| + | <code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=UYVY--stream-mmap --stream-count=-1 --stream-to=/dev/null</code> |
| | | |
− | For Xavier NX, TX2 NX,the corresponding i2c address is CAM0--10,CAM1--9.
| + | * Save image to file |
| | | |
− | For Nano A02,Nano 2GB, the corresponding i2c address is 6.
| + | <code>v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=UYVY --stream-mmap --stream-count=1 --stream-to=uyvy-1920x1080.yuv</code> |
| | | |
− | For Nano B01, the corresponding i2c address is CAM0--7,CAM1--8.
| + | ===== yavta ===== |
| | | |
− | It is also the same as the X part of dmesg message:
| + | ======install yavta====== |
| + | <code>git clone <nowiki>https://github.com/veyeimaging/yavta.git</nowiki></code> |
| | | |
− | <code>subdev veyeX X-003b bound</code> | + | <code>cd yavta;make</code> |
| | | |
− | <code>subdev csimx307 X-003b bound</code> | + | ====== Save image to file ====== |
| + | <code>./yavta -c1 -FUYVY-1920x1080.yuv --skip 0 -f UYVY -s 1920x1080 /dev/video0</code> |
| | | |
− | <code>subdev cssc132 X-003b bound</code>
| + | ===== Opencv ===== |
| + | To import camera data from v4l2 devices to opencv, we provide several samples. |
| | | |
− | '''using -b option to identify which bus you want to use.'''
| + | We provide 2 samples [https://github.com/veyeimaging/nvidia_jetson_veye_bsp/tree/master/samples/opencv here]. |
| + | |
| + | ====Using i2c script to modify camera parameters==== |
| | | |
| *VEYE-MIPI-CAM2M Series(VEYE-MIPI-327、VEYE-MIPI-IMX327S、VEYE-MIPI-IMX462、VEYE-MIPI-IMX385) | | *VEYE-MIPI-CAM2M Series(VEYE-MIPI-327、VEYE-MIPI-IMX327S、VEYE-MIPI-IMX462、VEYE-MIPI-IMX385) |
Line 567: |
Line 720: |
| | | |
| Video Control Toolkits Manual :[[5m mipi i2c user guide|VEYE-MIPI-IMX335 I2C]] | | Video Control Toolkits Manual :[[5m mipi i2c user guide|VEYE-MIPI-IMX335 I2C]] |
− | ===Realtimes RTSO-9001=== | + | ===How to port the driver to a third party board=== |
− | ====Hardware Setup==== | + | |
− | [[File:CS-MIPI-307 to ruitai 9001tx2.jpg|center|thumb|800x800px|CS-MIPI-IMX307 and RTSO-9001(TX2)]]
| + | ==== driver porting ==== |
| + | For Image, we have added functionality to the official standard Image and have not made any deletions. In general, you can use our compiled Image directly. for special cases, please refer to the source code for integration. |
| + | |
| + | For modules it is even easier to just use them. Compiling from source code and is very simple, so I won't go into details here. |
| + | |
| + | ==== dts porting ==== |
| + | We only provide dtb for some boards of Nano, TX2, Xavier, Orin. For the types not provided, it is necessary to: |
| + | |
| + | 1. get the dts source code of that board. |
| + | |
| + | 2. put our camera related dts to the whole. |
| + | |
| + | 3. recompile to get the dtb of the corresponding board. |
| + | |
| + | The operation steps are not complicated, but there are some third-party base board manufacturers do not open dts source code. This will require the cooperation of all parties to do so. |
| + | |
| + | === FAQ and bug list === |
| | | |
| + | ==== Problem of system update not taking effect on a system with an SSD hard drive ==== |
| + | If an SSD hard drive is installed in a system and mounted on the / directory, it may cause regular system update operations (Image, ko, dtb) to be completely ineffective. |
| | | |
− | Matching with Realtimes RTSO-9001, you need to use RTST-RPI adapter board.
| + | The reason for this is that the board comes with an eMMC storage device, and the Image, ko, and dtb that take effect during the boot stage are stored in the eMMC. |
| | | |
− | Note: the power supply capacity of the MIPI CSI-2 interface of the current version of RTSO-9001 is not enough to support the power requirements of our camera, which requires an additional 5V power supply to the camera. It is not shown in the picture above.
| + | After the boot is completed, if the SSD hard drive is mounted on the / directory, it may cause the files stored on the eMMC to be inaccessible. |
| | | |
− | ====Software bsp====
| + | The solution in this case is to manually mount the ''mmcblk0p1'' partition of the eMMC to a specific directory, and perform all system update operations based on this directory. |
| | | |
− | *The corresponding directory for Realtimes RTSO-9001, is:
| + | ==== VEYE cameras on Jetpack5.x ==== |
| + | Jetpack5.x has more stringent requirements for mipi signals in xavier and orin platforms. VEYE-MIPI-xxx series cameras need firmware hdver>=7 to be perfectly supported. |
| | | |
− | nvidia_jetson_veye_bsp\TX2\JetPack_4.2.2_Linux_RTSO-9001
| + | ==== CS-MIPI-IMX307 combined with Orin nano and Orin NX Green Screen ==== |
| + | When CS-MIPI-IMX307 is powered by the 3.3V mode of the FFC cable, the MIPI receiver state machine of Orin nano and Orin NX (Jetpack5.1.1) will enter an incorrect state. |
| | | |
− | *Subject to the agreement with Ruitai, we do not release the source code
| + | It is recommended to refer to this [[Power supply mode switching|article]] and modify the power supply mode of CS-MIPI-IMX307 to use the 5V power supply mode. |
− | *Our code have been submitted to Realtimes, and customers are advised to contact Realtimes for a complete version of the supported image.
| |
| | | |
| + | ==== Jetpack5.0.1 DP ==== |
| + | This version has many bugs, such as not supporting nvv4l2camerasrc, not recommended to use. |
| + | |
| + | ==== nv3dsink ==== |
| + | Jetpack 5.x no longer supports nvoverlaysink, use nv3dsink instead. |
| + | |
| + | ==== cboot of L4T32.7.2 on Xavier ==== |
| + | For the Xavier series, there is a bug in the cboot of L4T32.7.2 that must be fixed before the upgrade can be done. |
| + | |
| + | [https://elinux.org/Jetson/L4T/r32.7.x_patches <nowiki>[Cboot] Cboot in 32.7.2 fails to read extlinux.conf</nowiki>] |
| + | |
| + | We compiled the correct version of cboot and put it [https://github.com/veyeimaging/nvidia_jetson_veye_bsp/tree/master/cboot_l4t_32.7.2 here]. |
| + | |
| + | After downloading, put it in Linux_for_Tegra/bootloader directory and execute the following command on PC to burn cboot. |
| + | |
| + | *AGX Xavier |
| + | |
| + | <code>sudo ./flash.sh -r -k cpu-bootloader jetson-xavier mmcblk0p1</code> |
| + | |
| + | *Xavier NX |
| + | |
| + | <code>sudo ./flash.sh -r -k cpu-bootloader jetson-xavier-nx-devkit mmcblk0p1</code> |
| === Document History === | | === Document History === |
| + | |
| + | *20230427 |
| + | |
| + | Add support for Jetpack5.1.1. |
| + | |
| + | *20230222 |
| + | |
| + | Add support for Jetpack5.1. |
| + | |
| + | *20220831 |
| + | |
| + | Improve the description of VEYE series and MV series under Jetpack 5.0.2. |
| + | |
| + | * 20220824 |
| + | |
| + | Add support for Jetpack5.0.2. |
| + | |
| + | * 20220720 |
| + | |
| + | Add multimedia-api samples and v4l2 samples. |
| + | |
| + | *20220714 |
| + | |
| + | Add L4T32.7.2 Note。 |
| + | |
| + | * 20220629 |
| + | |
| + | Add support for Jetpack 5.0.1DP and tune through AGX-Orin. |
| | | |
| * 20220110 | | * 20220110 |
Line 612: |
Line 834: |
| L4T Doc: https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3242/index.htm | | L4T Doc: https://docs.nvidia.com/jetson/archives/l4t-archived/l4t-3242/index.htm |
| | | |
− | TX2 user guide: [https://developer.download.nvidia.cn/embedded/L4T/r28_Release_v2.0/GA/Docs/Jetson_TX1_and_TX2_Developer_Kits_User_Guide.pdf?lumI95GW6BEyMmhP1Is8E79OYo105-tpsC2bOVQmBZ6Tw8AkLU4pSDMPCuzOaEonWMiDO2hliXbNvtkH9do81TNIXmLZGGoV7xoEehyEgfc2WO8e0Czz5chLSHoCqIuPLL1 link] | + | TX2 user guide: [https://developer.download.nvidia.cn/embedded/L4T/r28_Release_v2.0/GA/Docs/Jetson_TX1_and_TX2_Developer_Kits_User_Guide.pdf?lumI95GW6BEyMmhP1Is8E79OYo105-tpsC2bOVQmBZ6Tw8AkLU4pSDMPCuzOaEonWMiDO2hliXbNvtkH9do81TNIXmLZGGoV7xoEehyEgfc2WO8e0Czz5chLSHoCqIuPLL1 link]<br /> |
− | | |
− | Realtimes website:http://www.realtimes.cn/
| |
− | <br /> | |