Nvidia Jetson Orin Nano Devkit integration with IMX519 - Not receiving any frames

# IMX519 Camera on NVIDIA Jetson Orin Nano DevKit - No Frames Captured

## Problem Summary

- **Camera:** ArduCAM 16MP IMX519

  • **Platform:** NVIDIA Jetson Orin Nano Developer Kit (P3768-0000 + P3767-0005)
  • **JetPack:** 6.2 (L4T R36.4.7)
  • **Kernel:** 5.15.148-tegra (OOT variant)
  • **Driver:** ArduCAM IMX519 installed via `install_full.sh -m imx519`

The IMX519 camera is correctly detected at the hardware and driver level (I2C communication works, V4L2 device is created, sensor modes are enumerated), but **frame capture fails**. The system hangs when attempting to stream video data.

### Primary Symptoms

1. **GStreamer Pipeline Failure:** (Full pipeline command and logs shown in the “What fails” section below)
```bash
nvbuf_utils: dmabuf_fd -1 mapped entry NOT found
Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp, threadExecute:734 NvBufSurfaceFromFd Failed.
```

2. **V4L2 Streaming Hangs Indefinitely:**

```bash
v4l2-ctl -d /dev/video0 --stream-mmap --stream-count=2

Command hangs, never returns frames

```

When we try to stream with v4l2, the **Kernel dmesg shows VI capture timeouts:**
```
tegra-camrtc-capture-vi tegra-capture-vi: uncorr_err: request timed out after 2500 ms
tegra-camrtc-capture-vi tegra-capture-vi: err_rec: attempting to reset the capture channel
```

-–

## System Information

### L4T Release

```
cat /etc/nv_tegra_release
# R36 (release), REVISION: 4.7, GCID: 41062509, BOARD: generic, EABI: aarch64
# KERNEL_VARIANT: oot
```

### Installed nvidia-l4t packages (all at version 36.4.7-20250918154033)
- nvidia-l4t-camera
- nvidia-l4t-kernel (5.15.148-tegra-36.4.7)
- nvidia-l4t-kernel-dtbs
- nvidia-l4t-kernel-oot-modules
- nvidia-l4t-multimedia
- nvidia-l4t-gstreamer

### IMX519 Kernel Module
```
$ lsmod | grep -i imx
imx519 24576 0
tegra_camera 217088 4 nvhost_isp5,nvhost_nvcsi_t194,imx519,nvhost_vi5
```

### Boot Configuration (`/boot/extlinux/extlinux.conf`)
```
TIMEOUT 30
DEFAULT JetsonIO

LABEL JetsonIO
MENU LABEL Custom Header Config:
LINUX /boot/arducam/Image
FDT /boot/arducam/dts/dtb/tegra234-p3768-0000+p3767-0005-nv.dtb
INITRD /boot/initrd
APPEND ${cbootargs} root=/dev/mmcblk0p1 rw rootwait rootfstype=ext4 mminit_loglevel=4 console=ttyTCU0,115200 firmware_class.path=/etc/firmware fbcon=map:0 video=efifb:off console=tty0
OVERLAYS /boot/arducam/dts/tegra234-p3767-camera-p3768-imx519-dual.dtbo
```

-–

## What Works (Hardware/Driver Detection)

### I2C Communication
Camera detected on I2C bus 9 at address 0x1a (UU indicates driver is bound):
```
$ i2cdetect -y -r 9
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: – – – – – – – –
10: – – – – – – – – – – UU – – – – –
20: – – – – – – – – – – – – – – – –

```

### V4L2 Device Created
```
$ ls -l /dev/video*
crw-rw----+ 1 root video 81, 0 ene 15 12:14 /dev/video0
```

### Sensor Modes Enumerated
```
$ v4l2-ctl --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture

    \[0\]: 'RG10' (10-bit Bayer RGRG/GBGB)
            Size: Discrete 4656x3496
                    Interval: Discrete 0.111s (9.000 fps)
            Size: Discrete 3840x2160
                    Interval: Discrete 0.059s (17.000 fps)
            Size: Discrete 1920x1080
                    Interval: Discrete 0.017s (60.000 fps)
            Size: Discrete 1280x720
                    Interval: Discrete 0.008s (120.000 fps)

```

### GPIO Reset Lines Assigned
```
$ sudo gpioinfo | grep -i “cam”
line 49: “PH.06” “cam_reset_gpio” output active-high [used]
line 138: “PAC.00” “cam_reset_gpio” output active-high [used]
```

