Arducam 2MP IMX462 camera won't capture on Raspberry Pi 4 Bookworm, debug tool crashes

Hi everyone, hoping someone can help me out here. I’ve got an Arducam B0444 (2MP IMX462) connected to a Raspberry Pi 4 running Raspberry Pi OS Bookworm. The camera shows up when I run rpicam-hello --list-cameras, but every time I try to actually capture an image it just fails. I’ve been using:

rpicam-still --width 1920 --height 1080 -o arducam_test.jpg

No error message that makes sense to me — it just doesn’t produce an image. The ribbon cable seems seated properly but I’m not 100% sure. Anyone seen this before?

Let’s start with some diagnostics to see what’s going on under the hood. Can you run our bug-report tool and share the output? Here’s what to do:

sudo reboot
wget -O arducam-camera-bug-report https://github.com/Dion4cen/arducam-camera-bug-report/releases/download/Tool/arducam-camera-bug-report
chmod +x ./arducam-camera-bug-report
./arducam-camera-bug-report

It should produce a file called arducam-bug-report.txt. Also, if you can post a photo of your ribbon cable connections (both at the camera module and at the Pi), that would help rule out any physical connection issues.

So I ran the tool but it didn’t work — the report file is zero bytes:

$ ls -l arducam-bug-report.txt
-rw-r--r-- 1 pi pi 0 Dec  8 12:43 arducam-bug-report.txt

I tried capturing the output manually with ./arducam-camera-bug-report > arducam_dump.txt and got this Python traceback:

Traceback (most recent call last):
  File "/home/pi/./arducam-camera-bug-report", line 194, in <module>
    cmd_out = run_prog(args.c, args.t)
              ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/pi/./arducam-camera-bug-report", line 108, in run_prog
    remaining_output = p.communicate()[0]
                       ^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/subprocess.py", line 1194, in communicate
    stdout = self.stdout.read()
             ^^^^^^^^^^^^^^^^^^
ValueError: I/O operation on closed file.

Looks like the script itself has a bug with subprocess handling. I’ve attached a photo of my hardware setup. At this point I’m starting to wonder — is this camera even compatible with a Pi 4 running Bookworm?

Since the automated diagnostic isn’t cooperating, it might be faster if I take a closer look at your setup directly. I’ve sent you details via private message for a remote debugging session — please check your inbox. That way I can run the diagnostics manually and see exactly what’s happening.

I appreciate the offer but I’d rather not install remote access software on this machine for security reasons. Happy to run whatever commands you need and paste the output here though. Based on what I’ve been reading, I think we should probably check four things:

  1. Hardware detection — is the sensor actually being seen at the I²C level?
  2. I²C communication — can we talk to the sensor and read registers?
  3. Kernel driver + firmware — is the right overlay loaded and are the V4L2 subdevices reporting sane values?
  4. Libcamera diagnostics — what does cam or rpicam-hello actually see?

Can we start there? Just give me the commands and I’ll run them.

Fair enough, let’s do this step by step. To start, can you post the output of these two commands?

cat /boot/firmware/config.txt
dpkg -l | grep libcamera

That’ll show us what overlays are active and which libcamera stack you’re running.

Here you go:

config.txt (relevant lines):

dtparam=i2c_arm=on
camera_auto_detect=0
#dtoverlay=arducam-pivariety,cam1
dtoverlay=imx462,cam0
dtoverlay=vc4-kms-v3d
max_framebuffers=2
arm_64bit=1
#dtoverlay=arducam-pivariety,cam0,media-controller=1

Installed libcamera packages:

libcamera-dev 0.5.2+rpt20250909-1 arm64
libcamera-ipa:arm64 0.5.2+rpt20250909-1 arm64
libcamera-tools 0.5.2+rpt20250903-1~bpo12+1 arm64
libcamera-v4l2:arm64 0.5.2+rpt20250903-1~bpo12+1 arm64
libcamera0.5:arm64 0.5.2+rpt20250909-1 arm64
python3-libcamera 0.5.2+rpt20250903-1~bpo12+1 arm64
rpicam-apps 1.9.0-2~bpo12+1 all
rpicam-apps-core 1.9.0-2~bpo12+1 arm64

I see the problem. You’re using dtoverlay=imx462,cam0 which is the wrong device-tree overlay for this camera module. The B0444 uses the Arducam Pivariety overlay, not the generic IMX462 one. Also, having multiple overlay lines (some commented out, some not) can confuse things because libcamera may see multiple conflicting resolutions reported by different overlays.

Here’s what to do:

Step 1: Edit /boot/firmware/config.txt and change:

dtoverlay=imx462,cam0

to:

dtoverlay=arducam-pivariety

(No cam0, no media-controller — just the base overlay.)

Step 2: You’ll also need the Arducam custom libcamera packages to match. Run:

wget -O install_pivariety_pkgs.sh https://github.com/ArduCAM/Arducam-Pivariety-V4L2-Driver/releases/download/install_script/install_pivariety_pkgs.sh
chmod +x install_pivariety_pkgs.sh
./install_pivariety_pkgs.sh -p libcamera_dev
./install_pivariety_pkgs.sh -p libcamera_apps
sudo reboot

After the reboot, try rpicam-hello -t 5000 and let me know what you get.

Alright, I made the overlay change and installed those custom packages. Now the camera is detected as arducam-pivariety [1920x1080 10-bit RGGB] — which sounds promising — but capture still fails. Something really weird is going on with the reported resolution.

Here’s the output from rpicam-hello -t 5000:

