Arducam Pivariety camera not detected on Raspberry Pi Zero 2 W, libcamera: no cameras available

Hi, I’m trying to get an Arducam Pivariety camera working on a Raspberry Pi Zero 2 W, but it isn’t detected at all. Running libcamera-still --list-cameras just returns “No cameras available!” and the arducam-pivariety driver probe seems to fail.

Environment so far:

  • hostname: raspberrypi
  • uname -r: 6.1.21-v7+
  • Model: Raspberry Pi Zero 2 W Rev 1.0 (Hardware BCM2835, Revision 902120)
  • OS: Raspbian GNU/Linux 11 (bullseye)

libcamera packages (dpkg -l | grep libcamera):

  • libcamera-apps 1.2.1-1 armhf
  • libcamera-tools 0~git20230720+bde9b04f-1 armhf
  • libcamera0:armhf 0~git20230720+bde9b04f-1 armhf
  • python3-libcamera 0~git20230720+bde9b04f-1 armhf

What should I check first?

Can you post the relevant parts of /boot/config.txt, the overlay files present in /boot/overlays, and the kernel module list under /lib/modules/$(uname -r)/kernel/drivers/media/i2c? Also run i2cdetect -y -r 10 and dmesg | grep arducam so we can see the actual probe failure.

Here’s everything I gathered.

/boot/config.txt relevant lines:

camera_auto_detect=0
dtoverlay=arducam-pivariety
dtoverlay=vc4-kms-v3d
max_framebuffers=2
display_auto_detect=1
dtparam=audio=on
#dtoverlay=imx290#,clock-frequency=74250000
#,media-controller=0

/boot/overlays arducam entries: arducam-64mp.dtbo, arducam-pivariety.dtbo
/boot/overlays imx entries: imx219, imx258, imx290, imx296, imx327, imx378, imx462, imx477, imx519, imx708 (.dtbo)

/lib/modules/$(uname -r)/kernel/drivers/media/i2c contains: arducam_64mp.ko.xz, arducam-pivariety.ko.xz, imx219.ko.xz, imx258.ko.xz, imx290.ko.xz, imx296.ko.xz, imx477.ko.xz, imx519.ko.xz, imx708.ko.xz, ov9281.ko.xz. I don’t see imx327.ko.xz or imx462.ko.xz.

i2cdetect -y -r 10: no devices detected, all entries are --.

/dev/video nodes present: video10, video11, video12, video13, video14, video15, video16, video18, video20, video21, video22, video23, video31.

CMA: CmaTotal 262144 kB, CmaFree 77332 kB.

Reproduction:

libcamera-still -n -t 1000 -o arducam-test.jpg --width 1920 --height 1080
[0:03:09.454982921] [1195] INFO Camera camera_manager.cpp:297 libcamera v0.0.5+83-bde9b04f
ERROR: *** no cameras available ***

ls -lh arducam-test.jpg:
ls: cannot access 'arducam-test.jpg': No such file or directory

dmesg | grep arducam:

[    0.056804] platform 3f801000.csi: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/arducam_pivariety@c
[   12.869623] arducam-pivariety 10-000c: pivariety_read: Reading register 0x103 failed
[   12.869666] arducam-pivariety 10-000c: probe failed

dmesg | grep imx: no output
dmesg | grep ov9281: no output

The key lines are the pivariety_read: Reading register 0x103 failed and probe failed. The overlay is loading (that’s the csi dependency-cycle message), but when the driver tries to read register 0x103 from the sensor on i2c bus 10 at address 0x0c, it gets no response. i2cdetect -y -r 10 showing all -- confirms nothing is answering on that bus.

That almost always means the camera isn’t actually connected to the Pi — usually the ribbon cable is seated wrong or flipped. Try reversing the camera cable so the arrow points up, and keep the silver pin facing away from the camera board.

Also install libcamera from Arducam following this guide: libcamera and rpicam-apps - Arducam Wiki

The overlay loads but the sensor probe fails on the 0x103 I2C register read, which points to a physical/cable issue rather than a software config issue.

I was reading the Pivariety Quick-Start-Guide info block and originally thought it was telling me to ignore the driver installs, but now re-reading it looks like it says to ignore step 4 only. Also, the wiring diagram on that page appears to be the opposite of your instruction. Which way should the cable actually go?

Reference: Quick Start Guide - Arducam Wiki

The info block is about skipping step 4 only if you’re already on the latest Bullseye — it doesn’t mean skip the earlier driver steps. But that’s software; it won’t fix the I2C read failure you’re seeing.

For the cable, my instruction stands: the arrow points up and the silver pin faces away from the camera board. The diagram can look mirrored depending on which connector the picture is showing, but the camera-side connector is what matters for that instruction.

Which sensor/board do you actually have? Different Pivariety boards use different sensors and that affects which docs apply.

My board is B0444 and the sensor is IMX462 (the other sensor was said to be discontinued). The IMX462 isn’t mentioned on the Native-camera Libcamera-User-Guide page, which is confusing. There is an IMX462 page here: IMX462 - Arducam Wiki but it just links back to the same Quick-Start-Guide: Quick Start Guide - Arducam Wiki