### nvargus-daemon Running
```
$ systemctl status nvargus-daemon
● nvargus-daemon.service - Argus daemon
Loaded: loaded
Active: active (running)
```

### Driver Boot Messages (dmesg)
```
[ 11.118023] imx519 9-001a: tegracam sensor driver:imx519_v2.0.6
[ 11.419223] tegra-camrtc-capture-vi tegra-capture-vi: subdev imx519 9-001a bound
[ 11.477512] imx519 10-001a: tegracam sensor driver:imx519_v2.0.6
[ 11.778729] imx519 10-001a: imx519_board_setup: error during i2c read probe (-121)
[ 11.778763] imx519 10-001a: board setup failed
[ 11.778853] imx519: probe of 10-001a failed with error -121
```
Note: The error on bus 10 (10-001a) is expected - only one camera is connected (CAM1 on bus 9).

### Device Tree Module Mapping (`/proc/device-tree/tegra-camera-platform/modules/module0`)
```
name: module0
orientation: 1
position: front
badge: jakku_front_arducam

drivernode0:
name: drivernode0
pcl_id: v4l2_sensor
sysfs-device-tree: /sys/firmware/devicetree/base/bus@0/cam_i2cmux/i2c@0/arducam_imx519_a@1a
```

-–

## What Fails (Data Capture)

### GStreamer Capture Attempt
```
$ gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! fakesink
Setting pipeline to PAUSED …
Pipeline is live and does not need PREROLL …
Pipeline is PREROLLED …
Setting pipeline to PLAYING …
New clock: GstSystemClock
GST_ARGUS: Creating output stream
CONSUMER: Waiting until producer is connected…
GST_ARGUS: Available Sensor modes :
GST_ARGUS: 4656 x 3496 FR = 9,000000 fps …
GST_ARGUS: 3840 x 2160 FR = 17,000000 fps …
GST_ARGUS: 1920 x 1080 FR = 59,999999 fps …
GST_ARGUS: 1280 x 720 FR = 120,000005 fps …
GST_ARGUS: Running with following settings:
Camera index = 0
Camera mode = 2
Output Stream W = 1920 H = 1080
Frame Rate = 59,999999
GST_ARGUS: Setup Complete, Starting captures for 0 seconds
GST_ARGUS: Starting repeat capture requests.
CONSUMER: Producer has connected; continuing.
nvbuf_utils: dmabuf_fd -1 mapped entry NOT found
Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp, threadExecute:734 NvBufSurfaceFromFd Failed.
Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp, threadFunction:245 (propagating)
Got EOS from element “pipeline0”.
Execution ended after 0:00:04.014246938
```

### V4L2 Direct Capture Attempt
```
$ v4l2-ctl -c bypass_mode=0 --stream-mmap --stream-count=2 -d /dev/video0
# Hangs indefinitely, no output, no frames captured
```

### Kernel Messages During V4L2 Hang (dmesg -w)
```
[ 2435.145570] tegra-camrtc-capture-vi tegra-capture-vi: uncorr_err: request timed out after 2500 ms
[ 2435.145595] tegra-camrtc-capture-vi tegra-capture-vi: err_rec: attempting to reset the capture channel
[ 2435.146818] tegra-camrtc-capture-vi tegra-capture-vi: err_rec: successfully reset the capture channel
[ 2437.649453] tegra-camrtc-capture-vi tegra-capture-vi: uncorr_err: request timed out after 2500 ms
[ 2437.649471] tegra-camrtc-capture-vi tegra-capture-vi: err_rec: attempting to reset the capture channel
[ 2437.651153] tegra-camrtc-capture-vi tegra-capture-vi: err_rec: successfully reset the capture channel
```

### Kernel Warning When Interrupting Hung V4L2 Process (Ctrl+C)
```
[ 3459.698555] WARNING: CPU: 3 PID: 5209 at drivers/media/common/videobuf2/videobuf2-core.c:1995 vb2_buffer_done+0x468/0x4e0 [videobuf2_common]

[ 3459.698879] vb2_buffer_done+0x468/0x4e0 [videobuf2_common]
[ 3459.698890] vb2_core_queue_release+0x34/0x1f0 [videobuf2_common]
[ 3459.698900] _vb2_fop_release+0x98/0xc0 [videobuf2_v4l2]
[ 3459.698940] tegra_channel_set_power+0x29c/0x510 [tegra_camera]

[ 3460.704137] videobuf2_common: driver bug: stop_streaming operation is leaving buf 000000005e773be2 in active state
[ 3460.704148] videobuf2_common: driver bug: stop_streaming operation is leaving buf 00000000d7ed99ac in active state
[ 3460.704153] videobuf2_common: driver bug: stop_streaming operation is leaving buf 00000000d85522cd in active state
[ 3460.704157] videobuf2_common: driver bug: stop_streaming operation is leaving buf 0000000018624555 in active state
```