[0:08:15.260701258] [1785]  ERROR IPAProxy ipa_proxy.cpp:185 Configuration file 'arducam-pivariety.json' not found for IPA module 'rpi/vc4'
[0:08:19.777252728] [1785]  INFO Camera camera_manager.cpp:220 Adding camera '/base/soc/i2c0mux/i2c@1/arducam_pivariety@c' for pipeline handler rpi/vc4
[0:08:19.777367228] [1785]  INFO RPI vc4.cpp:448 Registered camera /base/soc/i2c0mux/i2c@1/arducam_pivariety@c to Unicam device /dev/media1 and ISP device /dev/media0
    SRGGB10_CSI2P,2147485568x1080/0 - Score: 1.28253e+09
[0:08:20.084713057] [1782] ERROR Camera camera.cpp:1203 Can't configure camera with invalid configuration
ERROR: *** failed to configure streams ***

Notice the resolution: 2147485568x1080 — that’s not a typo. That’s 0x7FFFFE00 for the width, which looks like garbage from a register read. Forcing --width 1920 --height 1080 doesn’t help, same error.

I dug a bit deeper with media-ctl:

$ media-ctl -d /dev/media1 -p

The subdevice reports [fmt:SRGGB10_1X10/2147485568x1080] while crop.bounds:(0,0)/1920x1080 is correct. So the crop rectangle is fine but the format resolution is corrupted.

Also VIDIOC_STREAMON fails with EINVAL for every pixel format I try.

Here’s what my overlay line looks like now (confirmed with grep):

17:#dtoverlay=arducam-pivariety,cam1
18:#dtoverlay=arducam-pivariety
19:dtoverlay=arducam-pivariety
62:#dtoverlay=arducam-pivariety,cam0,media-controller=1

I’m on kernel 6.12.x — could this be a broken mode table or DT binding issue? Would going back to an older kernel like 6.6.x help?

Good catch on that width value — 0x7FFFFE00 is a dead giveaway. This is a known firmware incompatibility with the B0444 camera module. The sensor’s internal firmware is reporting garbage for the mode table width, which is why you’re seeing that crazy 2147485568 value. The missing IPA tuning file (arducam-pivariety.json) is also part of the problem — the custom package install should have placed that, but it won’t help until the sensor itself is reporting sane values.

You need to update the firmware on the camera module itself. First, install a dependency:

wget https://launchpad.net/ubuntu/+archive/primary/+files/libtinfo5_6.3-2ubuntu0.1_arm64.deb
sudo dpkg -i libtinfo5_6.3-2ubuntu0.1_arm64.deb
sudo apt-get -f install

Then follow the firmware update procedure documented here:

The I²C bus on the Pi 4 is likely -i 10, not -i 4, so keep that in mind when you run the updater.

I went to that forum link but the firmware update instructions there are just a screenshot — the links aren’t clickable and I can’t copy-paste the commands. I really don’t want to transcribe URLs and commands from an image. Can you provide the actual links and steps directly here?

No problem — I’ve sent you the guidance document and the firmware binary via private message. Please check your inbox for the direct download links. The key thing when you run the update: make sure you use -i 10 for the I²C bus since you’re on a Pi 4. The command will look like:

sudo ./firmware_update -m sku_b0444 -i 10

Let me know how it goes after the firmware flash and a reboot.

That did it! The firmware update with -i 10 worked perfectly. After rebooting, everything is clean:

$ rpicam-still --nopreview --raw -o test.dng

Log output:

[0:01:40.237489195] [1790]  INFO IPAProxy ipa_proxy.cpp:180 Using tuning file /usr/share/libcamera/ipa/rpi/vc4/arducam-pivariety.json
[0:01:40.558637299] [1790]  INFO Camera camera_manager.cpp:220 Adding camera '/base/soc/i2c0mux/i2c@1/arducam_pivariety@c' for pipeline handler rpi/vc4
[0:01:40.558741743] [1790]  INFO RPI vc4.cpp:448 Registered camera /base/soc/i2c0mux/i2c@1/arducam_pivariety@c to Unicam device /dev/media4 and ISP device /dev/media0
    SRGGB10_CSI2P,1920x1080/0 - Score: 1375
[0:01:40.602633414] [1787]  INFO Camera camera.cpp:1215 configuring streams: (0) 960x540-YUV420/sYCC (1) 1920x1080-SRGGB10_CSI2P/RAW
[0:01:40.676390443] [1790]  INFO RPI vc4.cpp:623 Sensor: /base/soc/i2c0mux/i2c@1/arducam_pivariety@c - Selected sensor format: 1920x1080-SRGGB10_1X10/RAW - Selected unicam format: 1920x1080-pRAA/RAW
    SRGGB10_CSI2P,1920x1080/0 - Score: 1000
[0:01:45.736299342] [1787]  INFO Camera camera.cpp:1215 configuring streams: (0) 1920x1080-YUV420/sYCC (1) 1920x1080-SRGGB10_CSI2P/RAW
[0:01:45.830131754] [1790]  INFO RPI vc4.cpp:623 Sensor: /base/soc/i2c0mux/i2c@1/arducam_pivariety@c - Selected sensor format: 1920x1080-SRGGB10_1X10/RAW - Selected unicam format: 1920x1080-pRAA/RAW
Still capture image received
Bayer format is RGGB-10

Resolution is now correctly 1920x1080, the IPA tuning file is found and loaded, and the DNG file is 4.0MB:

-rw-r--r-- 1 pi pi 4.0M Dec 15 19:03 test.dng

So the root cause was the firmware on the B0444 module itself — it was reporting garbage for the frame width (0x7FFFFE00), and no amount of overlay or package tweaking was going to fix that. The firmware flash sorted it completely.

For anyone else hitting this: the two key fixes were:

  1. Using dtoverlay=arducam-pivariety (not imx462,cam0) in /boot/firmware/config.txt
  2. Flashing updated firmware with -i 10 for the I²C bus on Pi 4

Thanks for sticking with me through the debugging!