Can't save MIPI camera stream to video on Jetson NX with Jetvariety boards

We purchased a few OV9281 global shutter cameras (UC-599 rev.B, UC-621 rev.B, UC-545 rev.C from RobotShop order #1119691) for use on a Jetson Xavier NX. We got them working on a Jetson Nano for testing after buying the Jetvariety adapter boards, but on the NX we just get a black screen. The camera prints version info and module info fine, but the view stays black. Works perfectly on Nano with the exact same setup. We’re trying to use this for vehicle license plate scanning at daytime.

Thanks for the detailed report. Let’s start with the black screen on Xavier NX. The most common cause is a RAW format difference between the platforms. Jetson Nano handles RAW10 natively, but Xavier NX interprets it as RAW16 (shifted 6 bits left), which gives you a black frame. Take a look at our format handling code here: MIPI_Camera/Jetson/Jetvariety/example/utils.py at master · ArduCAM/MIPI_Camera · GitHub

Also, could you run our unmodified display script and send us the dmesg.log? That will tell us if there are any kernel-level errors: MIPI_Camera/Jetson/Jetvariety/example/arducam_displayer.py at master · ArduCAM/MIPI_Camera · GitHub

I ran the script and captured dmesg. The log doesn’t show obvious errors, but I’m getting these kernel timeouts:
[539.988552] tegra194-vi5 15c10000.vi: uncorr_err: request timed out after 2500 ms
[539.988694] tegra194-vi5 15c10000.vi: err_rec: attempting to reset the capture channel
[539.990873] tegra194-vi5 15c10000.vi: err_rec: successfully reset the capture channel

Also regarding exposure - when we do get a picture outside, it’s completely blown out. We’re using v4l2-ctl -c exposure=1000 which helps, but we really need auto exposure for our application. On Nano the camera works great with manual exposure once dialed in. Also, we found a forum thread with the same black screen issue on Xavier NX with no resolution: ArduCAM OV9281 not working on Xavier NX dev. kit

Good news - I tested the OV9281 on our Xavier NX setup and it works fine here, so we can get this sorted. A few things to try:

  1. Update your L4T image - Please try flashing the latest L4T 32.6.1. That resolved the issue for another customer with the same black screen problem on NX.
  2. Check your cable - Make sure you’re using the exact same FFC cable that works on the Nano. A damaged or different cable can cause the “request timed out” errors you’re seeing.
  3. Try a different camera interface on the NX board if available.

Regarding auto exposure - these OV9281 modules don’t support hardware auto exposure. I can provide a software auto exposure example (Python) but fair warning: it will mean losing gstreamer pipeline support. It works via OpenCV and manual v4l2 control loops. I’ll prepare that example code and send it over.

Flashed the latest L4T 32.6.1 image and that solved the black screen issue on Jetson NX - cameras are working now! The RAW format handling tip was also helpful. We’re getting good results for license plate capture with the right optics and manual exposure.

However, new issue - with the short 15cm cable it works fine, but we need 1m cables for our product (two cameras). On Nano, 1m cables work perfectly. On NX, we get “VIDIOC_DQBUF: Resource temporarily unavailable” with longer cables. The IMX477 and other cameras work fine with the same 1m cable on NX - only the OV9281 fails. This is a showstopper for our production run of ~100 units. Any workaround?