IMX477 Camera Not Detected on Jetson Orin

I’m trying to connect an IMX477 camera module to the Jetson Orin 8GB (JetPack 6.2.1). This same camera previously worked fine on a Jetson Nano (the only difference is ribbon cable since orin has smaller CSI port), but on the Orin it’s not being detected at all.

What i have checked:

  1. The camera doesn’t appear on any I2C bus
  2. No /dev/video* devices are listed
  3. Tried on CAM0

I Should expect I2C detects even without device tree support, right? do I need to install a custom device tree overlay?

*** Please note that this reply is generated by LLM automatically ***

To troubleshoot the issue with connecting an IMX477 camera module to the Jetson Orin 8GB with JetPack 6.2.1, let’s break down the steps you’ve taken and provide additional guidance.

  1. Camera doesn’t appear on any I2C bus: This is a crucial step in verifying that the camera is not being detected by the system. The IMX477 camera module uses the I2C interface for communication, so it’s expected that it should appear on one of the I2C buses. Since it’s not being detected, it’s possible that there’s an issue with the camera module, the ribbon cable, or the CSI port on the Jetson Orin.

  2. No dev/video devices are listed: This suggests that the camera is not being recognized by the system, which is consistent with the I2C detection issue.

  3. Tried on CAM0: You’ve tried connecting the camera to the CAM0 interface, which is the correct interface for the IMX477 camera module.

  4. Expect I2C detects even without device tree support: Yes, that’s correct. The I2C detection should work even without device tree support. However, device tree support is required for the camera to function properly.

To resolve the issue, you can try the following:

  • Verify the ribbon cable: Since you’ve mentioned that the ribbon cable is different due to the smaller CSI port on the Jetson Orin, double-check that the cable is properly connected and not damaged.
  • Check the camera module: Ensure that the camera module is functioning correctly and not damaged.
  • Install a custom device tree overlay: Yes, you will need to install a custom device tree overlay to support the IMX477 camera module on the Jetson Orin. You can find the device tree source code for the IMX477 camera module in the Jetson Linux kernel repository. You’ll need to compile the device tree and install it on your system.
  • Update the kernel: Make sure that your kernel is up-to-date, as newer kernel versions may include support for the IMX477 camera module.

In comparison to the Jetson Nano, the Jetson Orin has a different CSI port and may require a different device tree overlay. Additionally, the Jetson Orin has a more complex camera architecture, which may require additional configuration.

To further troubleshoot the issue, you can try the following:

  • Check the kernel logs: Look for any error messages related to the camera module in the kernel logs.
  • Use the i2cdetect command: Run the i2cdetect command to scan the I2C buses and see if the camera module is detected.
  • Use the v4l2-ctl command: Run the v4l2-ctl command to query the camera module and see if it’s recognized by the system.

By following these steps, you should be able to troubleshoot the issue and get the IMX477 camera module working on the Jetson Orin 8GB with JetPack 6.2.1.

*** Please give the thumbs up if you get answers you like. Or provide feedback to help us improve the answer. ***

You should be able enable the IMX477 by jetson-io to verify again.

Thanks

thanks it solved by modifying in jetson-io.

but it seems like gstreamer is not supported on jetson orin for imx477, if yes what’s the alternative way?

Hello @mshey904,

Sorry to hear you are having issues with the IMX477 camera on your Jetson Orin.

Let me ask you a couple questions to better understand your situation.

  1. Why do you think that GStreamer is not supported on your jetson orin for imx477?
  2. What is the output of dmesg | grep imx?

best regards,
Andrew
Embedded Software Engineer at ProventusNova

Hi ProventusNova,

Sorry I mean i have issue with gstreamer via nvarguscamerasrc. I saw some errors in argus daemon log after run the gstreamer with nvarguscamerasrc:

> gst-launch-1.0 nvarguscamerasrc sensor-id=0 num-buffers=1 ! \     'video/x-raw(memory:NVMM),width=1920,height=1080,framerate=30/1' ! \     fakesink 

Log:

> sudo journalctl -u nvargus-daemon --since "5 minutes ago" | grep -i camera  Nov 10 21:55:38 ubuntu nvargus-daemon[868]: === NVIDIA Libargus Camera Service (0.99.33)=== Listening for connections...=== gst-launch-1.0[3849]: Connection established (FFFF9962B840)OFParserListModules: module list: /proc/device-tree/tegra-camera-platform/modules/module0 Nov 10 21:55:38 ubuntu nvargus-daemon[868]: OFParserListModules: module list: /proc/device-tree/tegra-camera-platform/modules/module1 Nov 10 21:55:38 ubuntu nvargus-daemon[868]: OFParserGetVirtualDevice: NVIDIA Camera virtual enumerator not found in proc device-tree Nov 10 21:55:38 ubuntu nvargus-daemon[868]: ---- imager: Found override file [/var/nvidia/nvcam/settings/camera_overrides.isp]. ---- Nov 10 21:55:38 ubuntu nvargus-daemon[868]: ---- imager: Found override file [/var/nvidia/nvcam/settings/camera_overrides.isp]. ---- Nov 10 21:55:38 ubuntu nvargus-daemon[868]: (NvCamV4l2) Error ModuleNotPresent: V4L2Device not available (in /dvs/git/dirty/git-master_linux/camera/utils/nvcamv4l2/v4l2_device.cpp, function findDevice(), line 256) Nov 10 21:55:38 ubuntu nvargus-daemon[868]: (NvCamV4l2) Error ModuleNotPresent:  (propagating from /dvs/git/dirty/git-master_linux/camera/utils/nvcamv4l2/v4l2_device.cpp, function initialize(), line 60) Nov 10 21:55:38 ubuntu nvargus-daemon[868]: (NvOdmDevice) Error ModuleNotPresent:  (propagating from dvs/git/dirty/git-master_linux/camera-partner/imager/src/devices/V4L2SensorViCsi.cpp, function initialize(), line 111) Nov 10 21:55:38 ubuntu nvargus-daemon[868]: NvPclInitializeDrivers: error: Failed to init camera sub module v4l2_sensor Nov 10 21:55:38 ubuntu nvargus-daemon[868]: SCF: Error BadParameter:  (propagating from src/api/CameraDriver.cpp, function addSourceByIndex(), line 382) Nov 10 21:55:38 ubuntu nvargus-daemon[868]: SCF: Error BadParameter:  (propagating from src/api/CameraDriver.cpp, function getSource(), line 554) Nov 10 21:55:38 ubuntu nvargus-daemon[868]: === gst-launch-1.0[3849]: CameraProvider initialized (0xffff94b1bad0)CAM: serial no file already exists, skips storing againLSC: LSC surface is not based on full res! 
> sudo dmesg | grep imx  [   10.331335] imx477 9-001a: tegracam sensor driver:imx477_v2.0.6 [   10.631981] imx477 9-001a: imx477_board_setup: error during i2c read probe (-121) [   10.632013] imx477 9-001a: board setup failed [   10.632078] imx477: probe of 9-001a failed with error -121 [   10.632301] imx477 10-001a: tegracam sensor driver:imx477_v2.0.6 [   10.933299] tegra-camrtc-capture-vi tegra-capture-vi: subdev imx477 10-001a bound [  119.736245]  tegra_aconnect(E) cfg80211(E) pwm_tegra_tachometer(OE) snd_hda_tegra(E) nv_imx477(OE) snd_hda_codec(E) snd_hda_core(E) at24(E) mc_hwpm(OE) spi_tegra114(E) host1x_fence(OE) nvhost_vi5(OE) nvhost_isp5(OE) nvhost_nvcsi_t194(OE) tegra_camera(OE) v4l2_dv_timings(E) nvhost_nvcsi(OE) capture_ivc(OE) snd_soc_tegra_machine_driver(OE) snd_soc_tegra_utils(OE) snd_soc_simple_card_utils(E) nvidia(OE) tegra234_oc_event(OE) crct10dif_ce(E) v4l2_fwnode(E) tegra_camera_platform(OE) tegra_camera_rtcpu(OE) nvpmodel_clk_cap(OE) v4l2_async(E) thermal_trip_event(OE) videobuf2_dma_contig(E) ivc_bus(OE) videobuf2_memops(E) nvidia_vrs_pseq(OE) hsp_mailbox_client(OE) videobuf2_v4l2(E) ivc_ext(OE) tegra_dce(OE) videobuf2_common(E) nvhost_capture(OE) tsecriscv(OE) videodev(E) host1x_nvhost(OE) mc(E) governor_userspace(E) tegra_drm(OE) tegra_wmark(OE) nvhwpm(OE) cec(E) drm_kms_helper(E) tpm_ftpm_tee(E) nvidia_p2p(OE) ina3221(E) nvgpu(OE) governor_pod_scaling(OE) host1x(OE) mc_utils(OE) nvmap(OE) 

Hello @mshey904,

Understood. Thanks for sharing the extra details.

Seems like the driver is actually loading successfully.
And it’s finding 1 IMX477 camera module connected to your board.

You mentioned on your original post that there are no video devices registered under /dev/video*. Is that still the same ?

If there is now a video device registered, can you try capturing with v4l2-ctl to validate CSI config ?

v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=RG10 --stream-mmap 

Please check width, height and pixel format matches something your camera supports.

best regards,
Andrew
Embedded Software Engineer at ProventusNova

No, I fixed that issue by modifying with jetson-io.py

This is the captured image from my keyboard. looks cool and awful :)
4k:

full hd:

@mshey904,

Thanks for sharing the images.

So just to recap.

  1. You are able to capture using v4l2-ctl.
  2. Images look bad after debater.
  3. When capturing with GStreamer there are errors shown on argus daemon.

Those images you shared, did you captured them with v4l2-ctl and then post-processed them ? Or are you capturing those with nvarguscamera?

best regards,
Andrew
Embedded Software Engineer at ProventusNova