Jetson Camera e3653-dual-Hawk module

It looks like in the latest Jetpack there is support for E3653 + Hawk cameras:

	overlay-name = "Jetson Camera e3653-dual-Hawk module";
	jetson-header-name = "Jetson AGX CSI Connector";
	compatible = "nvidia,p3737-0000+p3701-0000", "nvidia,p3737-0000+p3701-0004", "nvidia,p3737-0000+p3701-0005";

I have the deserializer E3653 and Hawk cameras installed on AGX Orin Dev-Kit, but the cameras don’t show up.
Is there anything specific that needs to be done to enable the cameras?

hello Agtonomy,

had you execute Jetson-IO to configure the CSI connector? may I know what’s your steps in detail. thanks

I did run the sequence

 |                 Configure Jetson AGX CSI Connector                 |
 |                 Configure for compatible hardware                  |
 |                Jetson Camera e3653-dual-Hawk module                |
 |                                Back                                |
 |                          Save pin changes                          |

I later ran it again and added from the main menu:

 |                Save and reboot to reconfigure pins                 |

Got a message

 |                    Configuration saved to file                     |
/boot/kernel_tegra234-p3701-0000-p3737-0000-user-custom.dtb.          |

and rebooted to the custom dtb.
At this time /dev/videoN, N=0…3 were created, however they don’t seem to work:

root@orin:~# v4l2-ctl --list-devices
NVIDIA Tegra Video Input Device (platform:tegra-camrtc-ca):
        /dev/media0

vi-output, ar0234 30-0018 (platform:tegra-capture-vi:1):
        /dev/video0
        /dev/video1
        /dev/video2
        /dev/video3
root@orin:~# gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! 'video/x-raw(memory:NVMM),width=1920, height=1200, format=NV12' ! nvvidconv ! 'video/x-raw(memory:NVMM),format=I420' ! fakesink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp, execute:751 No cameras available
Got EOS from element "pipeline0".
Execution ended after 0:00:00.002398307
Setting pipeline to NULL ...
Freeing pipeline ...
(Argus) Error EndOfFile: Unexpected error in reading socket (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 277)
(Argus) Error EndOfFile: Receive worker failure, notifying 1 waiting threads (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 350)
(Argus) Error InvalidState: Argus client is exiting with 1 outstanding client threads (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 366)
(Argus) Error EndOfFile: Receiving thread terminated with error (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadWrapper(), line 379)
(Argus) Error EndOfFile: Client thread received an error from socket (in src/rpc/socket/client/ClientSocketManager.cpp, function send(), line 145)
(Argus) Error EndOfFile:  (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function dispatch(), line 91)
root@orin:~#

I also noticed that it doesn’t look like the tegra234-p3737-camera-dual-hawk-ar0234-e3653-overlay.dtbo device tree overlay is included in the BSP.
This is from p3737-0000+p3701-0000.conf:

OVERLAY_DTB_FILE="${OVERLAY_DTB_FILE},tegra234-p3737-camera-dual-imx274-overlay.dtbo,tegra234-p3737-camera-e3331-overlay.dtbo,tegra234-p3737-camera-e3333-overlay.dtbo,tegra234-p3737-camera-imx185-overlay.dtbo,tegra234-p3737-camera-imx390-overlay.dtbo";

please check the release tag to confirm the L4T version you’re now using, i.e. $ cat /etc/nv_tegra_release

BTW,
by checking r35.3.1 public release sources, this device tree overlay is included in the BSP.
for example, $public_sources/r35.3.1/kernel_src/hardware/nvidia/platform/t23x/concord/kernel-dts/tegra234-p3737-camera-dual-hawk-ar0234-e3653-overlay.dts

root@orin:~# cat /etc/nv_tegra_release
# R35 (release), REVISION: 3.1, GCID: 32827747, BOARD: t186ref, EABI: aarch64, DATE: Sun Mar 19 15:19:21 UTC 2023

it looks you’re working with the latest release version,
could you please check Applications Using V4L2 IOCTL Directly by using V4L2 IOCTL to verify basic camera functionality.

It appears that v4l2 works with the camera

root@orin:~# v4l2-ctl -d 0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
        Type: Video Capture

        [0]: 'BA10' (10-bit Bayer GRGR/BGBG)
                Size: Discrete 1920x1200
                        Interval: Discrete 0.017s (60.000 fps)
