Jetson Orin NX / JP6.2.2 / OV5647: probe succeeds, /dev/video0 exists, VIDIOC_STREAMON succeeds, but no SOF / no NVCSI events / capture times out
Hi NVIDIA team,
I am trying to bring up an OV5647 MIPI CSI-2 camera on Jetson Orin NX and need help understanding why the Jetson software stack does not see CSI frame ingress, even though sensor-side
bring-up appears successful.
Goal
My goal is to get a working OV5647 raw capture path on:
- Jetson Orin NX
- CLB Developer Kit carrier board from makerobo
- JetPack 6.2.2 / L4T R36.5
- one OV5647 sensor
- 2-lane CSI-2
- one minimal 640x480 BG10 mode first
I am trying to solve this in a reproducible way and have documented everything in a public repo:
- Repository: GitHub - amburkoff/ov5647_driver_codex · GitHub
Camera photos used in the setup:
- Top: ov5647_driver_codex/ov5647_JT-ZERO-V2.0_top.jpg at main · amburkoff/ov5647_driver_codex · GitHub
- Bottom: ov5647_driver_codex/ov5647_JT-ZERO-V2.0_bottom.jpg at main · amburkoff/ov5647_driver_codex · GitHub
Current problem
Software-wise, the sensor probes and the video node appears, but the Jetson capture stack does not see any actual CSI frame ingress.
Current symptom:
- probe succeeds
- /dev/video0 exists
- v4l2-ctl buffer setup succeeds
- VIDIOC_STREAMON returned 0 (Success)
- raw capture file stays 0 bytes
- VI logs repeated timeout:
- tegra-camrtc-capture-vi: uncorr_err: request timed out after 2500 ms
- RTCPU/NVCSI trace shows:
- no SOF
- no EOF
- no rtcpu_nvcsi_intr
- no vi_frame_begin
- no vi_frame_end
So from software point of view, it looks like sensor-side stream start works, but Jetson still does not observe frame ingress on the receiver side.
Platform and current reference configuration
Target:
- SoM: Jetson Orin NX (p3767)
- Live base carrier DT identity: p3768-0000
- Carrier used physically: CLB Developer Kit / makerobo
- JetPack: 6.2.2
- L4T: R36.5
- Kernel: 5.15.185-tegra
Current reference route under test:
- cam_i2cmux/i2c@1/ov5647_c@36
- tegra_sinterface = “serial_c”
- port-index = 2
- num_lanes = 2
- bus-width = 2
- lane_polarity = 0
- discontinuous_clk = “yes”
- cil_settletime = 0
- mclk_khz = 24000
- pix_clk_hz = 58333000
- embedded_metadata_height = 0
- reset GPIO present
- no pwdn GPIO on this current route-C baseline
Current boot profile:
- boot_profile=ov5647-dev
What is already confirmed working
Sensor / low-speed side
Confirmed:
- sensor responds on I2C at 0x36
- chip ID reads correctly as 0x5647
- driver probe succeeds
- /dev/video0, /dev/v4l-subdev0, /dev/v4l-subdev1 are created
- media graph is linked as:
- nv_ov5647 → nvcsi → vi-output
Stream command path
VIDIOC_STREAMON succeeds.
Sensor-side register readback confirms that the sensor really enters stream state:
- 0x0100 = 0x01 after stream-on
Also, the sensor does not appear to silently fall out of stream during the timeout window.
I added lifecycle register dumps and observed:
| Phase | 0x0100 | 0x300d | 0x4202 | 0x4800 |
|---|---|---|---|---|
| after_stream_on | 0x01 | 0x00 | 0x00 | 0x34 |
| before_stream_off | 0x01 | 0x00 | 0x00 | 0x34 |
| after_stream_off | 0x00 | 0x01 | 0x0f | 0x25 |
This means:
- sensor is still in stream state right before Jetson explicitly stops it
- only after explicit stream-off does it return to standby/LP11 state
So software-wise, the sensor appears to stay in stream state correctly.
What Jetson software stack shows
I used RTCPU/NVCSI trace and additional clock/power-domain observation.
What I see during failed capture:
- nvcsi and vi clocks do come up during the timeout window
- but trace still shows:
- no capture_event_sof
- no capture_event_eof
- no rtcpu_nvcsi_intr
- no rtcpu_vinotify_error
- no vi_frame_begin
- no vi_frame_end
So the capture stack is not idle, but it still does not see usable frame ingress.
What has already been tested
I tried multiple controlled software-side variants:
DT route variants
- route A
- route C
- blind cross-route hybrid:
- i2c@0 + serial_c + port-index=2
- blind cross-route hybrid:
- i2c@1 + serial_b + port-index=1
All of them produced the same class of failure:
- VIDIOC_STREAMON success
- zero-byte raw file
- no SOF
- no NVCSI intr
- VI timeout
MCLK / timing side
- corrected extperiph1 binding
- tested mclk_khz=25000 intent
- tested canonical route-C with mclk_khz=24000
- runtime still enables 24000000
- no change in failure signature
Sensor-side diagnostics
- test pattern support added and read back successfully
- key stream/MIPI registers dumped
- sensor remains in stream state until explicit stop
- no sign of stream-bit rollback during timeout
Why I am asking for help
At this point, the software evidence looks like this:
- sensor-side initialization works
- I2C works
- chip ID works
- /dev/video0 exists
- VIDIOC_STREAMON succeeds
- sensor registers indicate streaming is active
- Jetson clocks for capture path come up
- but Jetson software still sees no CSI frame ingress at all
I would like guidance from NVIDIA on what to check next in software.
Questions
-
Given this exact signature:
- VIDIOC_STREAMON success
- repeated VI timeout
- no SOF
- no rtcpu_nvcsi_intr
- no vi_frame_begin/end
what is the most likely software-side issue in the Jetson camera stack?
-
Is there any NVIDIA-specific requirement for OV5647 on Orin NX / R36.5 that I may still be missing in:
- DT mode node
- NVCSI/VI routing
- tegra-camera-platform module description
- metadata settings
- pixel clock / timing fields
-
Is embedded_metadata_height = 0 acceptable for this kind of raw OV5647 bring-up on Orin, or does NVIDIA expect a different value for proper capture path behavior?
-
Is there any recommended official way to debug “sensor streams but Jetson sees no SOF” on R36.5 beyond the tracepoints I already used?
-
If you want, I can provide any exact artifact from the repo:
- current overlay
- current driver
- trace logs
- dmesg logs
- media graph
- post-reboot state
- specific reports
Useful repo links
Main repo:
Relevant reports:
- Route-C capture-side audit:
- Route-C MCLK24 runtime retest:
- Stream register lifecycle runtime:
Camera mapping / platform notes:
If needed, I can also attach the exact logs from the latest runtime test.
Thanks.