Thanks, that’s useful. The IMX462 not being listed on the native libcamera guide is a documentation gap, but it shouldn’t produce this particular failure. You’re loading dtoverlay=arducam-pivariety, and that driver is failing at the I2C register read before it can even identify the sensor. So this is still looking like a connection problem rather than a missing sensor driver.

Since you’ve got the IMX462 board, check the ribbon orientation at both ends — the Pi’s camera connector and the camera board. Try the reversal I mentioned and see if either i2cdetect -y -r 10 changes or the probe error changes.

Update after trying things.

Attempt 1: added libcamera_dev and libcamera_apps per steps 1, 2, 3 of the Quick-Start-Guide, kept dtoverlay=arducam-pivariety, and skipped step 4+ because the note says I’m on the latest Bullseye rev.

Attempt 2: reversed the cable at the camera as instructed — the Raspberry Pi will not boot in this configuration. Swapped to another cable, still won’t boot.

Attempt 3: tried the new cable in every orientation: silver up CPU, silver down CPU, silver up camera, silver down camera.

Right now the cable is back in the original orientation because that’s the only one that boots. Is this camera actually confirmed to work with the Raspberry Pi Zero 2 W? I’m also starting to suspect the correct imx driver for the IMX462 just isn’t present.

Latest capture with the cable back in the original (booting) orientation:

uname -r: 6.1.21-v7+
Model: Raspberry Pi Zero 2 W Rev 1.0 (Hardware BCM2835, Revision 902120)
OS: Raspbian GNU/Linux 11 (bullseye)

libcamera packages:

  • libcamera-apps 1.2.1-1 armhf
  • libcamera-dev:armhf 0~git20230724+ad9428b4-1
  • libcamera0:armhf 0~git20230724+ad9428b4-1
  • python3-libcamera 0~git20230720+bde9b04f-1

/boot/config.txt: camera_auto_detect=0, dtoverlay=arducam-pivariety, dtoverlay=vc4-kms-v3d, max_framebuffers=2, #dtoverlay=imx290#,clock-frequency=74250000, #,media-controller=0

/boot/overlays: arducam-64mp.dtbo, arducam-pivariety.dtbo; imx219, imx258, imx290, imx296, imx327, imx378, imx462, imx477, imx519, imx708 .dtbo

/lib/modules/$(uname -r)/kernel/drivers/media/i2c: arducam-pivariety.ko.xz, arducam_64mp.ko.xz, imx219.ko.xz, imx258.ko.xz, imx290.ko.xz, imx296.ko.xz, imx477.ko.xz, imx519.ko.xz, imx708.ko.xz (no imx462.ko.xz / imx327.ko.xz)

i2cdetect -y -r 10: no devices detected (all --)
CMA: CmaTotal 262144 kB, CmaFree 70372 kB

Logs:
libcamera-still --list-cameras: “No cameras available!”
libcamera-still -n -t 1000 -o arducam-test.jpg --width 1920 --height 1080:

[0:02:34.449283624] [1176] INFO Camera camera_manager.cpp:297 libcamera v0.0.0+4367-ad9428b4
ERROR: *** no cameras available ***

ls -lh arducam-test.jpg: ls: cannot access 'arducam-test.jpg': No such file or directory

dmesg | grep arducam:

[    0.056380] platform 3f801000.csi: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/arducam_pivariety@c
[   13.300412] arducam-pivariety 10-000c: pivariety_read: Reading register 0x103 failed
[   13.300458] arducam-pivariety 10-000c: probe failed

dmesg | grep imx: no output
dmesg | grep ov9281: no output

Thanks for the detailed update. Here’s where things stand:

  • The libcamera build changed (now v0.0.0+4367-ad9428b4), but the failure is exactly the same: arducam-pivariety 10-000c: pivariety_read: Reading register 0x103 failed followed by probe failed.
  • i2cdetect -y -r 10 still shows nothing at all, including address 0x0c where the driver is trying to talk.
  • The Pi not booting when the cable is flipped is unusual and worth noting — it suggests the flipped orientation may be misaligning or shorting contacts, so the ‘arrow up’ instruction may not map cleanly to your specific board/cable revision.

On the IMX462 point: you’re right that there’s no imx462.ko.xz in /lib/modules and the IMX462 isn’t listed in the native libcamera guide. However, the current failure happens before any sensor-specific driver gets involved — the arducam-pivariety driver can’t even read register 0x103 over I2C, so the sensor is never identified. That is an I2C/connection-level failure, not a missing imx driver.

I can’t confirm the B0444/IMX462 board on a Zero 2 W from here, but the evidence still points to the camera not being reachable on I2C. For now, keep the cable in the orientation that actually boots and double-check contact alignment and power at both connectors. If you can get the board to appear on i2cdetect -y -r 10 in any orientation, then the driver/overlay side becomes the next thing to chase.