root@orin:~#
root@orin:~# v4l2-ctl --stream-mmap -d 0 --stream-count=300
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<
root@orin:~#
root@orin:~# gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! 'video/x-raw(memory:NVMM), width=1920, height=1200, format=NV12, framerate=30/1' ! fakesink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp, execute:751 No cameras available
Got EOS from element "pipeline0".
Execution ended after 0:00:00.004197746
Setting pipeline to NULL ...
Freeing pipeline ...
(Argus) Error EndOfFile: Unexpected error in reading socket (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 277)
(Argus) Error EndOfFile: Receive worker failure, notifying 1 waiting threads (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 350)
(Argus) Error InvalidState: Argus client is exiting with 1 outstanding client threads (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 366)
(Argus) Error EndOfFile: Receiving thread terminated with error (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadWrapper(), line 379)
(Argus) Error EndOfFile: Client thread received an error from socket (in src/rpc/socket/client/ClientSocketManager.cpp, function send(), line 145)
(Argus) Error EndOfFile:  (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function dispatch(), line 91)
root@orin:~#

hello Agtonomy,

do you also know the data-rate of this camera outputting?
is this with data-rate larger then 1.5Gbps, it might be the issue of skew calibration.

I don’t have this information.
I am using the default configuration that is included in the latest Jetpack 5.1.1

hello Agtonomy,

by checking the overlay file again…
i.e. tegra234-p3737-camera-dual-hawk-ar0234-e3653-overlay.dts

it looks there’re 4 camera devices register to system.
they’re…ar0234 30-0018, ar0234 30-0010, ar0234 31-0018, ar0234 31-0010.

it looks like the camera you’ve connected isn’t the default device launched by Argus, which recognize 1st camera device as ar0234 30-0018 since its position property as bottomleft.

may I know what’s your camera hardware connections.
do you also have four camera device connected?
or… you’ve only single camera, please also check kernel init message for the registered camera device.

I have 2 dual Hawk cameras (4 sensors) connected to the E3653 deserializer ports board (ports 1 and 2)

They all are recognized by the system, initialized and respond to v4l2:

root@orin:~# dmesg | grep ar0234 | grep bound
[   18.778136] tegra-camrtc-capture-vi tegra-capture-vi: subdev ar0234 30-0018 bound
[   19.175619] tegra-camrtc-capture-vi tegra-capture-vi: subdev ar0234 30-0010 bound
[   19.579421] tegra-camrtc-capture-vi tegra-capture-vi: subdev ar0234 31-0018 bound
[   19.992145] tegra-camrtc-capture-vi tegra-capture-vi: subdev ar0234 31-0010 bound
root@orin:~#
root@orin:~# v4l2-ctl --stream-mmap -d 0 --stream-count=32
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps

root@orin:~# v4l2-ctl --stream-mmap -d 1 --stream-count=32
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps

root@orin:~# v4l2-ctl --stream-mmap -d 2 --stream-count=32
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps

root@orin:~# v4l2-ctl --stream-mmap -d 3 --stream-count=32
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 30.00 fps

Here are the badges:

root@orin:~# cat /sys/firmware/devicetree/base/tegra-camera-platform/modules/module0/badge; echo
dual_hawk_bottomleft
root@orin:~# cat /sys/firmware/devicetree/base/tegra-camera-platform/modules/module1/badge; echo
dual_hawk_bottomright
root@orin:~# cat /sys/firmware/devicetree/base/tegra-camera-platform/modules/module2/badge; echo
dual_hawk_centerleft
root@orin:~# cat /sys/firmware/devicetree/base/tegra-camera-platform/modules/module3/badge; echo
dual_hawk_centerright

However gstreamer fails:

root@orin:~# gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! 'video/x-raw(memory:NVMM), width=1920, height=1200, format=NV12, framerate=30/1' ! fakesink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp, execute:751 No cameras available
Got EOS from element "pipeline0".
Execution ended after 0:00:00.003105750
Setting pipeline to NULL ...
Freeing pipeline ...
(Argus) Error EndOfFile: Unexpected error in reading socket (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 277)
(Argus) Error EndOfFile: Receive worker failure, notifying 1 waiting threads (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 350)
(Argus) Error InvalidState: Argus client is exiting with 1 outstanding client threads (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 366)
(Argus) Error EndOfFile: Client thread received an error from socket (in src/rpc/socket/client/ClientSocketManager.cpp, function send(), line 145)
(Argus) Error EndOfFile: Receiving thread terminated with error (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadWrapper(), line 379)
(Argus) Error EndOfFile:  (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function dispatch(), line 91)
root@orin:~#

Here is the argus log:

Jun 12 23:50:58 orin nvargus-daemon[1853]: === NVIDIA Libargus Camera Service (0.99.33)=== Listening for connections...=== gst-launch-1.0[1856]: Connection established (FFFFB17E5900)OFParserListModules: module list: /proc/device-tree/tegra-camera-platform/modules/module0
Jun 12 23:50:58 orin nvargus-daemon[1853]: OFParserListModules: module list: /proc/device-tree/tegra-camera-platform/modules/module1
Jun 12 23:50:58 orin nvargus-daemon[1853]: OFParserListModules: module list: /proc/device-tree/tegra-camera-platform/modules/module2
Jun 12 23:50:58 orin nvargus-daemon[1853]: OFParserListModules: module list: /proc/device-tree/tegra-camera-platform/modules/module3
Jun 12 23:50:58 orin nvargus-daemon[1853]: NvPclHwGetModuleList: WARNING: Could not map module to ISP config string
Jun 12 23:50:58 orin nvargus-daemon[1853]: NvPclHwGetModuleList: No module data found
Jun 12 23:50:58 orin nvargus-daemon[1853]: NvPclHwGetModuleList: WARNING: Could not map module to ISP config string
Jun 12 23:50:58 orin nvargus-daemon[1853]: NvPclHwGetModuleList: No module data found
Jun 12 23:50:58 orin nvargus-daemon[1853]: NvPclHwGetModuleList: WARNING: Could not map module to ISP config string
Jun 12 23:50:58 orin nvargus-daemon[1853]: NvPclHwGetModuleList: No module data found
Jun 12 23:50:58 orin nvargus-daemon[1853]: NvPclHwGetModuleList: WARNING: Could not map module to ISP config string
Jun 12 23:50:58 orin nvargus-daemon[1853]: NvPclHwGetModuleList: No module data found
Jun 12 23:50:58 orin nvargus-daemon[1853]: OFParserGetVirtualDevice: NVIDIA Camera virtual enumerator not found in proc device-tree
Jun 12 23:50:58 orin nvargus-daemon[1853]: ---- imager: Found override file [/var/nvidia/nvcam/settings/camera_overrides.isp]. ----
Jun 12 23:50:58 orin nvargus-daemon[1853]: CAM: serial no file already exists, skips storing againLSC: LSC surface is not based on full res!
Jun 12 23:50:58 orin nvargus-daemon[1853]: ---- imager: Found override file [/var/nvidia/nvcam/settings/camera_overrides.isp]. ----
Jun 12 23:50:58 orin nvargus-daemon[1853]: CAM: serial no file already exists, skips storing againLSC: LSC surface is not based on full res!
Jun 12 23:50:58 orin nvargus-daemon[1853]: ---- imager: Found override file [/var/nvidia/nvcam/settings/camera_overrides.isp]. ----
Jun 12 23:50:58 orin nvargus-daemon[1853]: CAM: serial no file already exists, skips storing againLSC: LSC surface is not based on full res!
Jun 12 23:50:58 orin nvargus-daemon[1853]: (Argus) Error BadParameter: Invalid lens disptortion type (in src/api/CameraDeviceImpl.cpp, function initialize(), line 344)
Jun 12 23:50:58 orin nvargus-daemon[1853]: (Argus) Error BadParameter:  (propagating from src/api/CameraProviderImpl.cpp, function initialize(), line 116)
Jun 12 23:50:58 orin nvargus-daemon[1853]: (Argus) Error BadParameter:  (propagating from src/api/GlobalProcessState.cpp, function createCameraProvider(), line 220)
Jun 12 23:50:58 orin nvargus-daemon[1853]: === gst-launch-1.0[1856]: CameraProvider initialized (0xffffac0bb410)=== gst-launch-1.0[1856]: CameraProvider destroyed (0xffffac0bb410)
Jun 12 23:50:58 orin systemd[1]: nvargus-daemon.service: Main process exited, code=killed, status=11/SEGV

hello Agtonomy,

do you have tuning parameter to configure distortion_type? such as… polynomial distortion, or fisheye distortion.

I don’t do any custom tuning. All parameters come from the default device tree included with Jetpack.

@Agtonomy
Please try this driver.

@SimonZhu Thank you for the driver. We have been using drivers provided by Leopard Img. for quite a while. We customize the kernel, device tree, and rootfs, so every time there is a release update we face significant integration work. Since the “dual_hawk” driver is now in the Jetpack release, I was hoping we would have one thing less to worry about. Unfortunately it does not seem to be the case.

@Agtonomy
For the original BSP release on Jetson AGX Orin Developer kit, please try below steps.

  1. Flash original OS image
  2. After boot up to Jetson, open a terminal and do
    sudo /opt/nvidia/jetson-io/jetson-io.py

then select E3653.
3. Reboot Jetson

I have done it and it didn’t work. See the beginning of the topic:

The driver from Leopard Img. works.

hello SimonZhu,

please see-also comment #16.
here should be the root cause for launching with Argus.

since @Agtonomy has confirmed the driver from Leopard Img works.
may I know what’s the difference, did you have tuning parameter to configure distortion_type?

@Agtonomy @JerryChang
Our team tested this with original driver of R35.3.1 and confirmed that it doesn’t work. Please use the driver we provided.
The driver patches (based on original kernel code) can be downloaded from dropbox link in page1 of our driver guide for your reference.

hello SimonZhu,

it looks we need to check-in some code back to our release code-line.
could you please submit create an NvBug ticket regarding this action. thanks!