# 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)