### nvargus-daemon Logs (journalctl -u nvargus-daemon)
```
NvPclHwGetModuleList: WARNING: Could not map module to ISP config string
NvPclHwGetModuleList: No module data found
OFParserGetVirtualDevice: NVIDIA Camera virtual enumerator not found in proc device-tree
(NvCamV4l2) Error ModuleNotPresent: V4L2Device not available (in v4l2_device.cpp, function findDevice(), line 256)
NvPclDriverInitializeData: Unable to initialize driver v4l2_sensor
NvPclInitializeDrivers: error: Failed to init camera sub module v4l2_sensor
NvPclStartPlatformDrivers: Failed to start module drivers
NvPclStateControllerOpen: Failed ImagerGUID 1. (error 0xA000E)
SCF: Error InvalidState: Timeout!! Skipping requests on sensor GUID 0, capture sequence ID = 0
SCF: Error Timeout: Sending critical error event for Session 0
```

-–

## Device Tree Overlay Configuration

Using `tegra234-p3767-camera-p3768-imx519-dual.dtbo` from ArduCAM’s installer.

(Full running Device Tree (compiled from /proc/device-tree) attached running.txt (325.6 KB))

### Camera A Configuration (arducam_imx519_a@1a)
```
arducam_imx519_a@1a {
compatible = “arducam,imx519”;
reg = <0x1a>;
reset-gpios = <&gpio 0x3e 0>;
devnode = “video0”;

mode0 {  /\* 4656x3496 @ 9fps \*/
    tegra_sinterface = "serial_b";
    phy_mode = "DPHY";
    num_lanes = "2";
    lane_polarity = "6";
    pix_clk_hz = "300000000";
    mclk_khz = "24000";
    cil_settletime = "0";
    csi_pixel_bit_depth = "10";
}
/\* mode1, mode2, mode3 follow same pattern \*/

}
```

### Camera C Configuration (arducam_imx519_c@1a) - for second camera slot
```
arducam_imx519_c@1a {
compatible = “arducam,imx519”;
reg = <0x1a>;
reset-gpios = <&gpio 0xa0 0>;
devnode = “video1”;

mode0 {
    tegra_sinterface = "serial_c";
    lane_polarity = "0";
    /\* other settings same as camera A \*/
}

}
```

### NVCSI/VI Pipeline Configuration
```
tegra-capture-vi {
num-channels = <0x02>;
ports {
port@0 {
endpoint { port-index = <0x01>; bus-width = <0x02>; }
}
port@1 {
endpoint { port-index = <0x02>; bus-width = <0x02>; }
}
}
}

nvcsi@15a00000 {
num-channels = <0x02>;
channel@0 {
ports {
port@0 { endpoint@0 { port-index = <0x01>; bus-width = <0x02>; } }
}
}
channel@1 {
ports {
port@0 { endpoint@2 { port-index = <0x02>; bus-width = <0x02>; } }
}
}
}
```

### DTC Decompilation Warnings
When decompiling the overlay with `dtc`, 44 warnings are generated. Key warnings:
```
Warning (gpios_property): arducam_imx519_a@1a:reset-gpios: Could not get phandle node for (cell 1)
Warning (gpios_property): arducam_imx519_c@1a:reset-gpios: Could not get phandle node for (cell 1)
Warning (i2c_bus_bridge): cam_i2cmux/i2c@0: incorrect #address-cells for I2C bus
Warning (i2c_bus_bridge): cam_i2cmux/i2c@1: incorrect #address-cells for I2C bus
```

-–

## What We Have Already Tried

### Hardware Verification
- **Platform:** NVIDIA Jetson Orin Nano Developer Kit, tried on two different boards. Same error.
- **Tested on both CAM0 (J20) and CAM1 (J21) ports** - same failure on both
- **This setup used to work** - stopped working spontaneously
- **Tried multiple different CSI ribbon cables** (22-pin, 0.5mm pitch)
- **Tried multiple different IMX519 cameras** - all exhibit same behavior
- **Tried other cameras, including IMX219, and AR0234 Jetvariety cameras**
- **We have a Jetson Orin Nano Devkit** where the same cameras work successfully, so we know it is not a camera hardware issue.

### Software Troubleshooting

1. **Restarting nvargus-daemon:**
```bash
sudo systemctl restart nvargus-daemon
```

2. **Manually setting camera power and reset GPIO pins:**

  • Toggled GPIO lines PH.06 and PAC.00

3. **Tried different resolutions/formats:**
```bash
v4l2-ctl -d /dev/video0 --set-fmt-video=width=1280,height=720,pixelformat=RG10
```

4. **Tried bypass_mode settings:**
```bash
v4l2-ctl -c bypass_mode=0 --stream-mmap --stream-count=2 -d /dev/video0
v4l2-ctl -c bypass_mode=1 --stream-mmap --stream-count=2 -d /dev/video0
```

5. **Library version changes:**

  • Upgraded all packages to latest 36.4.7
  • Downgraded to 36.4.4
  • Selectively held nvidia-l4t-kernel packages while upgrading others
  • Attempted to match exact library versions from working Jetson

6. **Complete system reflash:**

  • Reflashed via Balena Etcher - same error
  • Reflashed via NVIDIA SDK Manager - same error
  • Reflashed via terminal with `flash.sh` script - same error
  • Reflashed to Jetpack 6.1, 6.2, and 6.2.1 (always the same error)

7**NVCSI clock override**: Setting all CSI clocks to max rate (per NVIDIA forum recommendations):
```bash
sudo su -c ‘echo 1 > /sys/kernel/debug/bpmp/debug/clk/nvcsi/mrq_rate_locked’
sudo su -c ‘cat /sys/kernel/debug/bpmp/debug/clk/nvcsi/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/nvcsi/rate’
sudo su -c ‘echo 1 > /sys/kernel/debug/bpmp/debug/clk/vi/mrq_rate_locked’
sudo su -c ‘cat /sys/kernel/debug/bpmp/debug/clk/vi/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/vi/rate’
sudo su -c ‘echo 1 > /sys/kernel/debug/bpmp/debug/clk/isp/mrq_rate_locked’
sudo su -c ‘cat /sys/kernel/debug/bpmp/debug/clk/isp/max_rate | tee /sys/kernel/debug/bpmp/debug/clk/isp/rate’
```
Result: No change

9. **GStreamer queue element** (per ArduCAM GitHub issues):
```bash
gst-launch-1.0 nvarguscamerasrc sensor-id=0 ! queue ! fakesink
```
Result: No change

10. **Cleared ISP configuration caches:**
```bash
sudo rm /var/nvidia/nvcam/settings/camera_overrides.isp
sudo rm -rf /var/nvidia/nvcam/settings/serial_no_*
sudo systemctl restart nvargus-daemon
```

11. **Device tree modifications:**
- Modified overlay to use `serial_c` interface
- Changed `lane_polarity` from “6” to “0”

Result: Same VI timeout errors

-–

## What We Think May Be the Issue

Based on our analysis, the failure appears to occur at the MIPI CSI-2 data path level. The I2C control plane works (sensor is detected and initialized), but the high-speed CSI data transfer fails with VI (Video Input) timeouts.

-–

## What we cannot do

Downgrade to jetpack 5.x, our system depends on Ubuntu 22.X or higher (24.x is also valid)

Hello @cocodev.mulch383,

Thanks for such detailed problem description.

When you mention that:

  • We have a Jetson Orin Nano Devkit where the same cameras work successfully, so we know it is not a camera hardware issue.

Does it mean that out of 3 Orin Nano Devkits 1 works with the same cameras, same JP and everything… and on 2 it shows the error you mention?

best regards,
Andrew
Embedded Software Engineer at ProventusNova

hello cocodev.mulch383,

please also contact with sensor vendor to obtain the latest sensor driver, and please confirm the supported Jetpack version.

Yes indeed. There must be something different with the working jetson but we were not able to find it. We are trying to flash the working jetson’s image onto the broken ones now to see if that fixes the issue, but we would still love to know the root cause.

Yes, we are following their official guide. They support Jetpack 6.2, and they have a install script that automatically detects your jetpack version and provides the appropiate driver. So for example, for jetpack 6.2 they provide driver imx519-36.4.3, as expected. We also tried with jetpack 6.1, and 6.2.1. All are listed as supported in their official site: Introduction to Arducam Jetson Cameras - Arducam Wiki